Servlet学习

Http协议:规定对浏览器客户端和服务器端之间数据传输的格式规范。

 

 

HttpServletRequest对象: 请求对象。获取请求信息

 

请求行:request.getMethod()   

    request.getRequestURI/getRequestURL()  

    request.getProtocol();

请求头: request.getHeader("name")    request.getHeaderNames()  

实体内容: request.getInputStream() 

 

 

 

获取参数数据:(GETPOST)

 

request.getParameter("name")  一个值的参数

 

request.getParameterValues("name"); 多个值的参数

 

request.getParameterNames()    所有参数

 

 

 

响应头(location(结合302状态码完成请求重定向功能) refresh(定时刷新)、content-type content-disiposition(以下载方式打开)

 

 

 

HttpServletResponse对象: 响应对象。 可以设置响应信息

 

响应行: response.setStatus();

 

响应头: response.setHeader("name","value")

 

实体内容:

 

(PrintWriter) response.getWriter().writer(); 字符内容

 

(OutputStream) response.getOutputStream().writer();  字节内容

 

 

 

运行原理:

tomcat服务器启动时,首先加载webapps中的每个web应用的web.xml配置文件,然后通过反射创建servlet对象,并且调用里面的service方法

 

 

通过反射:

 

a)构造FirstServlet的对象

 

b)然后调用FirstServlet里面的service方法

 

servlet是单例的,如果某个Servlet实现了SingleThreadModel接口,那么Servlet引擎将以单线程模式来调用其service方法。

SingleThreadModel接口中没有定义任何方法,只要在Servlet类的定义中增加实现SingleThreadModel接口的声明即可。

对于实现了SingleThreadModel接口的Servlet,Servlet引擎仍然支持对该Servlet的多线程并发访问,其采用的方式是产生多个Servlet实例对象,并发的每个线程分别调用一个独立的Servlet实例对象。

 

实现SingleThreadModel接口并不能真正解决Servlet的线程安全问题,因为Servlet引擎会创建多个Servlet实例对象,而真正意义上解决多线程安全问题是指一个Servlet实例对象被多个线程同时调用的问题。

事实上,在Servlet API 2.4中,已经将SingleThreadModel标记为Deprecated

 

 

修改session全局有效时间:分钟
<session-config>
<session-timeout>1</session-timeout>
</session-config>

 

 

设置cookie的有效路径。默认情况:有效路径在当前web应用下

负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!!
零:表示删除同名的cookie数据

 

 

response.setHeader("set-cookie", cookie.getName()+"="+cookie.getValue()+",email=eric@qq.com");

response.addCookie(cookie1);

 

String name = request.getHeader("cookie");

request.getCookies();

 

1
2
3
4
InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
Properties prop = new Properties();
prop.load(in);
String user = prop.getProperty("user");

 

修改session的有效时间

 

session.setMaxInactiveInterval(20);

 

 

手动发送一个硬盘保存的cookie给浏览器
Cookie c = new Cookie("JSESSIONID",session.getId());
c.setMaxAge(60*60);
response.addCookie(c);

 

销毁session

 

HttpSession session = request.getSession(false);
if(session!=null){
session.invalidate();//手动销毁
}

*.html(伪静态)

 

注意:

url-pattern要么以 / 开头,要么以*开头。  例如: itcast是非法路径。

 

 

不能同时使用两种模糊匹配,例如 /itcast/*.do是非法路径

 

 

当有输入的URL有多个servlet同时被匹配的情况下 

精确匹配优先。(长的最像优先被匹配)  

以后缀名结尾的模糊url-pattern优先级最低

 

 

 

 

 

servlet的缺省路径(<url-pattern>/</url-pattern>)是在tomcat服务器内置的一个路径

 

 

这个缺省的Servlet的作用是用于解析web应用的静态资源文件

 

 

 

1.到当前day10应用下的web.xml文件查找是否有匹配的url-pattern

 

2.如果没有匹配的url-pattern,则交给tomcat的内置的DefaultServlet处理

 

3.DefaultServlet程序到day10应用的根目录下查找是存在一个名称为index.html的静态文件

 

4.如果找到该文件,则读取该文件内容,返回给浏览器,如果找不到该文件,则返回404错误页面

 

 

 

Servlet程序的生命周期由tomcat服务器控制

 

ServletConfig对象: 主要是用于加载servlet的初始化参数。在一个web应用可以存在多个ServletConfig对象(一个Servlet对应一个ServletConfig对象)

创建时机: 在创建完servlet对象之后,在调用init方法之前创建。

得到对象: 直接从有参数的init方法中得到!!!

 

 

context.getRequestDispatcher("路径").forward(request,response);

 

request.getRequestDispacher("路径").forward(request,response);  等价于上面的代码

 

 

 

得到web应用中的资源文件

 

context.getRealPath("路径")

 

context.getResourceAsStream("路径");

 

 

context.getContextPath();

 

request.getContextPath();  等价于上面的代码

 

 

 

 

浏览器一般只允许存放300Cookie,每个站点最多存放20Cookie,每个Cookie的大小限制为4KB

 

 

 

Cookie的局限:

 

Cookie只能存字符串类型。不能保存对象 

只能存非中文    1Cookie的容量不超过4KB

 

 

 

 

如果要保存非字符串,超过4kb内容,只能使用session技术

 

 

 

创建或得到session对象

 

HttpSession getSession()  

 

HttpSession getSession(boolean create) 

 

设置session对象

void setMaxInactiveInterval(int interval)   设置session的有效时间

void invalidate()      销毁session对象

java.lang.String getId()   得到session编号

 

第一次访问创建session对象,给session对象分配一个唯一的ID,叫JSESSIONID    new HttpSession();

JSESSIONID作为Cookie的值发送给浏览器保存

Cookie cookie = new Cookie("JSESSIONID", sessionID);

response.addCookie(cookie);

第二次访问的时候,浏览器带着JSESSIONIDcookie访问服务器

服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象

 

 

 

getSession(false):    得到session对象。没有匹配的session编号,返回null

 

 

void setMaxInactiveInterval(int interval)   设置session的有效时间

 

session对象销毁时间:

 

默认情况30分服务器自动回收

 

修改session回收时间

 

全局修改session有效时间

 

<session-config>

 

<session-timeout>1</session-timeout>

 

</session-config>

 

posted @   escapist  阅读(118)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示