JavaWeb之JSP(2)

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+"&nbsp;&nbsp;");
	}
%>
<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+"&nbsp;&nbsp;");
	}
%> <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+"&nbsp;&nbsp;");
	}
%> <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+"&nbsp;&nbsp;");
	}
	%>
</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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值