Servlet解刨

1:使用Java EE版本的Eclipse开发动态的WEB工程(Java WEB项目)
 1)把开发选项切换到Java EE
 2)可以window->show view中找到package Explore,把其拖到开发区左边
 3)在Servers面板中新建Tomcat服务器
 4)新建Dynamic Web project(动态web工程) ,其中Target Runtime需要选择Tomcat
 5)开发Java Web应用
 6)可以通过run on server 运行 WEB项目
 
 2:ServLet的HelloWorld
   1)创建一个ServLet接口实现类
   2)在web.xml文件中配置和映射ServLet
   <servlet>
     <servlet-name>helloServlet</servlet-name>
     <servlet-class>com.test.HelloServlet</servlet-class>
   </servlet>
  <servlet-mapping>
     <servlet-name>helloServlet</servlet-name>
     <url-pattern>/hello</url-pattern>
  </servlet-mapping>
  
   3)浏览器访问ServLet通过<url-pattern>/hello</url-pattern>
   
 3:servLet容器:运行ServLet,JSP,Filter,Listener
  1)可以来创建ServLet,并调用ServLet的相关生命周期方法
  2)JSP,Filter,Listen,Tag...运行在ServLet容器中
 
 4:ServLet生命周期的方法:以下方法都是由ServLet容器负责调用
  1)构造器:第一次请求ServLet时,创建ServLet的实例,调用构造器(说明是ServLet一个单实例)
  2)init:只被调用一次,在ServLet容器被实例化后立即调用,用于初始化ServLet
  3)service:被多次调用,每次调用时都会调用service方法,实际用于响应请求
  4)destory:在ServLet容器销毁时调用,只被调用一次,释放ServLet当前所占用的资源
  
 5:load-on-startup:在被加载时创建实例
 
 6:关于servlet-mapping
  1)同一个servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置可以是同一个servlet的注册名
  2)再Servlet映射到URL中也可以使用*(通配符),但是只能有2种固定格式
    一种是:*.扩展名(html,jsp),另外一种是:/*
    <servlet-mapping>
     <servlet-name>helloServlet</servlet-name>
     <url-pattern>*.html</url-pattern>
  </servlet-mapping>
  
  <servlet-mapping>
     <servlet-name>helloServlet</servlet-name>
     <url-pattern>/*</url-pattern>
  </servlet-mapping>
  以下是不合法的:
  <servlet-mapping>
     <servlet-name>helloServlet</servlet-name>
     <url-pattern>/*.html</url-pattern>
  </servlet-mapping>
  
 7:ServletConfig:是一个接口,封装了servlet配置信息,并且可以获取ServletContext对象
   1) 配置ServLet初始化参数 
   <init-param>
          <param-name>user</param-name>
          <param-value>root</param-value>
      </init-param>
      <init-param>
          <param-name>password</param-name>
          <param-value>123</param-value>
      </init-param>
   2):获取初始化参数:getInitParameter(String name):获取指定参数名的初始化参数
       getInitParameterName();获取参数名组成的Enumeration对象
       String user=servletConfig.getInitParameter("user");
String password=servletConfig.getInitParameter("password");
System.out.println("用户:"+user+",密码:"+password);
Enumeration<String> names=servletConfig.getInitParameterNames();
while(names.hasMoreElements()){
String name=names.nextElement();
String value=servletConfig.getInitParameter(name);
System.out.println("^^"+name+":"+value);
}
   3):ServletContext:是一个接口(是ServLet上下文)
    Sevlet引擎为每一个WEB应用程序都创建一个对应的ServletContext对象,包含在ServletConfig对象中
    调用ServletConfig.getServletContext方法可以返回ServletContext对应的引用
    --由于每一个Servlet WEB应用程序共享ServletContext对象,所以ServletContext是application(应用):用于保存所有用户的公共的数据信息
  ①获取当前web应用程序的初始化参数
  设置初始化参数:servletContext可以为所有的Servlet所获取,而Servlet的初始化参数只能被指定的一个servlet获取
   <!-- 配置当前WEB应用程序的初始化参数 -->
  <context-param>
      <param-name>driver</param-name>
      <param-value>com.mysql.jdbc.Driver</param-value>
  </context-param>
  <context-param>
      <param-name>jdbcUrl</param-name>
      <param-value>jdbc:mysql://localhost/testjdbc</param-value>
  </context-param>
  <context-param>
      <param-name>user</param-name>
      <param-value>root</param-value>
  </context-param>
  <context-param>
      <param-name>password</param-name>
      <param-value>123456</param-value>
  </context-param>
  
  方法:
  ServletContext servletContext=servletConfig.getServletContext();
String  driver=servletContext.getInitParameter("driver");
String  jdbcUrl=servletContext.getInitParameter("jdbcUrl");
String  user=servletContext.getInitParameter("user");
String  passwords=servletContext.getInitParameter("password");
System.out.println("driver:"+driver);
System.out.println("jdbcUrl:"+jdbcUrl);
System.out.println("user:"+user);
System.out.println("passwords:"+passwords);
System.out.println("--------------------------- ");
Enumeration<String> names2=servletContext.getInitParameterNames();
while(names2.hasMoreElements()){
String name2=names2.nextElement();
String value=servletContext.getInitParameter(name2);
System.out.println(name2+"-->"+value);
}
  ②获取当前WEB应用的某一个文件绝对路径:getRealPath()方法,不是文件部署前的路径
  ③获取当前WEB应用的根目录名称:
  
       String contextPath=servletContext.getContextPath();
System.out.println("WEB根目录名称:"+contextPath);
  ④获取当前WEB应用的某一个文件对应的输入流
   getResourceAsStream(String path):path的/ 为相当于当前WEB应用的路径
    InputStream isInputStream2=servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties");
          System.out.println("2."+isInputStream2);
      

jdbc.properties

driver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost/testjdbc</param-value>
user=root
password=123456

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Servlet1</display-name>
  <!-- 配置当前WEB应用程序的初始化参数 -->
  <context-param>
      <param-name>driver</param-name>
      <param-value>com.mysql.jdbc.Driver</param-value>
  </context-param>
  <context-param>
      <param-name>jdbcUrl</param-name>
      <param-value>jdbc:mysql://localhost/testjdbc</param-value>
  </context-param>
  <context-param>
      <param-name>user</param-name>
      <param-value>root</param-value>
  </context-param>
  <context-param>
      <param-name>password</param-name>
      <param-value>123456</param-value>
  </context-param>
  <!--  配置和映射ServLet-->
  <servlet>
      <!-- ServLet注册的名字  -->
     <servlet-name>helloServlet</servlet-name>
      <!-- ServLet的全类名 -->
     <servlet-class>com.test.HelloServlet</servlet-class>
     <!-- 配置ServLet初始化参数  -->
      <init-param>
          <param-name>user</param-name>
          <param-value>root</param-value>
      </init-param>
      <init-param>
          <param-name>password</param-name>
          <param-value>123</param-value>
      </init-param>
  </servlet>
  <servlet-mapping>
   <!-- 需要和某一个ServLet节点的servlet-name子节点保持一致 -->
     <servlet-name>helloServlet</servlet-name>
      <!-- 映射具体访问路径:/当前WEB应用的根目录 -->
     <url-pattern>/hello</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

原文地址:https://www.cnblogs.com/oycq9999/p/10222060.html