JavaWeb学习之Servlet

来源:互联网 发布:studded mac 编辑:程序博客网 时间:2024/03/29 08:09

 

本人是职场新手,想用记录博客的方式给自己的学习之路做点笔记,若有不对还望指正!**

Servlet 生命周期的方法: 以下方法都是由 Serlvet 容器负责调用.

1). 构造器: 只被调用一次. 只有第一次请求 Servlet 时, 创建 Servlet 的实例. 调用构造器. 这说明 Serlvet 的单实例的! 2). init 方法: 只被调用一次. 在创建好实例后立即被调用. 用于初始化当前 Servlet.

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

4). destroy: 只被调用一次. 在当前 Servlet 所在的 WEB 应用被卸载前调用. 用于释放当前 Servlet 所占用的资源.


Servlet容器响应客户请求的过程

①Servlet引擎检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。

②装载并创建该Servlet的一个实例对象:调用该 Servlet 的构造器 

③调用Servlet实例对象的init()方法。

④创建一个用于封装请求的ServletRequest对象和一个代表响应消息的ServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。

⑤WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。


在web.xml文件中关于Servlet的一些节点

1.load-on-startup 配置在Servlet节点中,可以指定Servlet被创建的时机。

当取值为负数时,该Servlet在第一次请求是即被创建;

当取值为0或者正数时, 则在当前 WEB 应用被Serlvet 容器加载时创建实例, 且数组越小越早被创建. 

<servlet><servlet-name>secondServlet</servlet-name><servlet-class>com.atguigu.javaweb.SecondServlet</servlet-class><load-on-startup>2</load-on-startup></servlet>



2.serlvet-mapping

1). 同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping> 元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名。

2). 在Servlet映射到的URL中也可以使用 * 通配符,但是只能有两种固定的格式:一种格式是“*.扩展名”,另一种格式是以正斜杠(/)开头并以“/*”结尾。

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

或者

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

注意:错误的格式!!!既带 / 又带扩展名的不合法

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

3.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>


2).获取初始化参数:局部的初始化参数,只有当前的Servlet才能获取

>getInitParameter(String name): 获取指定参数名的初始化参数

> getInitParameterNames(): 获取参数名组成的Enumeration 对象.

String user = servletConfig.getInitParameter("user");System.out.println("user: " + user);Enumeration<String> names = servletConfig.getInitParameterNames();
while(names.hasMoreElements()){       //对Enumeration对象进行遍历String name = names.nextElement();String value = servletConfig.getInitParameter(name);System.out.println("^^" + name + ": " + value);}
3). 获取 Serlvet 的配置名称(了解)


4.ServletContext:servlet的上下文

1). 可以由  SerlvetConfig 获取:

ServletContext servletContext = servletConfig.getServletContext();

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

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

    设置初始化参数: 可以为所有的 Servlet 所获取(相当于全局变量), 而 Servlet 的初始化参数(相当于局部变量)只用那个 Serlvet 可以获取. 

<!-- 配置当前 WEB 应用的初始化参数 --><context-param><param-name>driver</param-name><param-value>com.mysql.jdbc.Driver</param-value></context-param>
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); }
②. 获取当前WEB 应用的某一个文件在服务器上的绝对路径, 而不是部署前的物理路径:getRealPath(Stringpath);
String realPath = servletContext.getRealPath("/note.txt");System.out.println(realPath);
③. 获取当前WEB 应用的名称:getContextPath()
String contextPath = servletContext.getContextPath();System.out.println(contextPath); 
④. 获取当前WEB 应用的某一个文件对应的输入流.
getResourceAsStream(String path): path 的 / 为当前 WEB 应用的根目录.
InputStream is2 = servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties");
⑤. 和 attribute 相关的几个方法;




原创粉丝点击