• 重定向是动态的可以请求其他站点的资源,且两次请求,请求域中的数据会丢失
  • 转发是静态的只能访问本站点的资源,且一次请求,保证数据完整性

1.重定向的特点:redirect

java重定向中文路径乱码 java重定向是什么意思_java重定向中文路径乱码

  1. 地址栏发生变化 (从你进去的地址 /resp2 --> 你要访问的地址/baidu.com)
  2. 重定向可以访问其他站点(服务器)的资源 (如上-->/baidu.com)
  3. 重定向是两次请求。(分别是进去时的请求/resp 和 重定向到的请求baidu)
  4. 不能使用 request 对象来共享数据 转发(因为是两次请求,两个request,所以不能使用request.set/getAttribute() 共享数据)(两次请求,两个状态,相当于两个对象,两个类)

java重定向中文路径乱码 java重定向是什么意思_java_02

2.转发:forward

java重定向中文路径乱码 java重定向是什么意思_html_03

  1. 转发地址栏路径不变(从/resp2进入的/resp2 , 内容为/resp1的内容,地址仍为/resp)
  2. 转发只能访问当前服务器下的资源 (访问http://www.baidu.com,找不到404)
  3. 转发是一次请求,可以使用 request 对象来共享数据(同一个request

java重定向中文路径乱码 java重定向是什么意思_html_04

3.代码演示

ResponseDemo1:

package com.example.response;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 *  响应response
 */
@WebServlet(
        urlPatterns = {"/ResponseDemo1","/resp1"}
)
public class ResponseDemo1 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("responseDemo1进来了欧陆。。。");

        resp.getWriter().write("hello woold get");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 中文乱码解决       resp.getWriter().write("你好,世界");
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        System.out.println("dopost进来了。。");

        Object sex = req.getAttribute("sex");
        System.out.println(sex==null);

        // 往浏览器里面写
        resp.getWriter().write("你好,世界");
    }
}

ResponseDemo2:

package com.example.response;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 *  重定向
 */
@WebServlet(
        urlPatterns = {"/ResponseDemo2","/resp2"}
)
public class ResponseDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //状态码
//        resp.setStatus(302);

        //重定向
//        req.setAttribute("sex","1");
//        resp.sendRedirect("/tomcatTest01/ResponseDemo1");
        resp.sendRedirect("http://www.baidu.com");


        //转发
//         req.getRequestDispatcher("/ResponseDemo1").forward(req,resp);
        //
        //req.getRequestDispatcher("http://www.baidu.com").forward(req,resp);
    }
}

表单:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/tomcatTest01/resp2" method="get">
        用户名:<input type="text" name="username"><br>
        密码:<input type="text" name="password"><br>
        手机号:<input type="text" name="phoneNum"><br>
        <input type="submit" value="提交"><br>
    </form>
</body>
</html>

// 中文乱码解决 resp.getWriter().write(“你好,世界”);
req.setCharacterEncoding(“utf-8”);
resp.setCharacterEncoding(“utf-8”);
resp.setContentType(“text/html;charset=utf-8”);

servletcontext和request生命周期对比

ServletContext		 		request
创建时:服务器启动时			访问时
销毁时:服务器关闭时			响应结束request销毁
域的作用范围:整个web项目		一次请求中

域对象范围:request<session<context
*.Attribute(“admin”,“root”)

session 与 Cookie 的区别

A. session 存储数据在服务器端,Cookie 在客户端
B. session 没有数据大小限制,Cookie 有(随浏览器版本的不同,cookie的存储数不同)
C. session 数据安全(相当于代码里面),Cookie 相对于不安全

  • 转发发生在服务器端,而重定向发生在客户端
  • 转发是一次请求,一次响应。而重定向是两次请求两次响应。
  • 将来会学到请求域对象,意味着重定向不能用请求域传值。
  • 转发只能在项目内部进行转发。而重定向可以是任意位置(包括站外)
  • 转发时,客户端感知不到(地址栏不变)。而重定向时浏览器的地址栏会发生改变。

1、什么是监听器
监听器Listener就是在application,session,request三个对象创建、销毁、添加或修改属性时自动执行代码的
功能组件。
Listener是servlet的监听器,可以监听客户端的请求和服务端的操作

2、监听器的作用
(1)检测网站的在线人数
(2)统计网站的访问量