day32 6 请求转发与重定向的区别、session会话对象 & cookie & 8 应用程序上下文对象ServletContext & 5 请求转发与jsp页面内置对象

1 请求转发与重定向的区别
2 session与cookie的区别
3 过滤器与监听器的区别

4 web-inf目录
web-inf目录是安全目录,无法从客户端访问,只能通过(服务端的)servlet的请求转发访问
5 servlet生命周期
6 ServletContext对象

JSP简介
image
jsp是一种模板引擎(渲染前端布局)

JSP指令

image

JSP内置对象(9种)

image

请求与响应

httpservletrequest请求

接收客户端发送的请求报文

httpservletresponse响应

响应客户端的请求(给客户端返回数据)

页面跳转方式:请求转发与重定向

请求转发

req.getRequestDispatcher("page/demo.jsp").forward(req,res);

重定向

res.sendRedirect("http://baidu.com");
或
res.senRedirect("user?method=queryAll");

请求转发与重定向区别

注意:
1)请求转发之后不能创建响应类的输出流
2)请求转发之后不能重定向

printWriter out = res.getWriter();
out.write("1233");

1)转发使用的是req.getRequestDispatcher()方法;重定向使用的是res.sendRedirect();
2)转发:浏览器URL的地址栏不变;重定向:浏览器URL的地址栏改变;
3)转发是服务器行为,重定向是客户端行为;
4)转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求;

Session会话

session可以理解为缓存
以下代码在anotherServlet中跳转demo02.jsp中也可以获取到,但浏览器关闭缓存被释放
可以设置session失效时间(s)
一旦客户端与服务端断开连接,session就会失效

//MyServlet.java内
public class MyServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		//获取session会话对象(getSession()会在请求范围内查找是否存在session对象,如果存在则返回该对象,否则创建一个新的session对象)
		HttpSession session = req.getSession();
		
		//设置session十秒后失效
		session.setMaxInactiveInterval(10);
		//添加属性到session中
		session.setAttribute("name", "111");
		//请求转发
		req.getRequestDispatcher("page/demo.jsp").forward(req, res);
	}
}
<!-- demo.jsp内 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	hello session<!-- 打印到浏览器页面显示 -->
	<%
		System.out.println("hello session");/* 打印到控制台 */
	%>
	
	<%=session.getAttribute("name") %><!-- 输出到前端页面 -->
</body>
</html>

session与cookie的区别

image

Cookie

在doGet方法内创建&获取cookie
先创建,再获取,中间cookie一直保存在浏览器中(除非setMaxAge时间到了)

/**创建cookie
	//创建一个cookie对象
	Cookie cookie = new Cookie("k1", "张三abc");
	//设置过期时间单位(s)
	cookie.setMaxAge(30);
	res.setCharacterEncoding("GBK");
	PrintWriter out = res.getWriter();
	out.write("开始写入cookie");

	//添加cookie到响应对象
	res.addCookie(cookie);
	out.write("结束写入cookie");
	if(out != null){
		out.close();
	}
*/

/**获取cookie 

	Cookie[] cookies = req.getCookies();

	for (Cookie c : cookies) {
		System.out.println(c.getName()+"**" + c.getValue());
	}
	*/

ServletContext接口

image

MyServlet内

//获取servletConfig对象(因为是tomcat创建的)
ServletConfig sc = getServletConfig();

//获取ServletContext对象,全局唯一
ServletContext sct = getServletContext();

//添加参数

sct.setAttribute("name01", "111");
sct.setAttribute("name02", "222");

PrintWriter out = res.getWriter();
out.write("success");
out.flush();
if (out != null) {
	out.close();
}

NewServlet内验证在MyServlet内创建的ServletContext存在全局

public class NewServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//获取servletConfig对象(因为是tomcat创建的)
//		ServletConfig sc = getServletConfig();
		//获取ServletContext对象,全局唯一
		ServletContext sct = getServletContext();
		System.out.println(sct.getAttribute("name01")+"***"+sct.getAttribute("name02"));
		
		//可以改变属性的值,ThirdServlet再去get的时候就会name01就会获得这个覆盖的值
		//sct.setAttribute("name01","333");
	}

}
posted @ 2022-11-16 21:20  小彤在努力  阅读(49)  评论(0)    收藏  举报