Servlet

Servlet概述

Servlet是JavaWeb的三大组件之一,它属于动态资源。
Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:

接收请求数据;
处理请求;
完成响应;

Servlet与JSP

JSP是另外一种方式实现的Servlet,Servlet是JSP的早期版本,JSP更加注重页面的表现,而Servlet中则更注重业务逻辑的实现。

编写的页面显示效果比较复杂时,首选是JSP。或者在开发过程中,HTML代码经常发生变化,而Java代码则相对比较固定时,可以选择JSP。而在处理业务逻辑时,首选则是Servlet。

JSP只能处理浏览器的请求,而Servlet则可以处理一个客户端的应用程序请求。因此,Servlet加强了Web服务器的功能。

Servlet是纯java代码编写,可以方便调用java的其他组件;JSP是将java代码嵌入到HTML代码中,更容易生成复杂的HTML。

Servlet工作原理

在这里插入图片描述
(1) Web服务器(Servlet容器)接收到客户端请求,容器创建“请求和响应”对象,并判断请求的Servlet对象是否存在。
(2) 如果存在,则之间调用此Servlet对象的Service方法(间接调用doPost或doGet等方法),并将“请求和响应”对象作为参数传递。
(3) 如果不存在,容器负责加载Servlet类,创建Servlet对象并实例化,然后调用Servlet的init方法进行初始化,之后调用Service方法。
(4) 在Service方法中,通过请求对象获取客户端提交的数据并处理,然后通过响应对象将处理结果返回给客户端。

Servlet创建过程

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Servlet生命周期

初始化阶段:调用init()方法。Servlet对象被创建时,由容器调用此方法对该对象进行初始化。

响应客户请求阶段:调用service()方法。对于到达Servlet容器的客户请求,Servlet容器创建特定于这个请求的HttpServletRequest对象和HttpServletResponse对象,然后调用 Servlet 的service方法。

终止阶段:当Web应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet的新实例时,Servlet容器会先调用 Servlet的destroy方法。在destroy方法中,可以释放Servlet所占用的资源。

Servlet主要接口及实现类

javax.servlet.Servlet接口

Servlet接口的基本目标是提供生命周期方法
在这里插入图片描述

javax.servlet.ServletConfig接口

用于在初始化时从Servlet容器中读取其他配置信息

getInitParameter(String name):根据给定的初始化参数名,返回匹配的初始化参数值。
getInitParameterNames():返回一个Enumeration对象,里面包含了所有的初始化参数名。
getServletContext():返回一个ServletContext对象。
getServletName():返回Servlet的名字

javax.Servlet.GenericServlet类

实现了javax.servlet.Servlet接口和javax.servlet.ServletConfig接口的抽象类,它处service()方法外的所有接口方法做了缺省实现。
在这里插入图片描述

javax.Servlet.http.HttpServlet类

HttpServlet类是Servlet API提供的一个专用于HTTP协议的类, 该类是GenericServlet类的子类,在GenericServlet类的基础上进行了一些针对HTTP特点的扩充。它提供了对HTTP请求的特殊支持,所以通常我们都会通过继承HttpServlet来完成自定义的Servlet。
在这里插入图片描述

HttpServletRequest和HttpServletResponse接口

分别继承自javax.servletRequest和javax.servletResponse接口

javax.servlet.http.HttpServletRequest接口
在这里插入图片描述
在这里插入图片描述
javax.servlet.http.HttpServletResponse接口
在这里插入图片描述

ServletContext接口(servlet上下文)

WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,ServletContext对象包含Web应用中所有 Servlet 在 Web 容器中的一些数据信息。ServletContext随着Web应用的启动而创建,随着 Web 应用的关闭而销毁。一个 Web 应用只有一个ServletContext 对象。
ServletContext中不仅包含了 web.xml 文件中的配置信息,还包含了当前应用中所有Servlet可以共享的数据。可以这么说, ServeltContext 可以代表整个应用,所以ServletContext有另外一个名称:application。

Servlet初始化时,Web容器将初始化一给Servlet,当前ServletContext包含在ServletConfig对象;利用上下文对象,可以存储应用级数据(如网站的访问人数),可为所有用户共享。

在Servlet中获取ServletContext对象:

void init(ServletConfig config)中:
ServletContext context =config.getServletContext();
ServletConfig类的getServletContext()方法可以用来获取ServletContext对象;

在GenericeServlet或HttpServlet中获取ServletContext对象:

GenericServlet类有getServletContext()方法,所以可以直接使用this.getServletContext()来获取;

JavaWeb四大域对象

PageContext;
ServletRequest;
HttpSession;
ServletContext;

ServletContext对象方法:
void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性,请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值,这一特性与Map相同;

Object getAttribute(String name):用来获取ServletContext中的数据,当前在获取之前需要先去存储才行

void removeAttribute(String name):用来移除ServletContext中的域属性,如果参数name指定的域属性不存在,那么本方法什么都不做;

Enumeration getAttributeNames():获取所有域属性的名称;

Servlet与客户端进行通信

Servlet与客户端的交互主要通过doXXX方法或Service方法中传入的request对象和response对象。
通过request对象不但可以获取客户端提交的信息,还可以获得会话对象session进行会话管理;
通过response对象完成对客户端的响应。

通过request对象获取请求信息以及转发请求

request对象保存了用户的请求信息,通过此对象可以获取用户提交的数据。该对象的使用和JSP的内置对象request的使用方法完全相同。

请求转发或请求包含,都表示由多个Servlet共同来处理一个请求。

RequestDispatcher rd = request.getRequestDispatcher("/BServlet"); 
		rd.forward(request, response) ;
RequestDispatcher rd = request.getRequestDispatcher("/BServlet");
		rd.include (request, response);

在这里插入图片描述

对session进行操作

在Servlet中,容器没有直接将会话对象传入,而是将会话对象绑定到request对象中。在Servlet总要管理会话首先必须通过如下方法来获取会话对象:
public HttpSession getSession() 获得会话对象,若不存在则建立
public HttpSession getSession(boolean create) 获得会话对象,则根据参数create觉得是否建立会话对象,若为true则创建,否则不创建返回一个空对象。得到会话对象后,会话管理和JSP内置对象session相同。
在这里插入图片描述

通过response对象对用户进行响应

JSP和Servlet中都通过response对象来对客户端做出响应的。但Servlet中没有传入输出流对象,若要向客户端输出信息首先要通过response对象获得输出流对象,方法如下:
PrintWriter out = response.getWriter();
在Servlet中,使用out对象向客户端输出信息之前必须执行下面两个方法:
response. setContentType(“text/html;charset=UTF-8”);
设置响应的内容类型和编码,将“UTF-8”指定为工程所采用的编码即可。
response.setCharacterEncoding(“UTF-8”);
设置response对象的编码。
若没有设置相应编码,在浏览器中可能会显示乱码。

对Cookie进行操作

Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie)。
当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了!
在这里插入图片描述
Cookie的创建

Cookie myCookie = new Cookie(“username”,“张三”);

通过response对象使用Cookie

response.addCookie(myCookie);

Cookie对象获取

Cookie[] cookies=request.getCookie();

Cookie不只是有name和value,还有在客户端的有效时间,可以设置Cookie的有效时间。

setMaxAge(int)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Ma.01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值