学习笔记——JavaWeb Servelt

来源:互联网 发布:海岛奇兵兵种升级数据 编辑:程序博客网 时间:2024/06/10 08:28

学习笔记——JavaWeb Servelt


1.什么是Servlet

如果说JaveWeb程序是一块手表,那么Servlet就是其中齿轮。一个个Servlet实现程序中的不同功能,最终构成整个程序。在MVC设计模式中,Model是JavaBean,View是Jsp页面,而Controller就是Servlet。同时,Jsp的前身就是Servlet。Jsp页面是通过Servlet的“制作”出来的。

可以说,Servlet是在服务器上运行的小程序。一个Servlet就是一个Java类,并且可以通过请求-响应编程模型来访问的驻留在服务器内存里的Servlet程序。


2.Servlet的生命周期

Servlet的生命周期如下:
装载—》初始化init()—》service()-》终止destroy()。

装载:

所有的Servlet都从装载入服务器开始。

装载有三种情况:

1.使用<loadon-startup>标签设置服务器启动时加载。

2.在serlvet被访问时加载。

3.当servlet文件被修改时,服务器自动加载。


Tip:

第一种情况下,须在web.xml中添加如下代码,其中<loadon-startup>标签中的数值越小,装载的优先度越高。

  <servlet>        <servlet-name>MyFirstServlet</servlet-name>        <servlet-class>servlet.MyFirstServlet</servlet-class>        <load-on-startup>1</load-on-startup>    </servlet>



初始化init:

装载之后,自动运行init方法,该方法只运行一次,用于初始化其中的servlet中的一些变量。
public void init() throws ServletException {  // 初始化代码...}


service:

service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
public void service(ServletRequest request,                     ServletResponse response)       throws ServletException, IOException{}


终止destroy:

destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。
在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。destroy 方法定义如下所示:

 public void destroy() {    // 终止化代码...  }



3.如何编写一个Servlet

1.继承HttpServlet

public class HelloServlet extends HttpServlet

2.重写doGet()或者doPost()方法

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{//你的代码}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{//你的代码}

3.在web.xml中注册Servlet

    <servlet>        <servlet-name>MyFirstServlet</servlet-name>        <servlet-class>servlet.MyFirstServlet</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>MyFirstServlet</servlet-name>        <url-pattern>/servlet/MyFirstServlet</url-pattern>    </servlet-mapping>

或者使用注释注册Servlet
@WebServlt(name="MyFirstServlet", urlPatterns={"/servlet/MyFirstServlet"})public class MyFirstServlet extends HttpServlet {     //你的代码}

web.xml中的urlPattern和注释中的urlPatterns中的链接地址,是servlet在服务器中的虚拟地址。最前的 / 号表示项目根目录,然后是serlvet包的MyFirstServlet类。这样,客户端就能通过这个虚拟地址访问Servlet类,并传送数据。

4.初始化Servlet参数

在web.xml中设置初始化变量
<servlet>        <servlet-name>MyFirstServlet</servlet-name>        <servlet-class>servlet.MyFirstServlet</servlet-class>        <init-param>            <param-name>变量名</param-name>            <param-value>变量值(之后在serlvet中获取到的是String对象)</param-value>        </init-param>    </servlet>

在注释中设置初始化变量
@WebServlet(        displayName = "MyFirstServlet" , //描述          name = "MyFirstServlet", //servlet名称          urlPatterns = { "/servlet/MyFirstServlet" }, //url        initParams = { @WebInitParam(name = "username", value = "张三") ,@WebInitParam(name="password", value="123")})//初始化参数  
获取初始化变量
public class MyFirstServlet extends HttpServlet {    private String username;    private String password;    @Override        public void init(ServletConfig config) throws ServletException {               //获取初始化信息:               username = config.getInitParameter("username");        password = config.getInitParameter("password");    }}  


0 0