1、请求的转发
在服务器里面资源跳转的方式。将请求再转发到其他地址,转发过程中使用的是同一个request请求,转发后浏览器地址栏内容不变。 请求转发的过程发生在服务器内部,只能从当前应用内部查找相应的转发资源,而不能转发到其它应用的资源。
转发时(共享同一个request和response),两个servlet的访问顺序,传参:
1)访问顺序: 第1个GET方式,第2个走的是doGet()。 第1个POST方式,第2个走的是doPost()。
2)在第1个servlet转发代码之后,不能再调用类似 转发或重定向 的代码。否则会500异常,因为转发之后,不能再回到此处进行跳转到别的页面
3)读取页面参数: 由于是共享同一个request,请求页面的参数在两个servlet当中都可以读取出来。---请求页面中,GET方式的参数是在地址栏中通过"?name=Jack&age=22"上传,POST方式是通过<input>组件上传的。
4)两个servlet之间传参: 在第1个中request.setAttribute(),在第2个中request.getAttribute();
2、实现方法
转发通过方法forward(request,response)实现,他能将request对象转发到其他的servlet程序内,它能够共享request对象里面的资源。
具体实现方式如下:
req.getRequestDispatcher("/002").forward(request,response);
通过方法setAttribute(),可以将一个servlet程序内的资源转发到另一个servlet程序内,实现资源共享。
3、实例
servlet1:
public class RequestForwardServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setAttribute("username", "周星星");
RequestDispatcher dispatcher = request.getRequestDispatcher("/ResultServlet");
dispatcher.forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
servlet2
public class ResultServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// 从作用域中取出来的是对象,转为String型,再使用
String username = (String) request.getAttribute("username");
if (username != null) {
out.println("转发过来的用户名是:" + username + "<br />");
}
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
doGet(request, response);
}
}
结果图
相关文章
暂无评论...