请求重定向
客户端行为,response.sendRedirect(),本质上讲等同于两次请求,前一次的请求不会保存,地址栏的URL地址会变请求转发
服务器行为,request.getRequestDispatcher().forword(request,response);是一次请求,转发后请求对象会保存,地址栏的URL地址不会变。
下面的三个页面分别是response.jsp,request.jsp,register.jsp。
在register里acction访问response,而response测试请求重定向到request,URL地址栏变为request.jsp。
测试请求转发URL地址栏依旧为response.jsp。
response.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
response.setContentType("text/html;charset=UTF-8");//设置响应的MIME类型
out.println("<h1>response内置对象</h1>");
out.println("<br>");
// out.flush();//清空缓冲区的同时,会强制把缓冲区的内容打印到屏幕上
// response获得的Writer对象是一个PrintWriter对象,他的输出总是在out内置对象前
PrintWriter outer = response.getWriter();
outer.println("大家好,我是response对象生成的输出流outer对象");
//请求重定向
// response.sendRedirect("request.jsp");
//请求转发
request.getRequestDispatcher("../requestDemo/request.jsp").forward(request,response);
%>
request.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>request内置对象</h1>
<%--解决中文乱码方法一:在获得参数前设置字符集,但无法解决URL传递中文乱码问题--%>
<%
request.setCharacterEncoding("utf-8");
request.setAttribute("password",1234);
%>
用户名:<%=request.getParameter("username")%>
爱好:<%
if(request.getParameterValues("favorite")!=null){
String[] favorites = request.getParameterValues("favorite");
for(int i=0;i<favorites.length;i++){
out.println(favorites[i]+" ");
}
}
%>
密码:<%=request.getAttribute("password")%><br>
</body>
</html>
register.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>用户注册</h1>
<hr>
<form name="regFrom" action="response.jsp" method="post">
<table style="margin-left: 30%">
<tr>
<td>用户名:</td>
<td><input type="text" name="username"><br></td>
</tr>
<tr>
<td>爱好:</td>
<td>
<input type="checkbox" name="favorite" value="read">读书
<input type="checkbox" name="favorite" value="music">音乐
<input type="checkbox" name="favorite" value="movie">电影
<input type="checkbox" name="favorite" value="internet">上网
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交"></td>
</tr>
</table>
</form>
<br>
<br>
<%--request的getParameter既可以用post方式来获取,也可以用get方式来获取,即通过URL地址加参数--%>
<a href="request.jsp?username=lxj">测试URL传参数</a>
<%--解决中文乱码方法二:修改Tomcat配置文档server.xml--%>
<%--<Connector port="8080" protocol="HTTP/1.1"--%>
<%--connectionTimeout="20000"--%>
<%--redirectPort="8443" URIEncoding="utf-8"/>--%>
<%--修改之后一定要重启Tomcat服务器--%>
</body>
</html>