zoukankan      html  css  js  c++  java
  • 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>
    

      

  • 相关阅读:
    调整数组顺序使奇数位于偶数前面
    网站远程附件存储到 OSS
    平滑升级mariadb
    在Apache服务器上安装SSL证书
    复试-英语
    部署博客(docker)
    远程连接Windows
    Ultimate SLAM?利用事件相机解锁高速运动、高动态范围场景
    LRNNet:轻量级FCB& SVN实时语义分割
    3D目标检测深度学习方法中voxel-represetnation内容综述(三)
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/7976098.html
Copyright © 2011-2022 走看看