Servlet学习

Servlet

1.Servlet是什么

Servlet是Java编程语言类,用于扩展服务器的功能,这些服务器承载通过请求-响应编程模型访问的应用程序。尽管Servlet可以响应任何类型的请求,但它们通常用于扩展Web服务器托管的应用程序。对于此类应用程序,Java Servlet技术定义了HTTP特定的Servlet类。

javax.servletjavax.servlet.http包写的servlet提供的接口和类。所有servlet必须实现Servlet定义生命周期方法的 接口。实施通用服务时,可以使用或扩展GenericServletJava Servlet API随附的类。本HttpServlet类提供的方法,如doGetdoPost,用于处理特定的HTTP服务。 --摘自官方文档

Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。–摘自维基百科

实际上Servlet就是一个接口。开发web应用时,一般都是继承HttpServlet(因为HttpServlet已经实现了Servlet),并重写doGet和doPost方法。当然前提是要导入Servlet的依赖。创建一个继承HttpServlet的类HelloServlet,下图是它的继承树。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-maE9G3pG-1595479012103)(C:\Users\23062\AppData\Roaming\Typora\typora-user-images\image-20200624185831959.png)]

官方文档地址:https://javaee.github.io/tutorial/toc.html

2.Servlet的作用

Servlet负责接受用户的请求,并处理请求,并将处理后的结果发送给用户(即完成响应)。

Servlet的工作过程参考以下链接:

servlet的本质是什么,它是如何工作的? - 知乎用户的回答 - 知乎 https://www.zhihu.com/question/21416727/answer/690289895

3.Servlet的生命周期

public interface Servlet {
    void init(ServletConfig var1) throws ServletException;

    ServletConfig getServletConfig();

    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

    String getServletInfo();

    void destroy();
}

这是Servlet的结构,从中可以看出,Servlet的生命周期有三个阶段:

  • 初始化
  • 进行业务处理
  • 销毁

初始化是在客户端请求Servlet所映射的路径时进行的,而进行业务处理是在请求之后,响应之前进行的。销毁是在服务器关闭之后进行的。

4.Servlet的路径映射

①路径映射:在浏览器中为了能访问到servlet等动态资源,需要将其映射为一个可以被访问的路径。

②方法:在web.xml中进行配置

eg:
<servlet>
<!-- 注册名-->
    <servlet-name>hello</servlet-name>
<!-- servlet的完整类名-->
    <servlet-class>servlet.HelloServlet</servlet-class>
  </servlet>

<!--映射一个已注册的Servlet的一个对外访问路径-->
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
<!--Servlet的对外访问路径-->
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

5.doPost方法和doGet方法中的request和response

①:HttpServletRequest:

  • getParameter(String s):用于获取前端传来的请求的参数。
  • getRequestDispatcher(String path):用于请求转发到某个资源。
  • getSession():获得当前的Session对象
  • setAttribute(String key, Object value):用于在一次请求中存储value
  • getAttribute(String key):根据key取value
  • getInputStream():获取输入流
  • setCharacterEncoding(String encoding):设置请求的编码类型

②:HttpServletResponse:

  • setContectType(String type):设置相应类型
  • setCharacterEncoding(String encoding):设置相应的编码类型、
  • getWiter():获取输出流
  • addCookie(Cookie cookie):在响应中添加cookie对象
  • sendRedirct(String path):重定向到某个资源

6. ServletContext对象

①ServletContext简介:

  • 服务器会为每个应用创建唯一一个ServletContext对象;(应用内唯一)
  • ServletContext对象的创建是在服务器启动时完成的;(出生)
  • ServletContext对象的销毁是在服务器关闭时完成的。(死亡)
  • ServletContext对象的作用是在整个Web应用的动态资源之间共享数据。(作用)
②获取ServletContext
  • 在Servlet中获取ServletContext对象

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

  • 在GenericeServlet或HttpServlet中获取ServletContext对象

直接使用this.getServletContext()来获取;

③ ServletContext对象的作用
  • ServletContextJavaWeb四大域对象(PageContextServletRequestHttpSessionServletContext)之一。
  • 所有域对象都有存取数据的功能,因为域对象内部有一个Map,用来存储数据。
  • ServletContext对象用来操作数据的方法
void setAttribute(String name, Object value)
用来存储一个对象,也可以称之为存储一个域属性,
例如:servletContext.setAttribute(“xxx”, “XXX”),在ServletContext中保存了一个域属性,域属性名称为xxx,域属性的值为XXX。
请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值,这一特性与Map相同;

Object getAttribute(String name)
用来获取ServletContext中的数据,当前在获取之前需要先去存储才行,
例如:String value = (String)servletContext.getAttribute(“xxx”);,获取名为xxx的域属性;

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

Enumeration getAttributeNames()
获取所有域属性的名称;
  • ServletContext获取应用初始化参数

(1)Servlet也可以获取初始化参数,但它是局部的参数;也就是说,一个Servlet只能获取自己的初始化参数,不能获取别人的,即初始化参数只为一个Servlet准备!
(2)可以配置公共的初始化参数,为所有Servlet而用!这需要使用ServletContext才能使用!
(3)还可以使用ServletContext来获取在web.xml文件中配置的应用初始化参数!注意,应用初始化参数与Servlet初始化参数不同。

<web-app ...>
  ...
  <context-param>
    <param-name>paramName1</param-name>
    <param-value>paramValue1</param-value>      
  </context-param>
  <context-param>
    <param-name>paramName2</param-name>
    <param-value>paramValue2</param-value>      
  </context-param>
</web-app>

参考链接:https://www.jianshu.com/p/c9c04eece2b3

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值