Servlet简介

Servlet简介

一. Servlet API 概览

Servlet API有以下四个Java包:

  • javax.servlet,其中包含定义Servlet和Servlet容器之间契约的类和接口。
  • java.servlet.http,其中包含定义HTTP Servlet和Servlet容器之间契约的类和接口。
  • javax.servlet.annotation,其中包含标注Servlet、Filter、Listener的标注。它还为被标注原件定义元数据。
  • javax.servlet.descriptor,其中包含提供程序化登陆web应用程序的配置信息的类型。

Servlet运行流程:

用户请求致使Servlet容器调用Servlet的Service方法,并传入一个ServletRequest实例和一个ServletResponse实例。ServletRequest中封装了当前的HTTP请求,因此,Servlet开发人员不必解析和操作原始的HTTP数据。ServletResponse表示当前用户的HTTP相应,使得将响应发回给用户变得十分容易。

对于每一个运用程序,Servlet容易还会创建一个ServletContext实例。这个对象中封装了上下文(应用程序)的环境详情。每个上下文只有一个ServletContext。每个Servlet实例也都有一个封装Servlet配置的ServletConfig。

二. Servlet

Servlet接口定义了以下5个方法:

void init(ServletConfig config) throws ServletExpection;

void service(ServletRequest request, ServletResponse response) throws ServletExpection,IOExpection;

void destory();

String getServletInfo();

ServletConfig getServletConfig();

init、service和destory是生命周期方法:

  • init,当该Servlet第一次被请求时,Servlet容器会调用这个方法。这个方法在后续请求中不会再被调用。我们可以利用这个方法执行相应初始化工作。调用这个方法时Servlet会传入一个ServletConfig。一般来说你会将ServletConfig献给一个类级变量,因此这个对象可以通过Servlet类的其它点来使用。
  • service,每当请求Servlet时,Servlet容器就会调用这个方法。编写代码时,时假设Servlet要在这里被请求。第一次请求Servlet时,Servlet调用init方法和Service方法。后续的请求只调用Service方法。
  • destory,当要销毁Servlet时,Servlet容器就会调用这个方法,一般会在这个方法中编写清除代码。

getServletInfo和getServletConfig两个方法是非生命周期方法。getServletInfo会返回Servlet的描述,getServletConfig会返回由Servlet容器传给init方法的ServletConfig。

三. Servlet应用程序的目录结构

这里写图片描述
如果想让某一个资源可以被Servlet访问,但不可以被用户访问,那么就要把它放在WEB-INF目录下。要让用户直接访问静态页面放在WEB-INF外面就可以了。

四. ServletRequest

Servlet接口中的一些方法:

//返回请求主体的字节数,如果不知道字节长度,这个方法就会返回-1。
public int getContentLength();

//返回请求主体的MIME类型,如果不知道类型,则返回null。
public String getContentType();

//返回指定请求参数的值
public String getParameter(Strng name);

//返回这个HTTP请求的协议名称和版本
public String getProtocol();

五. ServletConfig

Servlet封装可以通过@WebServlet或者部署描述符传给Servlet的配置信息,这样传入的每一条信息就叫一个初始参数,一个初始参数有key和value两个元件。

为了从Servlet内部获取到初始参数的值,要在Servlet容器传给Servlet的init方法的ServletConfig中调用getInitParameter方法。

String getInitParameter(String name);

此外,getInitParameterNames方法则是返回所有初始化参数名称的一个Enumeration:

Enumeration<String> getInitParameterNames();

ServletConfig还提供了另一个很有用的方法:getServletContext。利用这个方法可以从Servlet内部获取ServletContext。

六. ServletContext

ServletContext的下列方法负责处理属性:

Object getAttribute(String name);
Enumeration<String> getAttributeNames();
void setAttribute(String name, Object object);
void removeAttribute(String name);

七. HttpServlet

HttpServlet的两个特性:

  • 不用覆盖service方法,而是覆盖doGet或者doPost,在少数情况下,还会覆盖以下任意方法:doHead、doPut、doTrace、doOptions和doDelete。
  • 使用HttpServletResponse和HttpServletRequest

HttpServletRequest

HttpServletRequest表示HTTP环境中的Servlet请求。它拓展ServletRequest接口,并添加了几个方法,部分方法如下:

//返回表示请求上下文的请求URL部分。
String getContextPath();

//返回一个Cookie对象数组
Cookie[] getCookies();

//返回指定HTTP标题的值
String getHeader(String name);

//返回生成这个请求的HTTP方法名称。
String getMethod();

//返回请求URL中的查询字符串
String getQueryString();

//返回与这个请求相关的会话对象。如果没有,将创建一个新的会话对象。
HttpSession getSession();

//返回与这个请求相关的会话对象,如果没有,并且create参数为True,将创建一个新的会话对象。
HttpSession getSession(boolean create);

HttpServletResponse

void addCookie(Cookie cookie);
void addHeader(String name, String value);

//发送一条响应码,将浏览器跳转到指定位置。
void sendRedirect(String location);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值