0
点赞
收藏
分享

微信扫一扫

JavaWeb之servlet

阎小妍 2022-04-21 阅读 73
java

servlet概述

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

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

servlet执行原理

        (1)当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
        (2)查找web.xml文件,是否有对应的<url-pattern>标签体内容。
        (3)如果有,则在找到对应的<servlet-class>全类名
        (4)tomcat会将字节码文件加载进内存,并且创建其对象
        (5)调用其方法

实现servlet的方式

        - 实现javax.servlet.Servlet接口;
        - 继承javax.servlet.GenericServlet类;
        - **继承javax.servlet.http.HttpServlet类;**
        通常会继承HttpServlet类来完成我们的Servlet。

Servlet接口详解
 

public interface Servlet{
public void init(servletConfig config) throws ServletException;
public ServletConfig getServletConfig();
public void service(ServletRequest req, ServletResponse resp) throws ServletException,IOException;
public String getServletInfo();
public void destory();

}

servlet的生命周期     

        问题:当servlet被编写完成后,如何让浏览器访问servlet呢?
        给servlet指定一个servlet路径!(让servlet与一个路径绑定在一起)
        浏览器访问servlet路径

        **给servlet配置servlet路径,需要在web.xml中对servlet进行配置。**

        xml

<servlet>
    <servlet-name>xxx</servlet-name>
    <servlet-class>com.zking.AServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>xxx</servlet-name>
    <url-pattern>/xxx.do</url-pattern>
</servlet-mapping>

生命周期方法

        void init(ServletConfig):出生之后(1次)
        void service(ServletRequest request,ServletResponse response):每次处理请求时都会被调用
        void destory():临时之前调用(1次)

【总结】servlet由我们编写,但对象由服务器来创建,并且由服务器来调用相应的方法。

HttpServlet

        HttpServlet是[Servlet](https://so.csdn.net/so/search?q=Servlet&spm=1001.2101.3001.7020)接口的一个实现类,并且它是一个抽象类,servlet.http包中定义了采用HTTP通信协议(一个无状态协议)的HttpServlet类。

创建HttpServlet步骤

        - 继承HttpServlet抽象类
        - 重写HttpServlet的部分方法,如doGet()或doPost()方法
        - 获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串
        - 生成HTTP响应结果。通过HttpServletResponse对象生成响应结果

HttpServlet的实现由两种方式

        实现方式一:.xml配置实现
        A.配置xml文件(实现方式同Servlet接口的.xml配置相同,此处不再重复)
        B.继承HttpServlet抽象类
        C.重写get()、post()方法
        实现方式二:注解实现
        直接在Package包下新建Servlet

ServletConfig

        概述: ServletConfig是Servlet的配置参数对象,在Servlet的规范中,允许为每一个Servlet都提供一些初始化的配置,所以**每一个Servlet都有一个ServletConfig**。

        作用:当Servlet容器初始化Servlet时,Servlet容器会给Servlet的init()方法传入一个**ServletConfig对象**,即传入一些配置信息给Servlet。

        生命周期: 应用一加载则创建,应用停止则被销毁。

        创建时间:创建完Servlet对象时,接着创建。Servletconfig对象。

        常用方法:

                 | 返回值             | 方法名                        | 说明                     |
                 | ------------------ | ----------------------------- | ------------------------ |
                 | String             | getInitParameter(String name) | 根据参数名称获取参数的值 |
                 | Enumeratin<String> | getInitParameterNames()       | 根据所有参数名称的枚举   |
                 | String             | getSevletName()               | 获取servlet的名称        |
                 | ServletContext     | getServletContext()           | 获取servletContext对象   |

ServletConfig的配置方式

        在<servlet>标签种,通过<init-param>标签来配置。有两个子标签:
                <param-name>:代表初始化参数的key。
                <param-value>: 代表初始化参数的value

ServletContext

        概述:ServletContext对象是一个应用上下文对象,**也是一个域对象**。表示Servlet应用程序,**每个web应用程序都只有一个ServletContext对象。**

        ServletContext对象的作用:

                - 有了ServletContext对象,就可以共享从应用程序中的所有资源访问到的数据信息,并且可以动态注册web对象。
                 - 可以获得应用域的**全局初始化参数**,以及达到Servlet之间的**数据共享**;
                 - 可以作为域对象在整个应用中共享数据;域对象即在一定的作用范围内实现资源共享;
                 - 可以用来获取应用中的资源在服务器上的绝对路径;
                 - 获取文件的mime类型: 在网络传输中,并不是以扩展名来区分文件的类型,都是以mime类型;如:text/html;表示一个html文件。

        生命周期: 应用一加载则创建,应用被停止则销毁

        创建时间:加载web应用时,创建ServletContext对象

        

 ServletContext配置方式

        - ServletContext不像ServletConfig接口在Servlet标签里配置,而是针对于整个应用的配置,也叫全局的初始化参数;
        - 在<web-APP>标签中,通过<context-param>标签来配置,有两个子标签:
          <param-name>: 代表全局初始化参数的key。
          <param-value>: 代表全局初始化参数的value。

域对象

        - 域对象指的是对象有作用域,即有作用范围。域对象可以实现数据的共享,不同作用范围对象,共享数据的范围能力也不同。
         - 在Servlet规范中,一共有4个域对象。其他三个是:**request请求域**,**PageContext页面域**,**session会话域**。ServletContext就是其中的一个。是web应用中最大的作用域,也叫application应用域,可以实现整个应用之间的数据共享!

        常用方法:

 | 返回值              | 方法名                                 | 说明                                   |
 | ------------------- | -------------------------------------- | -------------------------------------- |
 | void                | setAttribute(String name,Object value) | 向域对象中存储数据                     |
 | Object              | getAttribute(String name)              | 通过名称获取域对象中的数据             |
 | void                | removeAttribute(String name)           | 通过名称移除域对象中的数据             |
 | Enumeration<String> | getAttributeNames()                    | 获取域对象中所有数据的名称             |
 | String              | getSevletContextName()                 | 获取servletContext的名称               |
 | String              | getContextPath()                       | 获取当前应用的访问虚拟目录             |
 | String              | getServletInfo()                       | 获取服务器名称和版本信息               |
 | String              | getInitParameter(String name)          | 根据名称获取全局配置的值               |
 | Enumeration<String> | getInitParameters()                    | 获取全局配置的所有名称                 |
 | String              | getRealPath(String path)               | 根据虚拟目录获取应用部署额磁盘绝对路径 |

快速入门:

        1. 实现servlet接口  不常用

        2. 继承HttpServlet抽象类    doGet  doPost

        完成servlet文件的编写后必须要实现配置

jsp内置对象与servlet的对应关系:
        JSP九大内置对象     Servlet 

        pageContext             :null
        √request                   :HttpServletRequest
        √session                   :HttpSession(通过request.getSession())
        √application              :ServletContext(this.getServletContext())
        √response                :HttpServletResponse
        √out                          :PrintWriter(resp.getWriter())
        page                         :this
        config                       :ServletConfig(获取Servlet初始化参数的值)
        exception                 :Exception

         只要修改了web.xml最好重新发布并启动tomcat!

举报

相关推荐

0 条评论