JSP——请求重定向与请求转发

JSP——请求重定向与请求转发

请求重定向

客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变。

请求转发

服务器行为,request.getRequestDispatcher().forward(req,resp);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变。

案例:

写一个用户注册页面 reg.jsp , 点击“提交”按钮时跳转到 response.jsp 页面,在 response.jsp 页面中分别设置请求重定向和请求转发到 regRequest.jsp 页面。

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

My JSP 'reg.jsp' starting page

用户注册


用户名:
兴趣:

运动

看书

画画

唱歌

regRequest.jsp 页面:

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

My JSP 'regRequest.jsp' starting page

request内置对象


<%

//解决页面显示中文乱码问题,无法解决URL传递中文出现的乱码问题

request.setCharacterEncoding("utf-8");

%>

用户名:<%=request.getParameter("username") %>

兴趣:<%

if(request.getParameterValues("favorite")!=null){

String[] favorites=request.getParameterValues("favorite");

for(String str:favorites){

out.println(str+"  ");

}

}

%>

在 response.jsp 中设置请求重定向:

<%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=utf-8"%>

<%

//请求重定向

response.sendRedirect("regRequest.jsp");

%>

保存所有程序,启动tomcat服务器,运行:

用户注册页面:

点击“submit”提交,发现地址栏URL地址不是 reg.jsp 指定处理请求的 response.jsp , 而且 regRequest.jsp 无法取得用户信息。说明用户的请求由 response.jsp 变为 regRequest.jsp ,相当于用户提出了2次请求,并且没有保存第一次的请求对象:

在 response.jsp 中设置请求转发

<%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=utf-8"%>

<%

//请求转发

request.getRequestDispatcher("regRequest.jsp").forward(request,response);

%>

保存所有,刷新用户注册页面,用户注册页面注册信息不变,点击“submit”提交按钮,页面跳转下图,发现地址栏地址仍为 reg.jsp 第一次请求的 response.jsp , 而且 regRequest.jsp 也取得了用户信息。说明客户端的请求没有改变,一直都是 response.jsp , 只做了一次请求,并且保存了该次的请求对象,实际上是由服务器端替客户端完成了到 regRequest.jsp 页面的请求:

相关创意

铁观音什么牌子好?10大铁观音品牌排行榜
bet5365亚洲版

铁观音什么牌子好?10大铁观音品牌排行榜

📅 07-08 👁️ 8288
华为ICT大赛2024
bet5365亚洲版

华为ICT大赛2024

📅 07-30 👁️ 6020
微博怎么找QQ好友?简单几步轻松搞定!
48365大写

微博怎么找QQ好友?简单几步轻松搞定!

📅 07-31 👁️ 6248