JSP 简介
全名为Java Server Pages,其根本是一个简化的Servlet设计,实现了在Java当中使用HTML标签。JSP是一种动态网页技术标准,也是JavaEE的标准,JSP与Servlet一样,是在服务器端执行的。
软件开发三大方向:
- 桌面应用程序
- Web应用程序
- 嵌入式应用程序(手机的APP)
一、Web 开发知识补充
1.1 静态网页 VS 动态网页
1.1.1 静态网页
- 内容固定,不会更新
- HTML,CSS
1.1.2 动态网页
- 通过程序动态显示,自动更新
- 所需技术:HTML,CSS,JS,XML,数据库库,一门高级语言(Java,C#,PHP)
- 主流的动态网页脚本技术:JSP/Asp.net/php
1.2 搭建 Java Web
JDK , Tomcat, IDE
推荐:JDK1.7,Tomcat7.0,MyEclipse10
1.2.1 Tomcat 目录结构
目录 | 说明 |
---|---|
/bin | 存放各种平台下用于启动和停止Tomcat的命令文件 |
/conf | 存放Tomcat服务器的各种配置文件 |
/lib | 存放Tomcat服务器所需的各种JAR文件 |
/logs | 存放Tomcat的日志文件 |
/temp | Tomcat运行时用于存放临时文件 |
/webapps | 当发布Web应用时 |
/work | Tomcat把由JSP生成的Servlet放于此目录下 |
1.2.2 WEB-INF 目录结构
- WEB_INF:Java的Web应用的安全(客户端无法访问,只有服务端可以访问的)目录。
- web.xml 项目部署文件
- classes:放置*.class文件,放在WEB_INF目录下,IDEA需要手动建立
- lib文件夹:放置需要的jar包,放在WEB_INF目录下,IDEA需要手动建立
1.3 如何修改Tomcat的端口?
修改 Tomcat的conf/server.xml的:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改Port就能成功修改Tomcat的默认端口
1.4 常见动态网站开发技术对比
- JSP:Java平台,安全性高,适合开发大型的,企业级的Web应用程序
- Asp.net:.Net平台,简单易学,但是安全性以及跨平台性差
- PHP:简单,高效,成本低开发周期短,特别适合中小型企业的Web应用开发(LAMP:Linux+Apache+MySQL+PHP)
JSP 适合分布式的,Hadoop
二、JSP 基础语法
页面元素组成:
- 静态内容
- 指令
- 注释
- 脚本
- 声明
- 表达式
2.1 JSP指令
指令 | 说明 |
---|---|
page | 通常位于JSP页面的顶端,同一个页面可以有多个page指令 |
include | 将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句 |
taglib | 使用标签库定义新的自定义标签,在JSP页面中启用定制行为 |
2.1.1 page指令
语法:
<%@ page 属性1="属性值" 属性2="属性值1,属性值2"... 属性n="属性值n" %>
属性 | 描述 | 默认值 |
---|---|---|
language | 指定JSP页面使用的脚本语言 | Java |
import | 通过该属性来引用脚本语言中使用到的类文件 | 无 |
contentType | 用来指定JSP页面所采用的编码方式 | text/html,ISO-8859-1 |
2.2 JSP 注释
HTML 注释
<!-- HTML 的注释 --> //客户端可见,审查元素时
JSP的注释:
<%-- JSP 的注释 -- %> //客户端不可见
JSP 脚本注释:客户端不可见
// 单行注释
/* 多行注释
*/
2.3 JSP 脚本
语法:
<% Java代码 %>
2.4 JSP 声明
在JSP中定义变量或者方法
语法:
<%! Java代码%>
例子:
<%!
String s = "张三"; //声明了一个字符串
int add(int x, int y){ //声明了一个函数,返回两个整数的求和
return x+y
}
%>
2.5 JSP的表达式
JSP中执行的表达式
<%= 表达式%> // 注意表达式不以分号结束
三、JSP 内置对象
3.1 内置对象简介
JSP内置对象是web容器创建的一组对象,不用new关键字就可以使用的内置对象
<%
int[] value = {60,70,80}
for(int i:value){
out.println(i)
}
%>
JSP内置对象:
- out
- request
- response
- session
- application
- Page/pageContext/exception/config
3.2 out
JspWriter类的实例,向客户端(浏览器)输出内容常用的对象
常用方法如下:
- void println()向客户端打印字符串
- void clear() 清除缓冲区的内容,如果在flush之后调用会抛出异常
- void clearBuffer() 清除缓冲区的内容,如果在flush之后调用不会抛出异常
- void flush() 将缓冲区内容输出到客户端
- int getBufferSize() 返回缓冲区以字节数的大小,如不设缓冲区则为0
- int getRemaining() 返回缓冲区还剩余多少可用
- boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常
- void close() 关闭输出流
3.3 request/response
客户端的请求信息被封装在Request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。
3.3.1 补充:get 和 post区别
表单:
<form name=“regForm” action = “动作” method=“提交方式”></from>
表单提交方式:get和post
get:以明文的方式通过URL提交数据,数据在URL中可以看到。提交的数据量最多不超过2KB。安全性较低但效率比post方式高。适合提交数据量不大,安全性不高的数据。比如:搜索、查询等功能。
例如结果如下:
http://localhost:8080/ServletDemo/dologin.jsp?username=12&password=12
post:将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的用户信息。比如:注册,修改,上传等功能
3.3.2 常用方法
1. String getParameter(String name) 返回name指定参数的参数值
2. String[] getParameterValues(String name)返回包含参数name的所有值的数据
<h1>request 内置对象</h1>
<%
request.setCharacterEncoding("utf-8");
%>
用户名:<%=request.getParameter("username")%><br>
爱好:<%
String[] favorites = request.getParameterValues("favorite");
for (int i = 0; i < favorites.length; i++) {
out.println(favorites[i]+"  ");
}
%>
request.setCharacterEncoding("utf-8”);
避免中文在客户端显示乱码
通过URL提交表单,如果是中文可能还会乱码
解决方法:配置Tomcat
tomcat的conf目录下的 server.xml
<connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="88433" URIEncoding="utf-8" />
需要重启Tomcat生效
3. void setAttribute(String, Object) 存储此请求中的属性
4. object getAttribute(String name) 返回指定属性的属性值
如我们在解析request时候,可以设置默认项(密码):
request.setAttribute("password", "123456");
然后读取这个值
密码:<%=request.getAttribute("password")%>
5. String getContentType() 得到请求体的MIME类型
6. String getProtocol() 返回请求用的协议类型及版本号
7. String getServerName() 返回接收请求的服务器主机名
3.3.3 其他方法:
1. int getServerPort() 返回服务器接收此请求所用的端口号
2. String getCharaterEncoding() 返回字符编码方式
3. void setCharacterEncoding() 设置请求的字符编码方式
4. int getContentLength() 返回请求体的长度(字节数)
5. String getRemoteAddr() 返回请求的客户端IP地址
6. String getRealPath(String path) 返回一虚拟路径的真是路径
3.4 response 对象
包含了响应客户端请求的有关信息,但是在JSP中很少使用到它。它是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面的response对象只能对这次访问有效,其他页面的response对象对当前页面无效
3.4.1 常用方法:
1. String getCharacterEncoding() 返回响应用的是何种字符编码
2. void setContentType(String type)设置响应的MIME类型
3. PrintWriter getWriter() 返回可以向客户端输出字符的一个对象(注意比较PrintWriter与内置out对象的区别)
区别:
- out和response.getWriter的类不一样,一个是JspWriter,另一个是java.io.PrintWriter。
- 执行原理不同:JspWriter相当于一个带缓存功能的printWriter,它不是直接将数据输出到页面,而是将数据刷新到response的缓冲区后再输出,response.getWriter直接输出数据(response.print()),所以(out.print)只能在其后输出。 (如果想要out对象强制在前输出,可以out之后使用flush()方法)
- out为jsp的内置对象,刷新jsp页面,自动初始化获得out对象,所以使用out对象是需要刷新页面的,而response.getWriter()响应信息通过out对象输出到网页上,当响应结束时它自动被关闭,与jsp页面无关,无需刷新页面。「形象的比喻:当我们调用response.getWriter()这个对象同时获得了网页的画笔,这时你就可以通过这个画笔在网页上画任何你想要显示的东西。」
- out的print()方法和println()方法在缓冲区溢出并且没有自动刷新时候会产生ioexception,而response.getWrite()方法的print和println中都是抑制ioexception异常的,不会有ioexception 。
4. sendRedirect(java.lang.String location) 重定向客户端的请求
请求转发与请求重定向的区别:
- 请求重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变
- 请求转发:服务器行为,request.getRequestDispatcher().forward(req,resp);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变
例子:办理护照
重定向:你先去了A局,A局的人说:“这事不归我们管,去B局”,然后你从A退了出来,乘车去了B局
转发:你去了A局,A局看了以后,知道这个事情应该B局管,没有退出来,让你坐了一会,自己倒了后面办公室联系了B的人,让他们办好后,送了过来。
3.5 session
- 表示客户端与服务器的一次会话
- Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过这段时间,也就是用户浏览这个网站所花费的时间
- 从上述定义可以看到,session实际上是一个特定的时间概念
3.5.1 什么是Session?
在服务器的内存中保存着不同用户的session,每一个用户一个session。
3.5.2 session 对象
- JSP内置对象
- 在第一个JSP页面被装载时自动创建,完成会话期管理
- 从一个客户打开浏览器并连接到服务器开始,到客户端关闭浏览器离开这个服务器结束,被称为一个会话
- 当客户访问一个服务器时,可能在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象
- session对象是HTTPSession类的实例
3.5.3 常用方法:
1. long getCreationTime():返回Session创建时间
2. public String getID(): 返回session创建时JSP引擎为它设的唯一ID号
3. public Object setAttribute(String name, Object value):使用指定名称对象绑定此会话
4. public Object getAttribute(String name):返回此会话中的指定名称绑定在一起时的对象
如果没有对象绑定在该名称,返回Null
5. String[] getValueNames():返回一个包含此session中所有可用属性的数组
6. int getMaxInactiveInterval(): 返回两次请求间隔多长时间此session被取消(单位秒)
3.5.4 Session 生存周期
- 创建
- 活动
- 销毁
3.5.4.1 创建:
当客户端第一次访问某个JSP或者servlet时候,服务器会为当前会话创建一个sessionId,每次客户端向服务器发送请求时,都会将此SessionId携带过去,服务端会对此SessionId进行校验
3.5.4.2 活动:
- 某次会话当中通过超链接打开的新页面属于同一次会话。
- 只要当前会话页面没有全部关闭,重新打开的新浏览器窗口访问同一个项目资源时属于同一次会话。
- 除非本次会话的所有页面都关闭后再重新访问某个JSP或者Servlet,将会创建新的会话。
注意事项:注意原有会话还存在,只是这个旧的sessionId仍存在服务端,只是再也没有客户端会携带它然后交于服务端校验
3.5.4.3 销毁:
session的销毁方式只有三种:
- 调用session.invalidate()方法
- session过期(超时)
- 服务器重启
设置超时时间两种方式:
- session.setMaxInactiveInterval(时间)时间是秒
- web.xml配置
<session-config>
<session-timeout>
10 //分钟
</session-timeout>
</session-config>
3.6 application
- 实现了用户间数据的共享,可存放全局变量
- 开始于服务器的启动,终止于服务器的关闭
- 在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作
- 在任何地方对application对象属性的操作,都将影响到其他用户对此的访问
- 服务器的启动和关闭决定了application对象的声明
- application对象是ServletContext类的实例
常用方法:
- public void serAttribute(String name, Object value)使用指定名称将对象绑定到此会话
- public Object getArrtibute(String name) 返回与此会话中的指定名称绑定在一起的对象,如果没有对象绑定在此名称下,则返回null
- Enumeration getAttributeNames()返回所有可用属性名的枚举
- String getServerInfo()返回JSP(Servlet)引擎名及版本号
3.7 page / pageContext / exception / config
3.7.1 page 对象
指当前JSP页面本身,有点像类中的this指针,它是Java.long.Object类的实例
常用方法(Object类的方法):
- class getClass() 返回此Object 的类
- int hashCode() 返回此Object的Hash码
- boolean equals(Object obj) 判断此Object是否与指定的Object对象相等
- void copy(Object obj)把此Object拷贝到指定的Object对象中
- Object clone() 克隆此Object对象
- String toString 把Object对象转换成String类的对象
- void notify() 唤醒一个等待的线程
- void notifyall() 唤醒所有等待的线程
- void wait(int timeout)使一个线程处于等待直到timeout结束或者被唤醒
- void wait() 使一个线程处于等待直到被唤醒
3.7.2 pageContext对象
- 提供了对JSP页面内所有的对象及名字空间的访问
- 可以访问到本页所在的session,也可以取本页面所在的application的某一个属性值
- 相当于页面中所有功能的集大成者
- 本类名也叫pageContext
常用方法:
- JspWriter getOut() 返回当前客户端响应被使用的JspWriter流(out)
- HttpSession getSession() 返回当前页中的HttpSession对象(session)
- Object getPage() 返回当前页的Object对象(page)
- ServletRequest getRequest() 返回当前页的ServletRequest对象(request)
- ServletResponse getResponse() 返回当前页的ServletResponse对象(response)
- void setAttribute(String name, Object attribute)设置属性及属性值
- Object getAttribute(String name, int scope)在指定范围内取属性的值
- int getAttributeScope(String name) 返回某个属性的作用范围
- void forward(String relativeUrlPath) 使当前页面重导到另一页面
- void include(String relativeUrlPath)在当前位置包含另一文件
3.7.3 Exception对象
异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设置为true,否则无法编译。它实际上是java.lang.Throwable的对象
常用方法:
- String getMessage() 返回描述异常的消息
- String toString() 返回关于异常的简短描述信息
- void printStackTrace() 显示异常及其栈轨迹
- Throwable FillInStackTrace() 重写异常的执行栈轨迹
需要处理异常的页面,页面头要加上errorPage
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="exception.jsp" %>
Exception页面要在page中填写isErrorPage
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
3.7.4 Config 对象
在Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)
常用方法如下:
- ServletContext getServletContext() 返回含有服务器相关信息的 ServletContext 对象
- String getInitParameter(String name)返回初始化参数的值
- Enumeration getInitParameterNames() 返回Servlet初始化所需所有参数的枚举
四、JavaBean
4.1 JavaBean 简介
就是符合某种特定的规范的Java类。使用Javabeans的好处是解决代码重复编写,减少代码冗余,功能区分明确,提高了代码的维护性。
4.2 JavaBean的设计原则
- 公有类
- 无参的公有构造方法
- 属性私有
- getter和setter方法
Javabean 设计原则举例
//设计学生类
public class Students // 公有类
{
private String name; //属性私有
private int age; //属性私有
public Students() //无参的公有构造方法
{}
// getter 和 setter 方法
public void setName(String name){this.name =name;}
public String getName(){return this.name}
public void setAge(int age){this.age = age;}
public int getAge(){return this.age;}
}
什么是Jsp动作
JSP动作元素(acion elements)为请求处理阶段提供信息。动作元素遵循XML元素的语法,有一个包含元素名的开始标签,可以有属性、可选内容、与开始标签匹配的结束标签。
第一类:存取与JavaBean有关「重要」
- <jsp:useBean>
- <jsp:setProperty>
- <jsp:getProperty>
第二类:JSP1.2开始有的基本元素,包含6个动作元素
- <jsp:include>
- <jsp:forward>
- <jsp:param>
- <jsp:plugin>
- <jsp:params>
- <jsp:fallback>
第三类:JSP2.0新增加的元素,主要与JSP Document有关,包含6个元素
- <jsp:root>
- <jsp:declaration>
- <jsp:scriptlet>
- <jsp:expression>
- <jsp:text>
- <jsp:output>
第四类:JSP2.0新增加的动作元素,主要是用来动态生成XML元素标签的值,包括3个动作
- <jsp:attribute>
- <jsp:body>
- <jsp:element>
第五类:JSP2.0 新增加的动作元素,主要使用在Tag File中,有2个元素
- <jsp:invoke>
- <jsp:dobody>
4.3 如何在JSP页面中使用Javabeans?
4.3.1 像使用普通类一样创建Javabeans实例
<body>
<%
Users user = new Users();
user.setUsername("admin");//设置用户名
user.setPassword("123456"); //设置密码
%>
<h1>使用普通方式创建javabean实例</h1>
<hr>
用户名:<%=user.getUsername()%><br>
密码:<%=user.getPassword()%><br>
</body>
4.3.2 JSP页面中通常使用动作标签使用javabean
useBeans动作 setProperty动作 getProperty动作
<jsp:useBeans>
作用:在jsp页面中实例化或者在指定范围内使用javabean:
<jsp:useBean id="标识符" class="java类名(包括包名.类名)" scope="作用范围"/>
<jsp:useBean id="myUsers" class="com.po.Users" scope="page"/>
<h1>使用useBean动作创建javabean实例</h1>
<hr>
用户名:<%=myUsers.getUsername()%><br>
密码:<%=myUsers.getPassword()%><br>
<set:Property>
作用:给已经实例化的JavaBean对象的属性复制,一共有四种形式
<jsp:setProperty name=“JavaBean实例名” property = “*” /> (与表单关联)
<jsp:setProperty name=“JavaBean实例名” property = “JavaBean属性名” /> (与表单关联)
<jsp:setProperty name=“JavaBean实例名” property = “JavaBean属性名” value=BeanValue“” /> (手工设置)
<jsp:setProperty name=“JavaBean实例名” property = “propertyName” param=“request对象中的参数名” /> (与request参数关联)
<jsp:useBean id="myUsers" class="com.po.Users" scope="page"/>
<h1>setProperty动作元素</h1>
<hr>
<!-- 根据表单自动匹配所有的属性 -->
<%-- <jsp:setProperty name="myUsers" property="*"/> --%>
<!-- 根据表单自动匹配部分的属性 -->
<%-- <jsp:setProperty name="myUsers" property="username"/> --%>
<!-- 跟表单无关,通过手动复制给属性(意味着表单填写的无任何效果) -->
<%--
<jsp:setProperty name="myUsers" property="username" value="xiaoshan"/>
<jsp:setProperty name="myUsers" property="password" value="520"/>
--%>
<jsp:setProperty name="myUsers" property="password" param="mypass"/>
用户名:<%=myUsers.getUsername()%><br>
密码:<%=myUsers.getPassword()%><br>
第四种:form提交的action中设置了mypass参数
<form name="loginFrom" action="dologin.jsp?mypass=520" method="post">
<get:Property>
作用:获取指定JavaBean对象的属性值
<jsp:getProperty name=“JavaBean实例名“ property=“属性名”/>
<!-- 使用传统表达式的方式获取用户名和密码 -->
用户名:<%=myUsers.getUsername()%><br>
密码:<%=myUsers.getPassword()%><br>
<!-- 使用 getProperty 方式获取 -->
用户名:<jsp:getProperty name="myUsers" property="username"/><br>
密码:<jsp:getProperty name="myUsers" property="password"/><br>
JavaBean的四个作用域范围
说明:使用useBeans 的scope属性可以用来指定JavaBean的作用范围
- page //当前页面有效
- request //可以通过HttpRequest.getAttribute()方法获取JavaBean对象
- session //可以通过HttpSession.getAttribute()方法获取JavaBean对象
- application // 可以通过application.getAttribute() 方法获取JavaBean对象
作用域 | 描述 |
---|---|
存储在application对象中的属性 | 可以被同一个WEB应用程序中的所有Servlet和JSP页面访问 |
存储在session对象中的属性 | 可以被属于同一个会话(浏览器打开直到关闭称为一次会话,且在此期间会话不失效)的所有Servlet和JSP页面访问 |
存储在request对象中的属性 | 可以被属于同一个请求的所有Servlet和JSP页面访问(在有转发的情况下可以跨页面获取属性值),例如使用PageContext.forward和PageContext.include方法连接起来的多个Servlet和JSP页面 |
存储在pageContext对象中的属性 | 仅可以被当前JSP页面的当前响应过程中调用的各个组件访问,例如,正在响应当前请求的JSP页面和它调用的各个自定义标签类 |
<h1>JavaBean四个作用域范围</h1>
<hr>
<jsp:useBean id="myUsers" class="com.po.Users" scope="request"/>
<!-- 使用 getProperty 方式获取 -->
用户名:<jsp:getProperty name="myUsers" property="username"/><br>
密码:<jsp:getProperty name="myUsers" property="password"/><br>
<!-- 使用 内置对象application方式获取 -->
<%--
用户名:<%=((Users)application.getAttribute("myUsers")).getUsername()%>><br>
密码:<%=((Users)application.getAttribute("myUsers")).getPassword()%>><br>
--%>
<!-- 使用 内置对象方式session获取 -->
<%--
用户名:<%=((Users)application.getAttribute("myUsers")).getUsername()%>><br>
密码:<%=((Users)application.getAttribute("myUsers")).getPassword()%>><br>
--%>
用户名:<%=((Users)request.getAttribute("myUsers")).getUsername()%>><br>
密码:<%=((Users)request.getAttribute("myUsers")).getPassword()%>><br>
request 通过请求转发还可以获取到,但是page在其他页面无法获取到
Model1 简介
Model 1模型出现前,整个Web应用的情况:几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接作出响应。
弊端:在界面层充斥着大量的业务逻辑的代码和数据访问层的代码,Web程序的可扩展性和可维护性非常差。
JavaBean的出现可以使JSP页面中使用JavaBean封装的数据或者调用JavaBean的业务逻辑代码,这样大大提升了程序的可维护性
Model1简单来说就是JSP+JavaBean的开发模式
五、JSP 状态管理
5.1 HTTP协议无状态性
无状态:浏览器发送请求给服务器的时候,服务器响应客户端请求。但是当同一个浏览器再次发送请求给服务器的时候,服务器并不知道它就是刚才那个服务器。
简单地说,就是服务器不会记录你,就是无状态协议
5.2 保存用户状态的两大机制(session&cookie)
cookie
中文名:“小甜饼”
Web服务器保存在客户端的一系列文本信息
典型应用一:判定注册用户是否已经登录网址 (如十天内免登录…)
典型应用二:“购物车的处理”
Cookie的作用
- 对特定对象的追踪
- 保存用户网页浏览记录与习惯
- 简化登录
安全风险:容易泄漏用户信息
JSP中创建与使用Cookies
创建Cookie对象:
Cookie newCookie = new Cookie(String key, Object value);
写入Cookie对象:
response.addCookie(newCookie)
读取Cookie对象:
Cookie[] cookies = request.getCookies();
Cookie常用方法:
方法名称 | 说明 |
---|---|
void setMaxAge(int expiry) | 设置cookie的有效期,以秒为单位 |
void setValue(String value) | 在cookie 创建后,对cookie进行赋值 |
String getName() | 获取cookie名称 |
String getValue() | 获取cookie的值 |
int getMaxAge() | 获取cookie的有效时间,以秒为单位 |
session 和cookie对比
session | cookie |
---|---|
服务器端(内存)保存用户信息 | 客户端(文本文件)保存用户信息 |
session中保存的是Object类型 | cookie 保存的是String类型 |
随会话的结束而将其存储的数据销毁 | cookie可以长期保存在客户端 |
保存重要的信息 | 保存不重要的用户信息 |
安全性 :session 比 cookie要高
六、指令与动作
6.1 include指令
语法:
<%@ include file=“URL”%>
6.2 include动作
语法:
<jsp:include page=“URL” flush=“true|false”/>
常用page和flush:
page:要包含的页面
flush: 被包含的页面是否从缓冲区读取
6.3 include指令和include动作的区别
include 指令 | jsp:include 动作 | |
---|---|---|
语法格式 | <%@ include file= “…” %> | <jsp:include page=“…” > |
发生作用的时间 | 页面转换期间 | 请求期间 |
包含的内容 | 文件的实际内容(代码) | 页面的输出(结果) |
转换成的Servlet | 主页面和包含页面转换成一个Servlet | 主页面和包含页面转换为独立的Servlet |
编译时间 | 较慢——资源必须被解析 | 较快 |
执行时间 | 稍快 | 较慢——每次资源必须被解析 |
6.4 <jsp:forward> 动作
语法:
<jsp:forward page=“URL”/>
等同:
request.getRequestDispatcher(“/url”).forward(request, response);
6.5 <jsp:param>
语法:
<jsp:param name=“URL” value=“”/>
常常作为<jsp:forward>的子标签
案例:
<jsp:forward page="user.jsp"/>
<jsp:param value="admin@123.net" name="email"/>
<jsp:param value="123456" name="password"/> //修改密码
</jsp:forward>
七、知识点补充
7.1 JSP对象 怎样获得
JSP 对象 | 怎么获得 |
---|---|
out | resp.getWriter |
request | servlet 方法的 req参数 |
response | servlet 方法的 resp参数 |
session | req.getSession() 函数 |
application | getServletContext() 函数 |
exception | Throwable |
page | this |
pageContext | PageContext |
config | getServletConfig() |
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。