如何快速上手ViGEmBus:Windows虚拟手柄驱动的终极指南
2026/6/7 22:34:32
HtttpServletRequest代表客户端的请求,用户通过Http协议访问服务器,HTTP请求中的所有信息会被封装到HttpServlertRequest,通过这个HttpServlertRequest方法,获得客户端的所有信息;
LoginServlet
publicclassLoginServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{}@OverrideprotectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");Stringusername=req.getParameter("username");Stringpassword=req.getParameter("password");String[]hobbys=req.getParameterValues("hobbys");//后台中文乱码解决System.out.println("==============================");System.out.println(username);System.out.println(password);System.out.println(Arrays.toString(hobbys));System.out.println("==============================");resp.sendRedirect("/admin.jsp");// req.getRequestDispatcher("/admin.jsp").forward(req, resp);}}web.xml
<servlet><servlet-name>login</servlet-name><servlet-class>com.cike.www.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>login</servlet-name><url-pattern>/login.do</url-pattern></servlet-mapping>index.jsp
<%@ page contentType="text/html;charset=UTF-8"language="java"%><html><head><title>登录</title></head><body><h1>登录</h1><div><%--这里表单表示的意思:以post方式提交表单,提交到我们的login请求--%><form action="${pageContext.request.contextPath}/login.do"method="POST">用户名:<input type="text"name="username"><br>密码:<input type="password"name="password"><br>爱好:<input type="checkbox"name="hobbys"value="女孩"><input type="checkbox"name="hobby"value="代码"><input type="checkbox"name="hobby"value="唱歌"><input type="checkbox"name="hobby"value="电影"><br><input type="submit"></form></div></body></html>admin.jsp
<%@ page contentType="text/html;charset=UTF-8"language="java"%><html><head><title>后台管理员管理平台</title></head><body><h1>登陆成功</h1></body></html>面试题:请你聊一聊重定向和转发的区别?
307 Temporary Redirect 可以理解为一个临时的重定向。
307 和302 重定向区别在于,307 约定客户端重定向之后不能改变原先的请求方法
你能怎么证明你是cike_y 的学生?
你 cike_y
- 发票 cike_y给你发票 - 学校登记 cike_y标记你来过了一个网站,怎么能证明你来过?
客户端 服务端
cookie
session
常见场景:网站登录之后,你下次不用再登陆了,第二次访问直接登陆上了!(除非网站的机密性很高)
Cookie[]cookies=req.getCookies();//获得cookiecookie.getName()// 获得cookie的keycookie.getValue()// 获取cookie的valueCookiecookie=newCookie("LastLoginTime",System.currentTimeMillis()+"");新建一个cookie cookie.setMaxAge(60*60*24);// 设置cookie有效期resp.addCookie(cookie);// 响应给客户端一个cookiecookie:一般会保存在本地的用户目录下的appdata;
一个网站cookie是否存在上限!聊聊细节问题
//保存用户上一次访问的时间publicclassCookieDemo1extendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{//服务器,告诉你,你来的时间,把这个时间封装成一个信件,你下带来,我就知道你来了//解决中文乱码req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=UTF-8");PrintWriterout=resp.getWriter();//Cookie,服务端从客户端获取呀;Cookie[]cookies=req.getCookies();//这里返回数组,说明Cookie可能存在多个//判断Cookie是否存在if(cookies!=null){// 如果存在怎么办out.write("你上一次访问的时间是:");for(inti=0;i<cookies.length;i++){Cookiecookie=cookies[i];//获取cookie的keyif(cookie.getName().equals("LastLoginTime")){//获取Cookie中的valuelongl=Long.parseLong(cookie.getValue());Datedate=newDate(l);out.write(date.toLocaleString());}}}else{out.write("Cookie not found,这是您第一次访问本站,还没有获得信件呢");}// 服务器给客户端响应一个CookieCookiecookie=newCookie("LastLoginTime",System.currentTimeMillis()+"");//系统当前的时间戳cookie.setMaxAge(60*60*24);resp.addCookie(cookie);}}web.xml
<servlet><servlet-name>cookie</servlet-name><servlet-class>com.cike.CookieDemo1</servlet-class></servlet><servlet-mapping><servlet-name>cookie</servlet-name><url-pattern>/cookie</url-pattern></servlet-mapping>可以利用在线工具进行测试cooke的精准度如何?
https://tool.lu/timestamp/可以发现当我们使用上一次的cookie值进行在线转化,发现确实是这个时间点
删除Cookie:
publicclassCookieDemo02extendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{Cookiecookie=newCookie("LastLoginTime",System.currentTimeMillis()+"");cookie.setMaxAge(0);resp.addCookie(cookie);Cookiecookie1=newCookie("name","李梦茹");cookie1.setMaxAge(0);resp.addCookie(cookie1);}}web.xml
<servlet><servlet-name>delete</servlet-name><servlet-class>com.cike.CookieDemo02</servlet-class></servlet><servlet-mapping><servlet-name>delete</servlet-name><url-pattern>/delete</url-pattern></servlet-mapping>可以看见Cookie被删除了
主要是这个关键代码:
resp.setContentType("text/html;charset=GB18030");publicclassCookieDemo03extendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{//解决中文乱码,代码顺序应该重上往下req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");// 解决Cookie的编码在网页为中文resp.setContentType("text/html;charset=GB18030");Cookie[]cookies=req.getCookies();PrintWriterout=resp.getWriter();if(cookies!=null){out.write("你的名字是:");for(inti=0;i<cookies.length;i++){Cookiecookie=cookies[i];if(cookie.getName().equals("name")){out.write(cookie.getValue());}}}else{out.write("Cookie not found,这是您第一次访问本站,还没有获得信件呢");}Cookiecookie=newCookie("name","李梦茹");resp.addCookie(cookie);}}web.xml
<servlet><servlet-name>03</servlet-name><servlet-class>com.cike.CookieDemo03</servlet-class></servlet><servlet-mapping><servlet-name>03</servlet-name><url-pattern>/03</url-pattern></servlet-mapping>多个
什么是Session:
Session和Cookie的区别:
使用场景:
存东西的来源对象
packagecom.pojo;publicclassPerson{privateStringname;privateintage;publicPerson(){}publicPerson(Stringname,intage){this.name=name;this.age=age;}publicPerson(Stringname){this.name=name;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}@OverridepublicStringtoString(){return"Person{"+"name='"+name+'\''+", age="+age+'}';}}SessionDemo01
publicclassSessionDemo01extendsHttpServlet{protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{// 解决乱码问题response.setCharacterEncoding("UTF-8");request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");PrintWriterout=response.getWriter();// 得到sessionHttpSessionsession=request.getSession();// 给Session中存东西session.setAttribute("name",newPerson("胡锦洋",19));// 获取Session的IDStringid=session.getId();// 判断Session是不是新的if(session.isNew()){out.write("session 创建成功!ID为:"+id);}else{out.write("已经存在了Session:ID为:"+id);}// Session创建的时候做了什么事情;// Cookie cookie = new Cookie("JSESSIONID", id);// response.addCookie(cookie);}}获取Session
publicclassSessionDemo02extendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{// 解决乱码问题req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");PrintWriterout=resp.getWriter();// 获取SessionHttpSessionsession=req.getSession();Personperson=(Person)session.getAttribute("name");out.println(person);System.out.printf(person.toString());}}web.xml
<servlet><servlet-name>session</servlet-name><servlet-class>com.cike.SessionDemo01</servlet-class></servlet><servlet-mapping><servlet-name>session</servlet-name><url-pattern>/session</url-pattern></servlet-mapping><servlet><servlet-name>session2</servlet-name><servlet-class>com.cike.SessionDemo02</servlet-class></servlet><servlet-mapping><servlet-name>session2</servlet-name><url-pattern>/session2</url-pattern></servlet-mapping>session创建成功
获取Session
用户不仅仅可以手动注销,也可以自动注销
SessionDelete
publicclassSessionDeleteextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{HttpSessionsession=req.getSession();session.removeAttribute("name");// 手动注销sessionsession.invalidate();}@OverrideprotectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{doGet(req,resp);}}<servlet><servlet-name>deletesession</servlet-name><servlet-class>com.cike.SessionDelete</servlet-class></servlet><servlet-mapping><servlet-name>deletesession</servlet-name><url-pattern>/delte</url-pattern></servlet-mapping>web.xml配置
<!-- 设置Session默认的失效时间--><!-- session的配置--><session-config><!-- 1分钟后Session自动失效,以分钟为单位--><session-timeout>1</session-timeout></session-config>