zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    UVA 11925 Generating Permutations 生成排列 (序列)
    UVA 1611 Crane 起重机 (子问题)
    UVA 11572 Unique snowflakes (滑窗)
    UVA 177 PaperFolding 折纸痕 (分形,递归)
    UVA 11491 Erasing and Winning 奖品的价值 (贪心)
    UVA1610 PartyGame 聚会游戏(细节题)
    UVA 1149 Bin Packing 装箱(贪心)
    topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)
    UVA 1442 Cave 洞穴 (贪心+扫描)
    UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)
  • 原文地址:https://www.cnblogs.com/Zender/p/7596921.html
Copyright © 2011-2022 走看看