request.getRequestDispatcher(“/Servletlogin”).forward(request, response);
}
}
package com.example.web1; /**
-
Description:这是登陆后的页面
-
@Author: kk(专业bug开发)
-
DateTime: 2022-01-05 23:24
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = “Servletlogin”, value = “/Servletlogin”)
public class Servletlogin extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println(“this is index page!”);
}
}
- 重定向
package com.example.web1; /**
-
Description:
-
@Author: kk(专业bug开发)
-
DateTime: 2022-01-05 23:23
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = “Servletcheck”, value = “/Servletcheck”)
public class Servletcheck extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(“登录成功!”);
// 实现响应重定向
response.sendRedirect(“/web1_war_exploded/Servletlogin”);
}
}
- 请求转发与重定向
请求转发意味着服务器完成跳转,只会产生一次请求。
响应重定向由浏览器跳转,会产生两次请求。
浏览器Cookie
大家打开自己电脑上需要登录的网站,然后登录后关闭浏览器,重新打开后发现我们的登录信息依旧保存在浏览器,这就是通过Cookie实现的。
- 设置Cookie
Cookie cookie = new Cookie(“user”, “kkkkkkk”);
//设置cookie的最长生命,单位为秒
cookie.setMaxAge(60 * 60 * 24 * 7);
response.addCookie(cookie);//生成并添加Cookie信息
package com.example.web1; /**
-
Description:
-
@Author: kk(专业bug开发)
-
DateTime: 2022-01-06 10:33
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = “ServletCookie”, value = “/ServletCookie”)
public class ServletCookie extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(“登陆成功!”);
Cookie cookie = new Cookie(“user”, “kkkkkkk”);
//设置cookie的最长生命,单位为秒
cookie.setMaxAge(60 * 60 * 24 * 7);
response.addCookie(cookie);
response.getWriter().print(“
login success
”);}
}
- 读取Cookie
request.getCookies() //用于获取保存的cookie信息,返回的是一个数组
package com.example.web1; /**
-
Description:
-
@Author: kk(专业bug开发)
-
DateTime: 2022-01-06 10:42
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = “ServletgetCookie”, value = “/ServletgetCookie”)
public class ServletgetCookie extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// request.getCookies()用于获取保存的cookie信息,返回的是一个数组
Cookie[] cookies = request.getCookies();
String user = null;
for(Cookie c : cookies){
System.out.println(c.getName()+ “:” + c.getValue());
if(c.getName().equals(“user”)){
user = c.getValue();
break;
}
}
if(user == null){
response.getWriter().println(“
not login
”);}else{
response.getWriter().println(“user” + user);
}
}
}
- Cookie总结
-
Cookie是浏览器保存在本地的文本内容
-
Cookie常用于保存登录状态、用户资料等小文本
-
Cookie具有时效性,默认为浏览器窗口关闭,Cookie内容会伴随请求发送给tomcat
Session用户会话
刚才看了Cookie,我们知道Cookie信息是存储在客户机上的文本信息,虽然是进行了加密,但是因为其存储在本地,相对来说安全性还是不够高。为此Java Web给我们提供了另外一种用户会话方式-session。
Session有如下特点:
-
用于保存与浏览器串口对应的数据
-
数据存储在Tomcat服务器的内存中,具有时效性(默认为30min)
-
Session通过浏览器Cookie的SessionId提取用户数据
- 设置Session
package com.example.web1; /**
-
Description:
-
@Author: kk(专业bug开发)
-
DateTime: 2022-01-06 11:06
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = “ServletSession”, value = “/ServletSession”)
public class ServletSession extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(“登录成功!!”);
// 获取用户对话Session对象
HttpSession session = request.getSession();
// 添加会话信息
session.setAttribute(“name”, “kk”);
request.getRequestDispatcher(“/ServletSessionIndex”).forward(request, response);
}
}
- 获取Session
package com.example.web1; /**
-
Description:
-
@Author: kk(专业bug开发)
-
DateTime: 2022-01-06 11:07
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = “ServletSessionIndex”, value = “/ServletSessionIndex”)
public class ServletSessionIndex extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
String name = (String)session.getAttribute(“name”);
response.setContentType(“text/html;charset=utf-8”);
response.getWriter().println(“
这是登陆后的页面,当前用户为”+ name);
}
}
- Session原理
ServletContext对象
ServletContext(Servlet上下文对象),是Web应用全局对象。一个Web应用只会创建一个ServletContext对象,ServletContext随着Web的启动而自动创建。
- 设置ServletContext
package com.example.web1; /**
-
Description:
-
@Author: kk(专业bug开发)
-
DateTime: 2022-01-06 11:23
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = “ServletCon”, value = “/ServletCon”)
public class ServletCon extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = request.getServletContext();
context.setAttribute(“copyright”, “专业bug开发 @2019-2022”);
context.setAttribute(“title”, “专业开发bug20年!”);
response.setContentType(“text/html;charset=utf-8”);
response.getWriter().println(“初始化成功!”);
}
}
- 获取ServletContext
package com.example.web1; /**
-
Description:
-
@Author: kk(专业bug开发)
-
DateTime: 2022-01-06 11:28
*/
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = “ServletgetCon”, value = “/ServletgetCon”)
public class ServletgetCon extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = request.getServletContext();
String copyright = (String)context.getAttribute(“copyright”);
String title = (String)context.getAttribute(“title”);
response.setContentType(“text/html;charset=utf-8”);
response.getWriter().println(“
” + copyright + “
”);response.getWriter().println(“
” + title + “
”);}
}
Web乱码问题解决
通过前面的学习我们发现一个问题,当我们的程序中含有中文的时候会出现乱码问题,这主要是由于Tomcat默认使用的字符集是ISO-8859-1,属于西欧字符集。所以我们解决乱码问题的核心是将ISO-8859-1转换成UTF-8(Servlet的请求响应都需要设置编码格式)。
- POST请求编码处理
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后总结
搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析
最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。*
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-nXRLsuLX-1711165818785)]
[外链图片转存中…(img-3my0fcdU-1711165818786)]
[外链图片转存中…(img-On0U3eCv-1711165818787)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-vFQnvWjU-1711165818787)]
最后总结
搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析
最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化
[外链图片转存中…(img-2hgsBkI9-1711165818788)]