.Net转Java自学之路—基础巩固篇二十四(Servlet)

时间:2022-12-13 19:53:02

Servlet:

  Servlet是JavaWeb的一个组件。属于动态资源,作用是处理请求;每个Servlet都是唯一的,他们能处理的请求是不同的。

  在服务器把接收的请求交给Servlet处理时,在Servlet中通常需要:接收请求数据、处理请求、完成响应。

  每个Servlet都必须实现 javax.servlet.servlet接口。

  实现方式:

    1、实现javax.servlet.servlet接口

    2、继承javax.servlet.GenericServlet类

    3、继承javax.servlet.http.HttpServlet类

  Servlet接口中的五个方法:

    init(ServletConfig);生命周期方法。在Servlet对象创建之后马上执行,且只执行一次。一般进行初始化操作。

    service(ServletRequest,ServletResponse);生命周期方法。会被调用多次,每次处理请求都是调用service()。

    destroy();生命周期方法。在Servlet被销毁之前调用,并且指挥被调用一次。

    ServletConfig();获取Servlet的配置信息。

    getServletInfo();获取Servlet信息。

  生命周期:浏览器访问Servlet

    1、给Servlet指定一个Servlet路径(让Servlet与一个路径绑定在一起)

    2、浏览器访问Servlet路径。

  配置Servlet路径:

    在web.xml中进行Servlet配置

<servlet>
<servlet-name>xxx</servlet-name>
<servlet-class>包名.类名</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>xxx</servlet-name>
<url-pattern>/path</url-pattern>
</servlet-mapping>

    若在Servlet中配置了load-on-startup,内容为非负数整数。表示服务器创建Servlet的顺序。

  特性:

    单例:一个类只有一个对象;当然可能存在多个Servlet类

    线程不安全,所以效率高。

  Servlet类由我们来写,但对象由服务器来创建,并且由服务器来调用响应方法。

ServletConfig:

  一个ServletConfig对象,对应一段web.xml中的Servlet配置信息。在web.xml配置信息中可以加配置初始化参数信息。

<init-param>
    <param-name>内容</param-name>
    <param-value>内容</param-value>
</init-param>
String getServletName();//获取的是<servlet-name>中的内容
ServletConfig getServletContext();//获取Servlet的上下文对象
String getInitParameter(String name);//通过名称获取指定初始化参数的值
Enumeration getInitParameterNames();//获取所有初始化参数的名称

GenericServlet:是Servlet的实现类

HttpServlet:

  HttpServlet extends GenderServlet

  类中存在方法void service(ServletRequest,ServletResponse);生命周期方法。需要强转俩个参数为http协议相关的类型。故、调用本类的service(HttpServletRequest,HttpServletResponse);该方法的参数已经是http协议相关的,使用起来更方便。它会通过request得到当前请求的请求方式;(例:get/post) 会根据请求方式再调用doGet()/doPost() 所以自定义类继承HttpServlet时需要重写doGet()和doPost()。若未重写并且调用了那么会出现405错误(不支持该种请求方式)。

ServletContext:

  一个项目只有一个ServletContext对象,可以再N多个Servlet种获取该唯一的对象,可以使用它给多个Servlet传递数据。

  作用:

    在整个Web应用的动态资源之间共享数据。

  获取ServletContext:

    在方法void init(ServletConfig config)中:ServletContext sc=config.getServletContext();ServletConfig类的getServletContext()获取ServletContext对象。

    在GenericeServlet或HttpServlet中获取:GenericeServlet类由getServletContext()方法,使用this.getServletContext()获取ServletContext对象。

  ServletContext是JavaWeb四大域对象之一。所有的域对象都具有存取数据的功能。因为域对象内部有一个Map,用来存储数据。

void setAttribute(String,Object);//用来存储一个对象,或称之为存储一个域属性。
//在ServletContext中保存一个域属性,域属性名称为String参数,域属性的值为Object参数。或多次调用该方法,并且使用相同的String,那么会覆盖上一次的值。
Object getAttribute(String);//获取ServletContext中的数据。获取名为String参数的域属性。 void removeAttribute(String);//移除ServletContext中的域属性 Enumeration getAttributeNames();//获取多少有域属性的名称。

  ServletContext获取应用初始化参数:

    在web.xml中配置的应用初始化参数。注:应用初始化参数与Servlet初始化参数不同。

    Servlet获取的初始化参数是局部的参数;也就是说,一个Servlet只能获取自己的数据和参数;即初始化参数职位一个Servlet准备。而配置的共有的初始化参数为所有的Servlet用,则组要使用ServletContext 。

web.xml:

<web-app>
    <context-param>
        <param-name>context-param</param-name>
        <param-value>context-value</param-value>
    </context-param>
</web-app>
servletContext.getInitParameter(String);//获取初始化参数
String servletContext.getRealPath(String);//获取服务器端的绝对路径
InputStream servletContext.getRealPathAsStream(String);//获取资源的路径后,再创建 输入流对象
Set servletContext.getResourcepaths("/WEB-INF");//获取当前路径下所有资源的路径