3、servlet-02
servlet-02
HttpResponse
服务器响应给浏览器的对象。
可以设置响应编码跟浏览器解析的编码一致的问题。
response.setContextType("text/html;charset=utf-8"); 只对post请求有效。
服务器常见的错误:
404:原因一:
客户端请求的地址跟我们web.xml映射的路径不一致。
原因二:
客户端请求的地址跟servlet的路径不一致。
500:服务器内部错误。原因一:内部逻辑代码错误。
原因二:配置web.xml的路径错误。
403:请求的方式不匹配。
302:重定向。
200:成功。
解决乱码问题:
请求乱码问题:客户端发数据给服务器的时候,客户端与服务器的编码格式不一致。
解决:request.setCharacterEncoding("utf-8");
响应乱码问题:服务器发数据给客户端时,服务器与客户端的编码不一致。
解决:response.setContentType("text/html;charset=utf-8");
转发和重定向
请求转发:是一次请求,一次响应。请求的servletA无法解决当前问题,服务器内部就在寻找能解决这个问题的servletB,然后servletB返回数据给servletA,servletA再将数据返回给客户端。
- request.getRequestDispatcher(需求请求的servlet).forward(resquest,response);
- 根据servletContext对象也可以实现转发
重定向:两次请求两次响应。请求的servletA无法解决当前问题,就响应给客户端,告诉客户端让他去请求别的servletB,然后客户端去请求servletB后servletB能够解决问题,然后响应给客户端。
response.sendRedirect(要重定向的地址);
路径
分为客户端路径跟服务器端路径。
客户端路径分别有:表链接、表单、重定向。
- 绝对路径(全路径)
- 相对路径
- 带 “/” : 以我们的主机作为开始,不带上项目名,路径为 主机+/后面的
- 不带 “/” : 以我我们当前运行的程序为参考,也就是带上项目名,当前程序的虚拟路径,为
- 主机+/项目名+/后面的
服务端的路径:比如web.xml的
- 绝对路径
- 相对路径
- 不带“/”为不加项目名,但是程序会帮我们加上当前程序的真实路径ServletContext对象中的getRealPath()
- 带“/”就加上了当前项目的名称。
建议都加上 “/”:
原因是:当我们都很多个项目在同一服务器上运行的时候可以避免相同的servlet路径同名的问题。
ServletContext:
可以用来获取我们项目的虚拟路径,也就是发布在tomcat中的项目名。
String path = ServletContext.getRealPath();
获取servletContext的方式:
- 根据request对象。request.getServletContext();
- 直接调用getSetvletContext();
会话追踪技术
当我们的一次请求只能获取一次请求的数据,当我们需要从之前的请求获取我们想要的数据就满足不了我们了。所以就出现了cookie和session。
cookie:
保存在我们的客户端浏览器或者是客户的磁盘上的小文件。不得超过4k.
cookie是由服务器创建的,由客户端来保存。
创建:
Cookie cookie = new Cookie(String name,String value); name为键,value为值,是以键值对的形式 response.addCookie(cookie);//响应给客户端保存
获取Cookie:(第二次请求的时候,请求中会携带cookie到服务器)
Cookie[] cookies = request.getCookies();//返回一个Cookie数组 //for-each循环来遍历获取我们想要的键和值 for(Cookie cookie : Cookies){ cookie.getName();//获取键的名称 cookie.getValue();//获取值 }
设置Cookie的存活时间:
cookie.setMaxAge(int);以秒为单位。大于0时为存活的时间,等于0时表示不保存cookie,-1时表示关闭浏览器cookie就不存活。
Cookie保存中文:
URL编码:URLEncoder.encoder(String name);保存时
URL解码:URLDecoder.decoder(String name);获取时
HttpSession:
在javax.servlet.HttpServlet中
生命周期:在一次会话中,当浏览器关闭是就会死亡,当浏览器还没有关闭的时候,我们所获取的session都是同一个。
session是四大域对象之一。
获取session的方式:
- 通过HttpRequest对象来获取。
- request.getSession(false); 此方式会判断session是否存在,如果不存在返回false,不会创建session
- request.getSession();默认为true,此方式会判断session是否存在,如果不存在,就创建一个新的session
session中的方法:
-
setAttribute(String name ;Object obj);//值为Object类型
-
getAttribute(String name);//需要强制转换为String
-
removeAttribute(String name);//移除一个属性
-
setMaxInactiveInteravl(int);以秒为单位,来设置session的存活时间。
-
Invalidate();调用此方法使Session立即死亡。
-
boolean isNew();判断session是否为新。
-
此外还可以在web.xml中设置session的存活时间,以分为单位。
-
<session-config> <session-timeout>10</session-timeout> </session-config>
-
Session的原理:
session的底层依赖cookie,在第一次请求servlet的时候,服务器就会为客户端创建一个JSessionId的cookie然后响应给客户端,当客户端再次访问服务器的时候,就会请求携带过去,以方便服务器识别为同一浏览器发送的请求。
这样就达到了服务器能识别我们的客户端。
获取 jsessionId ,获取之前必须先创建session先,通过session对象的getId()的方法来获取。还可以通过遍历cookie数组来获取。
Cookie与Session的区别
- Session是保存在服务器的,cookie是保存在客户端浏览器获取磁盘上。
- Session保存的数据可以是任意的,cookie只能保存字符串。
- session会随会话的结束而死亡,cookie可以长期的存在客户端的磁盘上,也可以临时保存在浏览器中。
- Cookie常用来保存客户不重要的数据,Session可以用来保存客户重要的数据。
UUID:
可以用来获取一个不重复的随机数。在java.util包下,通过random()方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!