//1. 请求servlet时,写相对路径,请求转发语句后面的代码虽然会被执行,但一般不写东西,直接加return退出程序
//2. 此处为转发给另一个servlet,也可以转发给jsp
req.getRequestDispatcher("login").forward(req,resp);
//第一个servlet中执行
req.setAttribute("str","用户名或密码错误");
//其他servlet中执行
req.getAttribute("str");
resp.sendRedirect("login");
请求次数 | 地址栏信息 | 是否共享数据 | 跳转限制 | 发生行为 | |
---|---|---|---|---|---|
请求转发 | 1 | 不变 | 是 | 本站资源 | 服务端 |
重定向 | 2 | 变化 | 否 | 任意URL | 客户端 |
Cookie cookie = new Cookie("00001","beijing");
//将临时cookie持久化,参数为秒,表示持久化3天
cookie.setMaxAge(3*24*3600);
//向浏览器发送Cookie,此时响应头中,会多出Set-Cookie: 00001=beijing; Expires=Sun, 23-Feb-2020 12:39:27 GMT
//当浏览器再次发送其他请求时,请求头中会多出Cookie:00001=beijing;
resp.addCookie(cookie);
//每一个cookie对象中保存一个key-value键值对的数据,想要存储多个k-v数据,需要创建多个cookie
Cookie cookie = new Cookie("00001","beijing");
Cookie cookie1 = new Cookie("00002","shanghai");
resp.addCookie(cookie);
resp.addCookie(cookie1);
//只有在访问该路径时,浏览器才将cookie由请求头传递给Tomcat
//即http://localhost:8080/myfirstServlet/reqdecode时,请求头中才有Cookie:000002=shanghai
cookie1.setPath("/reqdecode");
//服务端获取所有Cookie数据
Cookie[] cookies = req.getCookies();
if(cookies!=null){
for(Cookie c:cookies){
String name = c.getName();
String value = c.getValue();
System.out.println(name+"="+value);
}
}
//1. 不写这句话,也创建session对象,但不会将JSESSIONID存入Cookie,通过响应返回给浏览器
HttpSession session = req.getSession();
//2. 获取JSESSIONID
String id = session.getId();
//3. 可以通过下面得方式让Session也持久化,也就是客户端关闭后,仍能找到之前的Session
//手动创建一个存储JSESSIONID的cookie 设置cookie设置持久化时间
Cookie cookie = new Cookie("JSESSIONID",id);
cookie.setMaxAge(60*60);
//设置session有效市场,单位秒,即每5s重新创建一个session对象,并生成新的JSESSIONID
session.setMaxInactiveInterval(5);
//设置session强制失效
session.invalidate();
//向session中设置参数,通过它就能实现重定向时的数据共享
session.setAttribute("00001","beijing");
//从session中获取参数
session.getAttribute("00001");
ServletContext s1 = this.getServletContext();
ServletContext s2 = this.getServletConfig().getServletContext();
ServletContext s3 = req.getSession().getServletContext();
//1. 设置属性
s1.setAttribute("00001","zhangsan");
//2. 获取属性值,不同用户、不同servlet,获得的属性值相同
s1.getAttribute("00001");
//如果有多组公共属性,使用多个context-param标签
s1.getInitParameter("beijing");
<context-param>
<param-name>beijingparam-name>
<param-value>123456param-value>
context-param>
//E:\IdeaProjects\myfirstServletWu\out\artifacts\myfirstServletWu_war_exploded\web.xml
s1.getRealPath("web.xml");
//1. 即虚拟目录路径:/myfirstServlet
s1.getContextPath();
<servlet>
<servlet-name>HelloWorldservlet-name>
<servlet-class>control.HelloWorldservlet-class>
<init-param>
<param-name>chinaparam-name>
<param-value>beijingparam-value>
init-param>
servlet>
//获取对象
ServletConfig cnf = this.getServletConfig();
//根据key获取value
String value = config.getInitParameter("china");
//获取所有的key
Enumeration<String> initParameterNames = cnf.getInitParameterNames();