JSP内置对象
1、request对象
客户端的请求信息被封装在request对象中,通过这个对象才能了解到客户的需求,然后做出响应。request是HttpServletRequest类的实例。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。常用方法参见API:
javax.servlet.http.HttpServletRequest
范例:观察getParameter与getParameterValues方法使用:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>login</title>
</head>
<body>
<h1>用户登录</h1>
<hr>
<form action="dologin.jsp" name="loginForm" 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>掌握语言:</td>
<td>
<input type="checkbox" name="skill" value="C语言">C语言
<input type="checkbox" name="skill" value="Java">Java
<input type="checkbox" name="skill" value="C++">C++
<input type="checkbox" name="skill" value="Python">Python
</td>
</tr>
<tr>
<td colspan="3"><input type="submit" value="登录"></td>
</tr>
</table>
</form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>request内置对象</title>
</head>
<body>
<h1>request内置对象</h1>
用户名:<%=request.getParameter("userName")%>
爱好:<%
String[] skills = request.getParameterValues("skill") ;
for(String s:skills){
out.println(s+" ");
}
%>
<hr>
</body>
</html>
注意:表单提交时默认采用的编码是ISO-8859-1字符集,显示中文会乱码。
范例:使用setCharacterEncoding设置请求的字符编码
<%
// 解决中文乱码问题,注意此字符集需要和提交页面字符集保持一致
request.setCharacterEncoding("UTF-8");
%>
以上是通过post方法提交表单来传参,实际也可通过get方法,在URL中获取参数
范例:获取get方法中URL带的参数
<a href="dologin.jsp?userName=yuisama&skill=Java C Python">测试get方法传参</a>
注意:上述通过URL传参无法通过request.setCharacterEncoding方式解决中文乱码问题,此时要想解决此类乱码问题,需要修改tomcat配置文件server.xml
范例:修改Tomcat配置文件解决URL传参的中文乱码问
<!--URI编码-->
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"
/>
URIEncoding=“UTF-8” ,就可以设置URL传参的编码来解决中文乱码问题。
范例:使用setAttribute与getAttribute设置与取出属性
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>request内置对象</title>
</head>
<body>
<h1>request内置对象</h1>
<%
// 解决中文乱码问题,注意此字符集需要和提交页面字符集保持一致
request.setCharacterEncoding("UTF-8");
// 使用setAttribute设置属性
request.setAttribute("password","test");
%>
用户名:<%=request.getParameter("userName")%>
爱好:<%
String[] skills = request.getParameterValues("skill") ;
for(String s:skills){
out.println(s+" ");
}
%> <br>
密码:<%=request.getParameter("password")%>
<hr>
</body>
</html>
范例:request对象的其他常用方法
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>request内置对象</title>
</head>
<body>
<h1>request内置对象</h1>
<%
// 解决中文乱码问题,注意此字符集需要和提交页面字符集保持一致
request.setCharacterEncoding("UTF-8");
// 使用setAttribute设置属性
request.setAttribute("password","test");
%>
用户名:<%=request.getParameter("userName")%>
爱好:<%
String[] skills = request.getParameterValues("skill") ;
for(String s:skills){
out.println(s+" ");
}
%> <br>
密码 : <%=request.getAttribute("password")%><br>
请求体的MIME类型 : <%=request.getContentType()%><br>
协议类型以及版本号 : <%=request.getProtocol()%><br>
服务器主机名 : <%=request.getServerName()%><br>
服务器端口号 : <%=request.getServerPort()%><br>
请求体大小 : <%=request.getContentLength()%><br>
请求客户端的IP地址 : <%=request.getRemoteAddr()%><br>
请求的真实路径 : <%=request.getRealPath("dologin.jsp")%><br>
请求的上下文路径 : <%=request.getContextPath()%><br>
<hr>
</body>
</html>
2、response对象
response对象包含了响应客户请求的有关信息,但在JSP中很少直接使用到它。它是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其他页面的response对象对当前页面无效。常用方法参见API: javax.servlet.http.HttpServletRequest
范例:response对象的常用方法使用
<%@ page import="java.io.PrintWriter" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
// 设置响应的MIME类型
response.setContentType("text/html;charset=UTF-8");
out.println("<h1>response内置对象</h1>");
out.println("<hr>");
// out.flush();
// 获得输出流对象
PrintWriter outer = response.getWriter();
outer.println("此行语句是由输出流打印");
%>
response对象获得的PrintWriter输出流打印的内容总是优先于内置out对象打印的内容,如果要想解决此问题,可以采用out.flush()方法清空out对象的缓冲区
转发与重定向
请求重定向:
- 客户端行为,response.sendRedirect(),从本质上讲相当于两次请求,前一次请求对象不会保存,地址栏的URL地址会改变。
请求转发:
- 服务器行为,request.getRequestDispatcher().forward(req,resp);本质上是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变。
范例:观察请求重定向与请求转发
// 请求重定向
response.sendRedirect("dologin.jsp");
// 请求转发
request.getRequestDispatcher("dologin.jsp").forward(request,response);
session对象/font>
什么是session?
- session表示客户端与服务器的一次会话
- Web中的session指的是用户浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间
- session实际上是一个特定的时间概念
- 在服务器的内存中保存着不同用户的session
session对象
- session对象是一个JSP的内置对象
- session对象在第一个JSP页面被装载时自动创建,完成会话期管理。
- 从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。
- 当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象。
session对象是HttpSession类的实例
session对象常用方法参见API: javax.servlet.http.HttpSession
范例:观察session对象的常用操作
session_page1.jsp
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>session内置对象</title>
</head>
<body>
<h1>session内置对象</h1>
<hr>
<%
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date date = new Date(session.getCreationTime());
session.setAttribute("userName","admin");
session.setAttribute("password","123456");
session.setAttribute("age",20);
%>
Session创建时间:<%=sdf.format(date)%><br>
Session Id号:<%=session.getId()%><br>
从Session中获取用户名:<%=session.getAttribute("userName")%><br>
Session过期时间:<%=session.getMaxInactiveInterval()%>秒<br>
重新设置Session过期时间:<% session.setMaxInactiveInterval(5); %>
<a href="session_page2.jsp">跳转到session_page2.jsp</a>
</body>
</html>
session_page2.jsp
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>session内置对象</title>
</head>
<body>
<h1>session内置对象</h1>
<hr>
<%
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date date = new Date(session.getCreationTime());
%>
Session创建时间:<%=sdf.format(date)%><br>
Session Id号:<%=session.getId()%><br>
从Session中获取用户名:<%=session.getAttribute("userName")%><br>
Session中保存的全部属性如下: <%
String[] names = session.getValueNames();
for (String s:
names) {
out.println(s+" ");
}
%>
</body>
</html>
session生命周期
- 创建
当客户端第一次访问某个jsp或者Servlet的时候,服务器会为当前会话创建一个SessionId,每次客户端向服务端发送请求时,都会将此SessionId携带过去,服务端会对此SessionId进行校验。
- 活动
(1)某次会话当中通过超链接打开的新页面属于同一次会话。
(2)只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话。
(3)除非本次会话的所有页面关闭后再重新访问某个jsp或者Servlet,才会创建新的会话。
(4)注意!!!:原有会话还存在,这个旧的SessionId仍然存在于服务器端,只不过再也没有客户端会携带他然后交予服务端校验。 - 销毁
Session的销毁只有三种方式:
(1)调用了session.invalidate()方法
(2)Session过期(超时)
(3)服务器重新启动
范例:观察session生命周期的活动与销毁阶段
Tomcat默认session超时时间为30分钟
设置Session超时时间有两种方式:
1) 调用session.setMaxInactiveInterval(时间) // 单位是秒
2.)在项目的web.xml中配置(以分为单位)
<session-config>
<session-timeout>
10
</session-timeout>
</session-config>