转发:
共用req,resp,所以可以在里面封装数据
只能站内实现,无法站外实现
通过req
请求的地址:/jsps/result.jsp
重定向:
浏览器请求两次,服务器应答两次,两次的req,resp不同,无法共享
通常站外实现(站内实现共享则需要传参)
通过resp:
请求的地址:/helloWeb/jsps/result.jsp
主页index.xml
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>第一个web项目的主页</title>
</head>
<body>
<h2>主页主页</h2>
<h2>湖南长沙</h2>
<h3>发布方式一......</h3>
<br/>
<h2>演示重定向/转发</h2>
<a href="jsps/result.jsp">超链接</a><!-- 后台控制不了 --><br/><br/>
<a href="redirect">重定向/转发</a><br/><br/>
</body>
</html>
RedirectServlet .java
package cn.hncu.servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RedirectServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// req.getHeader("Referer");
//转发--共享req,resp
req.setAttribute("name", "jack");//getAttribute获取
//重定向--两次的req不一样(用传参)用getParament获取
//下面resp.sendRedirect( "/helloWeb/jsps/result.jsp?name=jack");
//通过设置http协议的响应头实现重定向
//由服务器找到/helloWeb/jsps/result.jsp的位置,返回给浏览器,浏览器再次拿着这个目录再次请求
//方法一:底层的协议技术设置状态码
// resp.setStatus(302);//HttpServletResponse.SC_FOUND
// resp.setHeader("Location", "/helloWeb/jsps/result.jsp");
//方法二:用函数内部设置状态码
// resp.sendRedirect( "/helloWeb/jsps/result.jsp");
// resp.sendRedirect( "/helloWeb/jsps/result.jsp?name=jack");
//转发--分发器
//由服务器在当前项目下找到/jsps/result.jsp,再响应
RequestDispatcher rd=req.getRequestDispatcher("/jsps/result.jsp");
rd.forward(req, resp);
}
}
注意:转发是由servlet帮忙转发的,在项目内部,所以请求地址只需要”/jsps/result.jsp”就可以了
但是重定向是servlet响应浏览器,再由浏览器向拿着响应回来的地址信息去向服务器进行第二次请求,所以请求地址要详细,否则浏览器找不到想要的信息”/helloWeb/jsps/result.jsp”
可以看出重定向和转发相差一个项目根目录
配置文件web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name></display-name>
<servlet>
<servlet-name>RedirectServlet</servlet-name>
<servlet-class>cn.hncu.servlet.RedirectServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RedirectServlet</servlet-name>
<url-pattern>/redirect</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>