JavaWeb--Servlet

Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中。(Tomcat, Resin, J2EE服务器(如Weblogic)中也提供了内置的Servlet容器)

Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用“请求/响应”的模式。
Servlet可完成如下功能:
  创建并返回基于客户请求的动态HTML页面。
  创建可嵌入到现有HTML 页面中的部分HTML 页面(HTML 片段)。
  与其它服务器资源(如数据库或基于Java的应用程序)进行通信。

ServletAPI

Servlet容器:运行Servlet、JSP、Filter等软件的环境

  1.可以用来创建Servlet,并调用Servlet相关生命周期的方法

  2.JSP,Filter,Tag,Listener……

 Servlet生命周期的方法:

  1.构造器:第一次请求Servlet时,创建Servlet实例,调用构造器(Servlet是单实例的

  2.init方法:只被调用一次,在创建好实例后立即被调用,用于初始化当前的Servlet

  3.service方法:被多次调用,每次请求都会调用service方法,实际用于响应请求的

  4.destroy方法:只被调用一次,在当前的Servlet所在的Web被卸载前调用,用于释放当前Servlet所占用的资源

load-on-startup:可以指定Servlet被创建的时机。若为负数,则在第一次请求时被创建,若为0或正数,则在当前WEB被Servlet容器加载时创建实例,且数越小越早被创建。

ServletConfig接口:封装了Servlet的配置信息,并且可以获得ServletContext对象

1.配置Servlet的初始化参数

 <!--配置和映射Servlet-->
    <servlet>
        <!-- servlet注册的名字 -->
        <servlet-name>helloServlet</servlet-name>
        <!-- servlet的全类名 -->
        <servlet-class>helloweb.HelloServlet</servlet-class>

        <!--配置Servlet的初始化参数,且该节点必须在load-on-startup节点的前面-->
        <init-param>
            <!--参数名-->
            <param-name>user</param-name>
            <!--参数值-->
            <param-value>root</param-value>
        </init-param>

        <init-param>
            <param-name>password</param-name>
            <param-value>1230</param-value>
        </init-param>

        <!-- 可以指定Servlet被创建的时机 -->
        <load-on-startup>1</load-on-startup>
    </servlet>

 2.获取初始化参数

getInitParameterNames():获取参数名组成的Enumeration对象
getInitParameter (String name): 获取指定参数名的初始化参数
getServletName
***getServletContext

ServletContext

1.可以由ServletConfig获取

2.该对象代表当前Web应用:可以认为是当前Web的一个大管家,可以获取到当前Web应用的各个方面的信息

①获取当前Web应用的初始化参数

<!--配置当前Web应用的初始化参数-->
    <context-param>
        <param-name>driver</param-name>
        <param-value>com.mysql.jdbc.Driver</param-value>

        <param-name>jdbcUrl</param-name>
        <param-value>jdbc:mysql:///JDBC</param-value>
    </context-param>

  

getInitParameterNames():获取参数名组成的Enumeration对象
getInitParameter (String name): 获取指定参数名的初始化参数

②获取当前Web应用的某一个文件在服务器上的绝对路径

getRealPath(String path)

③获取当前Web应用的名称

getContextPath()

④获取当前Web应用的某一个文件对应的输入流

getResourceAsStream(String path):path的/为当前web应用的根目录

  可以由classLoader获取,也可以由ServletContext获取

//获取ServletContext对象
        ServletContext sContext = servletConfig.getServletContext();

        ClassLoader classLoader = getClass().getClassLoader();
        InputStream is1 = classLoader.getResourceAsStream("jdbc.properties");
        System.out.println(is1);
        InputStream is2 = sContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties");
        System.out.println(is2);

  ⑤和getAttribute相关的方法


package helloweb; import javax.servlet.*; import java.io.IOException; public class HelloServlet implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init"); } @Override public ServletConfig getServletConfig() { System.out.println("getServletConfig"); return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("service"); } @Override public String getServletInfo() { System.out.println("getServletInfo"); return null; } @Override public void destroy() { System.out.println("destroy"); } public HelloServlet(){ System.out.println("HelloServlet Constructor"); } }

  

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <!--配置和映射Servlet-->
    <servlet>
        <!-- servlet注册的名字 -->
        <servlet-name>helloServlet</servlet-name>
        <!-- servlet的全类名 -->
        <servlet-class>helloweb.HelloServlet</servlet-class>

      <!-- 可以指定Servlet被创建的时机 -->
      <load-on-startup>4</load-on-startup>

        

    </servlet>
    
    <servlet-mapping>
        <!-- 需要和某个servlet节点的servlet-name子节点的文本节点一致 -->
        <servlet-name>helloServlet</servlet-name>
        <!-- 映射具体的访问路径:/代表当前web应用的根目录, -->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

</web-app>

  

原文地址:https://www.cnblogs.com/SkyeAngel/p/7976098.html