重定向
是动态的可以请求其他站点的资源,且两次请求,请求域中的数据会丢失转发
是静态的只能访问本站点的资源,且一次请求,保证数据完整性
1.重定向的特点:redirect
- 地址栏发生变化 (
从你进去的地址 /resp2 --> 你要访问的地址/baidu.com
) - 重定向可以访问其他站点(服务器)的资源 (
如上-->/baidu.com
) - 重定向是两次请求。(
分别是进去时的请求/resp 和 重定向到的请求baidu
) - 不能使用 request 对象来共享数据 转发(
因为是两次请求,两个request,所以不能使用request.set/getAttribute() 共享数据
)(两次请求,两个状态,相当于两个对象,两个类)
2.转发:forward
- 转发地址栏路径不变(
从/resp2进入的/resp2 , 内容为/resp1的内容,地址仍为/resp
) - 转发只能访问当前服务器下的资源 (
访问http://www.baidu.com,找不到404
) - 转发是一次请求,可以使用 request 对象来共享数据(
同一个request
)
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)统计网站的访问量