• Servlet基本用法(一)基本配置


    一、前言

      Java Servlet是一个基于Java技术的Web组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容。Servlet是平台独立的Java类,编写一个Servlet实际上就是按照Servlet规范编写一个Java类。

      Servlet运行需要一个运行环境,即需要一个Servlet容器,这里我们使用Tomacat。Tomcat作为一个Web服务器,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器。

    二、Tomcat的安装与配置

      安装Tomcat之前要先下载JDK并配置好环境变量,然后访问http://tomcat.apache.org/,下载最新版Tomcat压缩包,解压缩后目录结构为如下图所示

      

      进入目录/bin,双击startup.bat文件,即可启动Tomcat。启动成功后,在浏览器中访问http://localhost:8080/,出现如下页面。

      

    三、使用Eclipse开发Servlet

      在使用Eclipse开发Servlet之前,要先将Tomcat源文件导入Eclipse中,步骤如下:

      在Eclipse界面,点击窗口菜单->首选项,选择服务器->运行时环境,再点击添加按钮,将下载的Tomcat源文件导入Eclipse中去。

      

      

      导入后,将Eclipse切换到JavaEE模式,新建一个动态Web工程,整个工程的目录如下:

      

      实现一个helloWord例子。

      方式一:通过实现Servlet接口来编写Servlet类,需要实现接口中定义的5个方法,代码如下:

     1 package day_052102;
     2 import java.io.IOException;
     3 import java.io.PrintWriter;
     4 import javax.servlet.Servlet;
     5 import javax.servlet.ServletConfig;
     6 import javax.servlet.ServletException;
     7 import javax.servlet.ServletRequest;
     8 import javax.servlet.ServletResponse;
     9 /*
    10  这里通过实现Servlet接口来编写一个简单的Servlet
    11  */
    12 public class ServletDemo implements Servlet
    13 {
    14     public void init(ServletConfig config) throws ServletException
    15     {
    16     }
    17     public ServletConfig getServletConfig()
    18     {
    19         
    20         return null;
    21     }
    22     public String getServletInfo()
    23     {
    24         return null;
    25     }
    26     public void destroy()
    27     {
    28     }
    29     public void service(ServletRequest req, ServletResponse res)
    30             throws ServletException, IOException
    31     {
    32         PrintWriter out=res.getWriter();
    33         out.print("hello World!");
    34         out.close();
    35     }
    36 }

      然后进行web.xml的配置,代码如下:

    <servlet>
         <servlet-name>ServletDemo</servlet-name>
         <servlet-class>day_052102.ServletDemo</servlet-class>
     </servlet>
     <servlet-mapping>
         <servlet-name>ServletDemo</servlet-name>
         <url-pattern>/ServletDemo</url-pattern>
     </servlet-mapping>

      点击运行按钮,启动tomacat服务器,然后在浏览器中输入http://localhost:8080/day_052102/ServletDemo,即可进行实现页面显示hello World的示例。结果如下。

      

      方式二:继承抽象类GenericServlet,该类定义了一个通用的Servlet。

    public abstract class GenericServlet implements Servlet, ServletConfig, java.io.Serializable

      代码示例实现hellWord如下:

    public class GenericServletDemo extends GenericServlet
    {
    
        @Override
        public void service(ServletRequest req, ServletResponse res)
                throws ServletException, IOException
        {
            PrintWriter out=res.getWriter();
            out.println("hello World!");
            out.close();
            
        }
    
    }

      方式三:通过继承抽象的HttpServlet类,此类继承于GenericServlet类。

      PS:HttpServlet类中没有抽象的方法。这个类重写了service方法,它会根据请求的方式调用doGet或者doGet方法,部分源码如下:

    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException 
    {
            String method = req.getMethod();
            if (method.equals(METHOD_GET))   //当请求方式为GET时,调用doGet方法
            {   
                long lastModified = getLastModified(req);
                if (lastModified == -1) 
                {
                    // servlet doesn't support if-modified-since, no reason
                    // to go through further expensive logic
                    doGet(req, resp);
                } 
                else
                {
                    long ifModifiedSince;
                    try 
                    {
                        ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
                    } 
                    catch (IllegalArgumentException iae)
                    {
                        // Invalid date header - proceed as if none was set
                        ifModifiedSince = -1;
                    }
                    if (ifModifiedSince < (lastModified / 1000 * 1000))
                    {
                        // If the servlet mod time is later, call doGet()
                        // Round down to the nearest second for a proper compare
                        // A ifModifiedSince of -1 will always be less
                        maybeSetLastModified(resp, lastModified);
                        doGet(req, resp);
                    }
                    else
                    {
                        resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
                    }
                }
            }

      如果在自己写的类中重写了service方法,那么Servlet容器就会把请求交给你重写的service方法处理。

    public class HttpServletDemo extends HttpServlet
    {
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException
        {
            PrintWriter out=resp.getWriter();
            out.println("hello!");
            out.close();
        }
    }
  • 相关阅读:
    BZOJ1316——树上的询问(点分治)
    BZOJ2152——聪聪可可(点分治)
    POJ1741(点分治)
    POJ2104——K-th Number (主席树模板)
    USACO Training Section 5.1 Fencing the Cows 圈奶牛(凸包)
    POJ1269(直线之间的关系)
    NOIP2016——换教室(floyd+期望dp)
    POJ2187(旋转卡壳)
    POJ3348——Cows(求凸包)
    ZOJ1081(射线法判断点是否在多边形内部)
  • 原文地址:https://www.cnblogs.com/xujian2014/p/Servlet.html
Copyright © 2020-2023  润新知