目录
JavaWeb基础 (三):JSP 基础与会话管理
JSP是构建在Java Web应用程序上的第二种技术,是Servlet技术的补充,而不是取代Servlet技术。
JSP本质即Servlet,本文通过介绍一些JSP基本的语法和使用还有JSP九大对象,来对HttpServletRquest,HttpServletResponse,HttpSession,Cookie对象的一些方法进行了补充介绍。
这篇文章也对会话管理简要介绍了什么是会话管理以及4种会话管理技术URL重写,隐藏域,以及最重要的Session和Cookie。
JSP 概述
JavaServer Pages(JSP)本质上就是一个Servlet
JSP在JSP容器中运行,一个Servlet容器通常也是JSP容器,例如,Tomcat就是一个Servlet/JSP容器。JSP主要负责与用户交互,将最终的界面呈现给用户。实际上就是在HTML中嵌入Java代码。
Tomcat在接收到一个Jsp请求时的流程:
-
转换JSP页面到JSP页面实现类,该实现类是一个实现 JspPage接口 或 HttpJspPage子接口的Java类。JspPage是 Servlet的子接口,这使得每一个JSP页面都是一个Servlet。
该实现类的类名由Servlet/JSP容器生成。如果出现转换错误,则相关错误信息将被发送到客户端。
-
如果转换成功,Servlet/JSP容器随后编译该Servlet类,并装载和实例化该类,像其他正常的Servlet一样执行生命周期操作。
-
对于同一个JSP页面的后续请求Servlet/JSP容器会先检查JSP页面是否被修改过。
如果是,则该JSP页面会被重新翻译、编译并执行。
如果不是,则执行已经在内存中的JSP Servlet。
JSP 基本语法
-
JSP 脚本:执行Java逻辑代码
<% // Java 代码 %>
-
JSP 声明:定义Java方法
<%! public void method() { ... } %>
-
JSP 表达式:把Java对象直接输出到HTML页面
<%= // Java变量 %>
示例:JSP 中使用for循环
<%
List<User> users = new ArrayList<>();
users.add(new User("张三", 20));
users.add(new User("李四", 21));
users.add(new User("王五", 22));
%>
<table>
<tr>
<th>姓名</th>
<th>年龄</th>
</tr>
<%
for (int i = 0; i < users.size(); i++) {
%>
<tr>
<td><%=users.get(i).getName()%></td>
<td><%=users.get(i).getAge()%></td>
</tr>
<%
}
%>
</table>
JSP 隐式对象 (九大内置对象)
在调用Servlet 时,Servlet 容器会传递几个对象给它运行的Servlet。
例如,可以通过Servlet的service方法拿到HttpServletRequest 和HttpServletResponse 对象
以及可以通过init方法访问到ServletConfig 对象
此外,可以通过调用HttpServletRequest 对象的getSession 方法访问到HttpSession 对象。
在JSP中,可以通过使用隐式对象来访问上述对象
- request:表示一次请求,HttpServletRequest
- response:表示一次响应,HttpServletResponse
- pageContext:页面上下文,获取页面信息,PageContext
- session:表示一次会话,保存用户信息,HttpSession
- application:表示当前Web应用,全局对象,保存所有用户的共享信息,SevletContext
- config:当前JSP 对应的Servlet的ServletConfig,获取当前Servlet的信息,ServletConfig
- out:向浏览器输出数据,JspWriter
- page:当前JSP 对应的Servlet 对象,HttpJspPage
- exception:表示JSP 页面发生的异常,Throwable
常用的是:request,response,session,application
reques 常用方法
-
获取客户端传来的参数
String getParameter(String key)
-
通过键值对的方式保存数据
void setAttribute(String key, Object value)
-
通过key 取出 value
Object getAttribute(String key)
-
返回一个RequestDispatcher 对象,该对象的forwar(request, respones)方法用于请求的转发,页面之间的跳转
RequestDispatcher getRequestDispatcher(String path)
-
获取客户端传来的多个同名参数的values
String[] getParameterValues()
-
指定每个请求的编码
void setCharacterEncoding(String charset)
response 常用方法
-
重定向,页面之间的跳转
sendRedirect(String path)
请求转发:
- 是将同一个请求传给下一个页面
- 是同一个请求在服务器之间传递,地址栏不变,也称为服务器跳转
重定向:
- 是创建一个新的请求传给下一个页面,之前的请求结束生命周期
- 由客户端发送一次新的请求,来访问跳转后的目标资源,也成为客户端跳转
案例:用户登录,登陆成功,跳转到首页(转发),否则重新回到登陆页面(重定向)
login.jsp
<form action="/login" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td><input type="submit" value="提交"/></td>
<td><input type="reset"