web组件之间的跳转
复习: 此内容在我上篇博客有.
Http 共享数据的传递:
HttpServletRequst是获取当前浏览器访问的页面并通过某个提交或事件功能get或post的方式提交的数据,此数据只能此Servlet类中使用.如果此Servlet在跳转其他页面或其他Servlet类无法获取此数据.
解决方法:
①:Cookie ②Session
web组件之间的跳转
三种类型
1):请求转发:(forward)
语法:
request对象.getRequestDispatcher(String path).forward(request,response);
请求转发的特点:
1):浏览器地址栏路径没变,依然是AServlet的资源名称.
2):只发送了一个请求.
3):共享同一个请求,在请求中共享数据.
4):最终的响应输出由BServlet来决定.
5):只能访问当前应用中的资源,不能跨域跳转.
6):可以访问WEB-INF中的资源.
代码结构
代码演示:
/**
* web组件之间的跳转
* ①请求转发(forward)
* @author AfricaYoung
* @Date 2016-08-15
*/
@WebServlet("/forward/a")
public class ForwardServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//此处测试跳转后值可否有传递
String name = req.getParameter("name");
System.out.println("1"+name);
//请求转发(forward)
req.getRequestDispatcher("/forward/b").forward(req, resp);
}
}
/**
* web组件之间的跳转
* ①请求转发(forward)
* @author AfricaYoung
* @Date 2016-08-15
*/
@WebServlet("/forward/b")
public class GoalServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//接收数据
String name = req.getParameter("name");
System.out.println("2"+name);
//设置响应格式
resp.setContentType("text/html;charset=utf-8");
//获取打印流
PrintWriter out = resp.getWriter();
out.print("爆炸!");
//关闭流
out.close();
}
}
演示效果:
2):URL重定向:(redirect)
AServlet操作完毕之后,重定向到BServlet,继续完成余下的功能.
语法:
response对象.sendRedirect(String path);
参数:path,表示目标资源名称.
URL重定向的特点:
1):浏览器地址栏路径发送变化,变成Servlet2的资源名称.
2):只发送了两个请求.
3):因为是不同的请求,所以不能共享请求中的数据.
4):最终的响应输出由Servlet2来决定.
5):可以跨域访问资源.
6):不可以访问WEB-INF中的资源.
代码演示:
/**
* web组件之间的跳转
* ②URL重定向(redirect)
* @author AfricaYoung
* @Date 2016-08-15
*/
@WebServlet("/redirect/a")
public class RedirectServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//获取http传入的值
String name = req.getParameter("name");
System.out.println("1"+name);
//URL重定向
resp.sendRedirect("/dowork/redirect/b");
}
}
/**
* web组件之间的跳转 ②URL重定向(redirect)
*
* @author AfricaYoung
* @Date 2016-08-15
*/
@WebServlet("/redirect/b")
public class GoalServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//测试下看是否能获取到值
String name = req.getParameter("name");
System.out.println("2"+name);
//设置响应格式
resp.setContentType("text/html;charset=utf-8");
//获取打印流
PrintWriter out = resp.getWriter();
out.print("这就是URL的重定向");
}
}
演示效果:
请求转发和URL重定向的选择?
1:若需要共享请求中的数据,只能使用请求转发.
2:若需要访问WEB-INF中的资源,只能使用请求转发.
3:若需要跨域访问,只能使用URL重定向.
4:请求转发可能造成表单的重复提交问题.
5:其他时候,任选.
3):请求包含:(include):到jsp说