• Servlet和JSP学习指导与实践(一):Servlet API初探


    前言:

      JavaSE如何跨度到JavaEE?原本java语言只是专门用于application桌面小应用程序的开发,但自从其追随CGI进入服务器端的开发之后便一发不可收拾。先是Servlet1.0,再是2.0,然后又3.0 ... 之后,各种基于Web的框架发展迅猛,Spring,Struts,Struts2等等。从事Java的人不少都是从jsp开始,甚至从框架开始,但却不知Servlet为何物?本系列将专门讲述Java Web的始祖---“Servlet”(会讲述JSP相关内容,但其实JSP也是Servlet)。

    ----------------------------------------------------

    Part1:Servlet主要API介绍:

      讲述Servlet,让我们从javax.servlet,javax.servlet.http两个package中的接口和类开始。请看下面的UML简图:

    图1

      图2

      其中,“Servlet”接口是任何Servlet必须直接或间接实现的接口!其常见的有init(),service(),destroy()三个方法,还有不是很常用的方法getServletInfo()和getServletConfig()。一般而言,service()是我们自定义Servlet是执行重点的业务操作,而init()和destroy()一个发生在Servlet初始时调用,一个发生在Servlet销毁时调用!

      request,response可以说是Web应用中最常见的2个变量。通过追根溯源我们从上面的UML可以知道它们源自ServletRequest和ServletResponse接口。只不过很多时候我们见到的request已经被不少中间类经过不只一层的包装。比如:HttpServletRequest,或者struts中的Map<String,Object> request等。

      作为入门篇,我们暂时不往内深究,就此打住。下面通过一个小实例,让我们熟悉一下实现一个基本的Servlet需要哪些步骤。

    • Step1:

      新建"Web Project",必须含有JavaEE相关jar包;

    • Step2:

      新建Java类,并实现Servlet接口或者继承GenericServlet类。

      重写service()方法,打印html语句。

    • Step3:

      通过注解方式部署或者通过部署文件“web.xml”部署。

    ----------------------------------------

    Part2: 实例app01a

    方式一:实现Servlet接口

    Code:

    package app01a;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.Servlet;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebServlet;
    
    //@WebServlet(name = "myServlet", urlPatterns = { "/My", "/Your" })
    public class MyServlet implements Servlet {
    
        @Override
        public void destroy() {
            System.out.println("--destroy--");
        }
    
        @Override
        public ServletConfig getServletConfig() {
            // TODO Auto-generated method stub
            return null;
        }
    
        @Override
        public String getServletInfo() {
            // TODO Auto-generated method stub
            return null;
        }
    
        @Override
        public void init(ServletConfig arg0) throws ServletException {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void service(ServletRequest request, ServletResponse response)
                throws ServletException, IOException {
    
            PrintWriter out = response.getWriter();
            out.print("<html><head></head><body>" + "Hello servlet! "
                     + "</body></html>");
    
        }
    
    }

    部署文件:web.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app version="2.5" 
     3     xmlns="http://java.sun.com/xml/ns/javaee" 
     4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
     7     
     8     <servlet>
     9         <servlet-name>myServlet</servlet-name>
    10         <servlet-class>app01a.MyServlet</servlet-class>
    11     </servlet>
    12     
    13     <servlet-mapping>
    14         <servlet-name>myServlet</servlet-name>
    15         <url-pattern>/My</url-pattern>
    16     </servlet-mapping>
    17 </web-app>

    项目文件布局:

    测试结果:

    方式二:继承GenericServlet类

    Code

     1 package app01a;
     2 
     3 import java.io.IOException;
     4 import java.io.PrintWriter;
     5 
     6 import javax.servlet.GenericServlet;
     7 import javax.servlet.ServletException;
     8 import javax.servlet.ServletRequest;
     9 import javax.servlet.ServletResponse;
    10 import javax.servlet.annotation.WebServlet;
    11 
    12 @WebServlet(name="MyServletWithGeneric",urlPatterns={"/MyGeneric"})
    13 public class MyServletWithGeneric extends GenericServlet {
    14 
    15     @Override
    16     public void service(ServletRequest request, ServletResponse response)
    17             throws ServletException, IOException {
    18 
    19         PrintWriter out = response.getWriter();
    20         out.print("<html><head></head><body>" + "Servlet extends GenericServlet! "
    21                  + "</body></html>");
    22 
    23     }
    24 
    25 }

    测试结果:

    ------------------------

    注意:实现本文例子的前提是已经安装好tomcat!若没有tomcat环境,下载地址 http://tomcat.apache.org

  • 相关阅读:
    TOMCAT源码分析(转)
    CSS从零开始(1)--CSS基础语法
    java生成验证码
    [转]java中作用域public private protected 以及不写的区别
    Java Socket NIO详解(转)
    mysql数据库单表只有一个主键自增id字段,ibatis实现id自增
    手机验证码执行流程
    javaweb之Filter过滤器详解
    HttpSessionListener的用法
    SpringContextHolder 静态持有SpringContext的引用
  • 原文地址:https://www.cnblogs.com/SeaSky0606/p/4769765.html
Copyright © 2020-2023  润新知