当前位置:网站首页>JSP的基本使用
JSP的基本使用
2022-08-03 05:24:00 【~老顽童!】
JSP的使用
一:概念
JSP的全名为Java Server Pages,也是Java服务端页面(动态网页技术)。
动态网页技术的概念: 页面内容根据不同时间、不同地点、不同客户显示不同的效果。
即 asp、php、cgi等动态网页技术。
同时,在网页 html 中嵌入java代码,实现动态的业务逻辑。
二:JSP本质
JSP的本质是 Servlet,第一次访问jsp页面时,Tomcat服务器会将.jsp文件转化为.java源文件,然后编译成.class字节码文件,加载到JVM运行。
提醒:我们可以在Tomcat目录下的 work 文件夹下找到对应的源文件和字节码文件。
由上图可知,index_jsp继承了HttpJspBase类,而HttpJspBase类是HttpServlet类的子类,因此说JSP本质上是一个Servlet。
三:JSP七大元素
3.1 html
在JSP中可以按照编写HTML页面的方式来编写,可以包含HTML文件的所有静态内容,并且可以在HTML内容之间嵌套JSP的其他元素来产生动态内容和执行业务逻辑。
3.2 指令
JSP指令可以用来设置整个JSP页面的相关属性,如网页的编码格式,使用的脚本语言。
例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
共三种指令标签: page include taglib
指令 | 描述 |
---|---|
<%@ page…%> | 定义网页依赖属性 |
<%@ include… %> | 包含其他文件 |
<%@ taglab…%> | 引入标签库的定义 |
①:== Page指令==:一个页面可以有多个page指令,常见的属性有contentType(指定当前JSP页面的字符编码)、import(导入要使用的Java类)、language(定义JSP页面所使用的的脚本语言,默认是Java)等。
<%@ page import="类的完整路径"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
②:include指令:此指令可以包含其他文件,例如JSP文件、HTML文件、文本文件。包含的文件也作为JSP文件的一部分,会被同时编译执行。
<%@ include file="文件相对路径"%>
③:taglab指令:可以引入一个自定义标签集合的定义,包括路径、自定义标签。
uri是确定标签库的位置,prefix属性指定标签库的前缀,可以自定义。
<%@ taglib uri="地址" prefix="prefix"%>
<%-- 引入jstl --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3.3 注释
有两种注释方式:
第一种: <%-- 注释 --%>
第二种: <!-- 注释 --%>
第二种会在网页中的源代码中显示,第一种不会。
3.4 scriptlet脚本
语法:
<% 代码片段 %>
例:
<%
Random random = new Random();
int r = random.nextInt(99999);
for (int i = 0; i < 10; i++) {
String hexcolor = "#"+Integer.toHexString((i+1)*r);
out.println("<hr size='8' width=\""+(i+1)*20+"\"
color=\""+hexcolor+"\" />");
}
%>
3.5 表达式
语法:
<%= 表达式 %>
3.6 声明
声明中,只能用于声明属性或方法,不能直接写语句。
语法:
<%! 代码片段 %>
例: 表达式和声明搭配使用的例子
<html>
<head>
<title>Title</title>
</head>
<body>
<%! // 声明
// 属性
private SimpleDateFormat format = new SimpleDateFormat("YYYY年MM月dd日HH:mm:ss");
//方法
String getDate(){
String str = format.format(new Date());
return str;
}
%>
<%-- 表达式 --%>
今天是:<span style="color:red"><%=getDate()%> </span>
</body>
</html>
3.7 动作
作用:JSP动作标签利用XML语法格式的标记来控制Servlet引擎的行为。利用JSP动作可以动态的插入文件,重用JavenBean组件等。
特点:jsp动作元素是用XML语法写成的;jsp的动作标签,在使用的时候不需要导包(内置了);
常见的动作有 < jsp:include>、< jsp:param>、< jsp:forward>、< jsp:plugin>、< jsp:useBean>、< jsp:setProperty>、< jsp:getProperty>
①:< jsp:include>属于动态包含,它动态的包含一个文件的内容
<jsp:include page="/include.jsp"></jsp:include>
注意: <%@ include file="/include.jsp" %>属于静态包含。
静态包含和动态包含的区别:
静态包含的结果是把其他的jsp文件引入到当前jsp,转义为.java源文件时,把两个页面合成一个页面Servlet类,所有的变量属于一个类,一个作用域。
动态包含的结构是两者独立的,转义.java源文件时,引入的jsp文件和当前jsp文件是分别进行转义和编译的,生成两个或多个类,两个类之间变量不共享。
②:< jsp:param>起传递参数作用,可以传递多个参数。要与< jsp:include>或者< jsp:forward>配合使用
<jsp:include page="/include.jsp">
< jsp:param name="参数名" value="参数值">
</jsp:include>
③:< jsp:forward>作用是跳转页面,可以与< jsp:param>配合使用。
<jsp:forward page="转向页面的url" >
<jsp:param name="参数名1" value="参数值1">
</jsp:forward>
④:< jsp:plugin>法作用根据浏览器的类型,插入Java插件。
⑤:< jsp:useBean>作用是加载一个将在JSP页面使用的JavaBean。
<jsp:useBean id="对象名" class="完整包名.类名" />
⑥:< jsp:setProperty>作用是设置已经实例化的Bean对象的属性
<jsp:useBean id="对象名" ... >
<jsp:setProperty name="javaBean对象名" property="javaBean对象的属性名" .../>
</jsp:useBean>
⑦:< jsp:getProperty>作用是获取指定Bean属性的值
<jsp:getProperty name=“javaBean对象” property=“javaBean对象属性名” />
四:内置对象
JSP中的内置对象,又称为隐式对象。是在 JSP 中不需要自己声明可以直接使用的对象。容器提供了9种容器对象。分别是out、page、pageContext、request、session、application、config、exception、response,其中pageContext、request、session、application四个作用域对象。
都有方法: setAttribute(key,val) 、getAttribute(key)、removeAttribute(key)
out 对象: out对象是JspWriter 类的实例,用于将结果输出到网页上。
page对象:page对象就是this类似于this关键字,可以看作是整个JSP页面的代表。
config对象:config对象是 ServletConfig 类的实例。
exception对象:exception对象是Exception类的对象,代表发生错误的JSP页面中对应的异常对象。
pageContext对象:可以代表整个JSP页面,提供JSP页面所有对象。如果此对象使用了动态包含,那么两个页面的数据是不共享的。如果使用了静态包含,两个页面的数据是共享的,此时两个页面只能有一个相同的属性名,有两个就会报错。
request对象:request对象是HttpServletRequest 类的实例。每次客户端发送一个请求时,JSP引擎会制造一个新的request对象来代表这个请求。
request对象的方法有:
①:getParameter(String name): 获得客户端传送给服务器端的有name指定的参数值
②:getParameterNames(): 获得客户端传送给服务器端的所有参数的名字,结果是一个枚
举的实例
③:getParameterValues(String name):获得有name指定的参数的所有值
④:setAttribute(String name,Object):设置名字为name的request的参数值
⑤:getAttribute(String name): 返回由name指定的属性值
⑥:setCharacterEncoding(“utf-8”); 设置请求编码
⑦:getRemoteAddr(): 获取客户端的IP地址
⑧:getSession([Boolean create]): 返回和请求相关Session
⑨:getServletPath(): 获取客户端所请求的脚本文件的路径session对象
session对象是HttpSession类的实例,作用是来实现会话跟踪。比如在第一次访问服务器时,服务器会在响应时,返回给客户端一个session 用来区分不同会话,来实现会话跟踪。
session对象的方法有:
setAttribute(key,value)
getAttribute(key)
setMaxInactiveInterval(20):设置最大非活动间隔时间 单位是秒
getMaxInactiveInterval() : 获取最大非活动间隔时间
isNew() : 是否第一次访问
getCreationTime() : 获取session 创建时间
getLastAccessedTime() : 获取上次访问时间application对象
application对象是ServletContext类的实例,此对象的整个生命周期都代表此JSP页面,此对象在JSP页面初始化就创建了。
application对象的方法有:
setAttribute(key,value)
getAttribute(key)
getAttributeNames():获取 application 对象的所有参数名字
removeAttribute(key): 根据key删除 application 对象的参数
getMajorVersion():获取服务器支持 Servlet 的主版本号
getMinorVersion(): 获取服务器支持 Servlet 的从版本号response对象
response对象是HttpServletResponse类的实例,当服务器创建request对象时同时会创建response对象,用来响应客户端。
response对象的方法有:
setAttribute(key,value)
getAttribute(key)
setCotentType(type):设置页面的 MIME 类型和字符集
addCookie(cookie):添加 cookie 信息
sendRedirect(location):实现页面重定向
五:其他:
5.1 POST和GET请求
区别:
比较项 | get | post |
---|---|---|
参数出现在URL中 | 是 | 否 |
长度限制 | 有 | 无 |
安全性 | 低 | 高 |
URL可传播 | 是 | 否 |
注意:
参数: POST传参是请求体,隐式方式提交的。GET在地址栏使用URL传参
安全:POST安全的,GET不安全。
长度:POST 没有限制,支持大量数据提交,支持文件上传;GET 限制,用于传输小量数据
传播、收藏:POST 不支持,GET 支持
5.2 重定向和转发
重定向语法:response.sendRedirect(页面的相对路径);
转发语法:request.getRequestDispatcher(页面的相对路径).forward(request,response);
区别:
重定向 | 转发 | |
---|---|---|
地址栏 | 地址栏URL改变 | 地址栏URL不改变 |
传值 | 不能共享和获取请求中的数据 | 可以获取到请求数据 |
次数 | 发送两次请求 | 发送一次请求 |
位置 | 是浏览器发生的跳转 | 是服务器端发生的跳转 |
5.3 四种作用域对象的比较
从小到大的顺序:
pageContext:只在当前页面(和被静态包含的页面中)起作用
request:当前页面、转发的页面
session:一次会话中所有的页面
application:整个应用范围
测试:
pageContext页面
<h1>pageContext页面</h1>
<%
pageContext.setAttribute("key","pageContext");
request.setAttribute("key","request");
session.setAttribute("key","session");
application.setAttribute("key","application");
%>
<h1>采用链接跳转</h1>
<a href="TestSession.jsp">跳转到Session页面测试</a>
<a href="TestRequest.jsp">跳转到Request页面测试</a>
<a href="TestApplication.jsp">跳转到Application页面测试</a>
<p>pageContext:<%=pageContext.getAttribute("key")%></p>
<p>request:<%=request.getAttribute("key")%></p>
<p>session:<%=session.getAttribute("key")%></p>
<p>application:<%=application.getAttribute("key")%></p>
Request页面
<h1>Request页面</h1>
<p>pageContext:<%=pageContext.getAttribute("key")%></p>
<p>request:<%=request.getAttribute("key")%></p>
<p>session:<%=session.getAttribute("key")%></p>
<p>application:<%=application.getAttribute("key")%></p>
Session页面
<h1>Session页面</h1>
<p>pageContext:<%=pageContext.getAttribute("key")%></p>
<p>request:<%=request.getAttribute("key")%></p>
<p>session:<%=session.getAttribute("key")%></p>
<p>application:<%=application.getAttribute("key")%></p>
Application页面
<h1>Application页面</h1>
<p>pageContext:<%=pageContext.getAttribute("key")%></p>
<p>request:<%=request.getAttribute("key")%></p>
<p>session:<%=session.getAttribute("key")%></p>
<p>application:<%=application.getAttribute("key")%></p>
测试结果:
进入pageContext页面后;
点击跳转到Session页面后
点击跳转Request页面后
点击跳转Application页面后
当你除了PageContext页面,将其他三个页面的地址复制到另外一个浏览器中,会出现取得session的值为null
案例:实现登录注册功能,并且使用Session跟踪用户登录信息
边栏推荐
- 自监督论文阅读笔记Efficient Self-supervised Vision Pretraining with Local Masked Reconstruction
- 【DC-5 Range Penetration】
- ZEMAX | 绘图分辨率结果对光线追迹的影响
- 全球一流医疗技术公司如何最大程度提高设计工作效率 | SOLIDWORKS 产品探索
- window下VS2022封装静态库以及调用静态库
- 设备树解析源码分析<devicetree>-1.基础结构
- 优雅的拦截TabLayout的点击事件
- ASP.NET MVC3的伪静态实现
- 观看华为AI技术领域课程--深度学习前三章总结
- A.1#【内存管理】——1.1.2 zone: struct zone
猜你喜欢
随机推荐
PCB设计经验之模拟电路和数字电路区别为何那么大
自监督论文阅读笔记 DetCo: Unsupervised Contrastive Learning for Object Detection
Oracle 注释详解(--、/**/、rem)
借助ginput函数在figure窗口实时读取、展示多条曲线的坐标值
ZEMAX | 如何创建简单的非序列系统
虚拟地址空间布局
【第三周】ResNet+ResNeXt
Hook初探索
建立平衡二叉树简单demo
自监督论文阅读笔记Reading and Writing: Discriminative and Generative Modelingfor Self-Supervised Text Recogn
自监督论文阅读笔记 Ship Detection in Sentinel 2 Multi-Spectral Images with Self-Supervised Learning
自监督论文阅读笔记 Self-Supervised Visual Representation Learning with Semantic Grouping
ARMv8 架构----armv8 类别
opencv目标检测
常见的电子元器件分类介绍-唯样商城
自监督论文阅读笔记Efficient Self-supervised Vision Pretraining with Local Masked Reconstruction
卷积神经网络入门
Gradle插件与代理服务器导致Sync Project失败的问题
自监督论文阅读笔记SELF-SUPERVISED SPECTRAL MATCHING NETWORK FOR HYPERSPECTRAL TARGET DETECTION
寄存器常见指令