• Java Web学习总结(2)Servlet(一)


    一,Servlet 简介

    Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

    使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

    Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于 CGI,Servlet 有以下几点优势:

    1,性能明显更好。

    2,Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。

    3,Servlet 是独立于平台的,因为它们是用 Java 编写的。

    4,服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。

    5,Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。

    二,Servlet的运行过程

    Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:

      Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第步,否则,执行第步。

      装载并创建该Servlet的一个实例对象。

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

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

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

    1,init()方法

    init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化。

    Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,但是也可以指定 Servlet 在服务器第一次启动时被加载。

    当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。

    init 方法的定义如下:

    public void init() throws ServletException {
      // 初始化代码...
    }

    2,service()方法

    service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。

    每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。

    service()方法定义如下:

    public void service(ServletRequest request, 
                        ServletResponse response) 
          throws ServletException, IOException{
    }

    service() 方法由容器调用,service 方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。所以,您不用对 service() 方法做任何动作,只需要根据来自客户端的请求类型来重写 doGet() 或 doPost() 即可。

    3,doGet() 方法

    GET 请求来自于一个 URL 的正常请求,或者请求来自于一个特别指定了 method 为 GET的 HTML 表单,它由 doGet() 方法处理。

    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)
        throws ServletException, IOException {
        // Servlet 代码
    }

    4,doPost() 方法

    POST 请求来自于一个特别指定了 METHOD 为 POST 的 HTML 表单,它由 doPost() 方法处理。

    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)
        throws ServletException, IOException {
        // Servlet 代码
    }

    5,destroy() 方法

    destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

    在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。

    destroy 方法定义如下所示:

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

    三,Eclipse中开发Servlet

    在eclipse中新建一个Dynamic web project工程

    下一步

    下一步

    eclipse会自动创建下图所示目录结构:

    创建一个HelloServlet类,继承HttpServlet,但是报错,这是由于没有关联servlet-api.jar

    解决方法:

    第一步:配置Tomcat服务器:Window-->Preferences-->Server-->RuntimeEnvironm-->add

    选择Apache下的Tomcat7,下一步

    点击Finish完成

    完成后如图所示,已经配置好一个Tomcat了

    第二步:项目关联刚才配置好的Tomcat服务器

    右键单击项目-->Preferences-->Java Build Path-->Add library

    选择Server Runtime,下一步

    选择刚才配置的Apache Tomcat v7.0,点击Finish完成

    这样就不会报错了。

    重写doGet,doPost方法:

    import java.io.IOException;
    import java.io.PrintWriter;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    public class HelloServlet extends HttpServlet{
     
        private static final long serialVersionUID = 3903946972744326948L;
        
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doPost(req, resp);
        }
        
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //设置编码格式,否则中文会出现乱码
            resp.setCharacterEncoding("GBK");
            PrintWriter out = resp.getWriter();
            out.println("Hello Servlet!");
            out.println("你好 Servlet!");
        }
    }

    修改web.xml,添加<servlet></servlet><servlet-mapping></servlet-mapping>两对标签

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>ServletDemo</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      
      <servlet>
        <servlet-name>HelloServlet</servlet-name><!-- servlet名称 -->
        <servlet-class>com.zender.servlet.HelloServlet</servlet-class><!-- servlet关联的类 -->
      </servlet>
      <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello.html</url-pattern><!-- servlet访问路径 -->
      </servlet-mapping>
    </web-app>

    四,Eclipse中运行项目

    控制台选择Servers-->点击如下图红框内容

    添加New Server

    把刚才创建的web项目添加到Configured,点击Finish完成

    这样Tomcat服务器内已经部署上了ServletDemo的Web项目

    右键单击Tomcat v7.0-->start

    如图所示,Tomcat启动成功

    浏览器访问:http://localhost:8081/ServletDemo/hello.html

  • 相关阅读:
    mybatis框架-用类映射返回结果
    ArrayLLis 线程不安 实验
    快速求幂运算笔记
    nyoj 56 阶乘中素数的个数
    求正整数n所有可能的和式的组合(如;4=1+1+1+1、1+1+2、1+3、2+1+1、2+2
    synchronize学习
    nyoj 找球号三(除了一个数个数为基数,其他为偶数,编程之美上的)
    递归判断一个数是否递增
    快速排序c++
    x&-x
  • 原文地址:https://www.cnblogs.com/Zender/p/7596921.html
Copyright © 2020-2023  润新知