美文网首页
00-Servlet

00-Servlet

作者: 何惧l | 来源:发表于2018-06-03 16:11 被阅读9次

开发动态项目

  1. 把开发选项切换到 JavaEE
  2. 可以在 Window -> Show View 中找到 Package Explorer, 并把其拖拽到开发区的左边
  3. 在 Servers 面板中新建 Tomcat 服务器. 一定要关联到 Tomcat 安装的根目录
  4. 新建一个 Dynamic Web Project. 其中 Target Runtime 需选择 Tomcat6.0
  5. 开发 Java WEB 应用
  6. 可以通过 run on server 来运行 WEB 项目

Servlet的HelloWord

  1. 创建一个Servlet接口的实现类
    public class HelloServlet implements Servlet
    并且重写里面的方法,现在不需要知道这些方法的具体作用
  2. 在web.xml文件中配置和映射这个Servlet
<!-- 配置和映射 Servlet -->
    <servlet>
        <!-- Servlet 注册的名字 -->
        <servlet-name>helloServlet</servlet-name>
        <!-- Servlet 的全类名 -->
        <servlet-class>com.atguigu.javaweb.HelloServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <!-- 需要和某一个 servlet 节点的 serlvet-name 子节点的文本节点一致 -->
        <servlet-name>helloServlet</servlet-name>
        <!-- 映射具体的访问路径: / 代表当前 WEB 应用的根目录. -->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
 <!-- 执行流程
    访问路径: http://主机名或ip:端口号/项目名/资源名
    http://localhost:8080/I/hello
    当服务器接收到请求后,自动从项目名之后开始截取,然后拿着截取到的内容到项目的web.xml文件中,当
    与servlet-mapping\url-pattern进行匹配,若匹配成功,将拿着当前的servlet-mapping\servlet-name到servlet标签中,
    与servlet-name进行匹配,若一致那么就匹配成功,将获取当前servlet的servlet-class,根据类全名找到真实的servlet类
  -->

Servlet生命周期的方法

一下方法都是由Serlvet容器负责调用

  1. 构造器
    • 只有第一次请求Servlet时,创建Servlet的实例,调用构造器,这说明Serlvet只实例一次
  2. init
    • 只被调用一次,创建好实例(此时构造器已经执行)后立即被调用,用于初始化当前的Servlet
  3. service
    • 被调用多次,每次请求都会调用service方法,实际用于响应请求的
  4. destroy
    • 只调用一次,在当前Servlet所在的WEB应用被卸载前调用,用于释放当前Servlet所占的资源

load-on-startup 参数

  1. 配置在 servlet 节点中
<servlet>
        <!-- Servlet 注册的名字 -->
        <servlet-name>secondServlet</servlet-name>
        <!-- Servlet 的全类名 -->
        <servlet-class>com.atguigu.javaweb.SecondServlet</servlet-class>
        <!-- 可以指定 Servlet 被创建的时机 -->
        <load-on-startup>2</load-on-startup>
    </servlet>

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

serlvet-mapping映射

  1. 注意事项1
    • 同一个Servlet可以被映射到多个URL上,即多个 <servlet-mapping> 元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名
  2. 注意事项2
    • 在Servlet映射到的URL中也可以使用 * 通配符,但是只能有两种固定的格式:
      一种格式是“*.扩展名”,另一种格式是以正斜杠(/)开头并以“/*”结尾
<servlet-mapping>
    <servlet-name>secondServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

OR

<servlet-mapping>
    <servlet-name>secondServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 
    http://localhost:8080/I/*.do
    此时最后的资源名只要后缀是.do就可以了,访问的流程和上面一样
   -->

注意: 以下的既带 / 又带扩展名的不合法.

<servlet-mapping>
    <servlet-name>secondServlet</servlet-name>
    <url-pattern>/*.action</url-pattern>
</servlet-mapping>


ServletConfig

封装了Serlvet的配置信息,并且可以获取ServletContext对象

  1. 配置Serlvet的初始化参数
<servlet>
        <servlet-name>helloServlet</servlet-name>
        <servlet-class>com.atguigu.javaweb.HelloServlet</servlet-class>
        
        <!-- 配置 Serlvet 的初始化参数。 且节点必须在 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>
        
        <load-on-startup>-1</load-on-startup>
        
    </servlet>

  1. 获取初始化参数
    getInitParameter(String name): 获取指定参数名的初始化参数
    > getInitParameterNames(): 获取参数名组成的 Enumeration 对象. 
    
    String user = servletConfig.getInitParameter("user");
    System.out.println("user: " + user);
    
    Enumeration<String> names = servletConfig.getInitParameterNames();
    while(names.hasMoreElements()){
        String name = names.nextElement();
        String value = servletConfig.getInitParameter(name);
        System.out.println("^^" + name + ": " + value);
    }

ServletContext

  1. 可以由 SerlvetConfig 获取:
    ServletContext servletContext = servletConfig.getServletContext();
  2. 该对象代表当前 WEB 应用:
    • 可以认为 SerlvetContext 是当前 WEB 应用的一个大管家. 可以从中获取到当前 WEB 应用的各个方面的信息.
  3. 获取当前应用的初始化参数
    • 设置初始化参数: 可以为所有的 Servlet 所获取, 而 Servlet 的初始化参数只用那个 Serlvet 可以获取.
<!-- 配置当前 WEB 应用的初始化参数 -->
<context-param>
    <param-name>driver</param-name>
    <param-value>com.mysql.jdbc.Driver</param-value>
</context-param>

方法:

getInitParameter
getInitParameterNames   

代码:

ServletContext servletContext = servletConfig.getServletContext();
        
String driver = servletContext.getInitParameter("driver");
System.out.println("driver:" + driver);

Enumeration<String> names2 = servletContext.getInitParameterNames();
while(names2.hasMoreElements()){
    String name = names2.nextElement();
    System.out.println("-->" + name); 
}

  1. 获取当前WEB应用的某一个文件的绝对路径
    • 获取当前 WEB 应用的某一个文件在服务器上的绝对路径, 而不是部署前的路径
    • getRealPath(String path);
    • 代码:
String realPath = servletContext.getRealPath("/note.txt");
System.out.println(realPath);
  1. 获取当前WEB应用的名称
    • getContextPath()
    • 代码:
String contextPath = servletContext.getContextPath();
System.out.println(contextPath); 
  1. 获取当前WEB应用的某一个文件对应的输入流
    • getResourceAsStream(String path): path 的 / 为当前 WEB 应用的根目录.
    • 代码
InputStream is2 = servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties");
  1. 和 attribute 相关的几个方法

相关文章

  • 00-Servlet

    开发动态项目 把开发选项切换到 JavaEE 可以在 Window -> Show View 中找到 Packag...

网友评论

      本文标题:00-Servlet

      本文链接:https://www.haomeiwen.com/subject/zybjsftx.html