zoukankan      html  css  js  c++  java
  • Servlet的生命周期和三种实现方式

    因项目需要,今天开始学习Servlet。


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


    下面开始讲述了开发servlet的流程,因为利用eclipse开发servlet非常容易但它隐藏了很多细节,所以这里先使用JCreator来开发。


    开发流程:
    第一步:创建一些必须的文件夹和文件
    在%TOMCAT_HOME%webapps下新建一个myWebSite文件夹用来存放我们的工程文件,在此文件夹中新建WEB-INF文件夹,并在WEB-INF文件夹下新建classes和lib子文件夹(classes用来存放Java的类文件,lib用来存放相关的库文件),并新建一个命名为web.xml的文件(web.xm;是部署文件)。

    第二步:开发servlet(引入servlet-api.jar)

    在JCreator中新建一个Java类输入下面代码并编译

    /**
     * @(#)Hello.java
     *
     *实现servlet的第一种方式(使用实现servlet接口的方式)
     * @author 
     * @version 1.00 2017/2/22
     */
    package com.chongqing;
    
    import javax.servlet.*;
    import java.io.*;
    
    public class Hello implements Servlet{
    
    	//该函数用于初始化该servlet(类似于类的构造函数)
    	//该函数只会被调用一次(当用户第一次访问该servlet是被调用)
    	public void init(ServletConfig parm1) throws ServletException{
    		System.out.println ("init it");		
    		}
    		
    	public ServletConfig getServletConfig(){
    		return null;
    		}
    		
    	//这个函数用于处理业务逻辑,程序员应当把业务逻辑代码写在这里
    	//当用户没访问servlet时都会调用
    	//req:用于获得客户端(浏览器)时的信息
    	//res:用于向客户端(浏览器)返回信息
    	public void service(ServletRequest req,ServletResponse res ) throws ServletException{
    	
    		System.out.println ("service it");	
    		
    		try {
    			
    			//从res中得到PrintWriter
    			PrintWriter pw = res.getWriter();
    			pw.println("Hello World!");
    			
    		}catch (Exception ex) {
    			ex.printStackTrace();
    		}
    		
    		}
    		
    	public String getServletInfo(){
    		
    		return "";
    		}
    		
    	//销毁servlet实例(释放内存)
    	//1.reload该serlvet(webapp)2.关闭Tomcat  3.关机	
    	public void destroy(){
    		System.out.println ("destroy!");
    		}
    }


    第三步:部署servlet

    在web.xml文件中输入下面代码

    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    
    <web-app >
    
        <description>
          Servlet and JSP Examples.
        </description>
        <display-name>Servlet and JSP Examples</display-name>
    
    
    
        <!-- JSPC servlet mapping start -->
    
        <servlet>
        	<!--给你的servlrt取名,任意的-->
          <servlet-name>hello</servlet-name>
          <!--指明servlet的路径,(包名+类名)-->
          <servlet-class>com.chongqing.Hello</servlet-class>
        </servlet>
        
        <servlet-mapping>
        		<!--给你的servlrt取名,任意的-->
            <servlet-name>hello</servlet-name>
            <!--这是在浏览器中输入的访问该servlet的url-->
            <url-pattern>/zero</url-pattern>
        </servlet-mapping>
        
       
       <!--JSPC servlet mappings end -->
    
    </web-app>
    
    第四步:启动Tomcat访问servlet,用浏览器输入网址http://127.0.0.1:8080/myWebSite/zero即可看到显示的内容



    可以看出init方法只在被创建的时候调用了一次,service方法则被调用了多次。


    下面是实现servlet的另外两种方式

    /**
     * @(#)HelloGen.java
     *
     *开发servlet的第二种方法(继承GenericServlet的方式)
     * @author 
     * @version 1.00 2017/2/22
     */
    package com.chongqing;
    
    import javax.servlet.GenericServlet;
    import java.io.*;
    
    public class HelloGen extends GenericServlet {
        
        //重写service方法即可
        public void service(ServletRequest req,ServletResponse res){
    		
        		//返回HelloWorld!generic
        		try {
    					PrintWriter pw = res.getWriter();
    					pw.println("HelloWorld!generic");
    			}
    			catch (Exception ex) {
    				ex.printStackTrace();
    			}
        	}
    }


    /**
     * @(#)HelloGen.java
     *
     *开发servlet的第三种方法(继承HttpServlet的方式)
     * @author 
     * @version 1.00 2017/2/22
     */
    package com.chongqing;
    
    import javax.servlet.http.*;
    import java.io.*;
    
    public class HelloHttp extends HttpServlet {
        
        //处理get请求
        public void doGet(HttpServletRequest req,HttpServletResponse res){
    		
        		//
        		try {
    					PrintWriter pw = res.getWriter();
    					pw.println("HelloWorld!Http");
    			}
    			catch (Exception ex) {
    				ex.printStackTrace();
    			}
        	}
        	
        public void doPost(HttpServletRequest req,HttpServletResponse res){
        	
        	this.doGet(req,res);
        }
    }

    在web.xml添加新的Servlet部署就可以了

    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    
    <web-app >
    
        <description>
          Servlet and JSP Examples.
        </description>
        <display-name>Servlet and JSP Examples</display-name>
    
    
    
        <!-- 第一个Servlet -->
    
        <servlet>
        	<!--给你的servlrt取名,任意的-->
          <servlet-name>hello</servlet-name>
          <!--指明servlet的路径,(包名+类名)-->
          <servlet-class>com.chongqing.Hello</servlet-class>
        </servlet>
        
        <servlet-mapping>
        		<!--给你的servlrt取名,任意的-->
            <servlet-name>hello</servlet-name>
            <!--这是在浏览器中输入的访问该servlet的url-->
            <url-pattern>/zero</url-pattern>
        </servlet-mapping>
    	
    	    <!-- 第二个Servlet -->
    		
    	<servlet>
        	<!--给你的servlrt取名,任意的-->
          <servlet-name>hellogen</servlet-name>
          <!--指明servlet的路径,(包名+类名)-->
          <servlet-class>com.chongqing.HelloGen</servlet-class>
        </servlet>
        
        <servlet-mapping>
        		<!--给你的servlrt取名,任意的-->
            <servlet-name>hellogen</servlet-name>
            <!--这是在浏览器中输入的访问该servlet的url-->
            <url-pattern>/hellogen</url-pattern>
        </servlet-mapping>
    
    	    <!-- 第三个Servlet -->
    		
    	<servlet>
        	<!--给你的servlrt取名,任意的-->
          <servlet-name>hellohttp</servlet-name>
          <!--指明servlet的路径,(包名+类名)-->
          <servlet-class>com.chongqing.HelloHttp</servlet-class>
        </servlet>
        
        <servlet-mapping>
        		<!--给你的servlrt取名,任意的-->
            <servlet-name>hellohttp</servlet-name>
            <!--这是在浏览器中输入的访问该servlet的url-->
            <url-pattern>/hellohttp</url-pattern>
        </servlet-mapping>
    
        
       
       <!--JSPC servlet mappings end -->
    
    </web-app>
    



  • 相关阅读:
    服务端获取实际IP工具类
    vue-element-admin整合服务端代理api
    elemengui分页
    vue获取浏览器地址栏参数
    el-table-column动态判断显示性别男女
    nginx代理静态页面添加二级目录
    nginx配置代理指向Redis
    SpringBoot整合Redis日志反复提示Redis重连问题
    centos7安装Redis
    nohup启动jar包
  • 原文地址:https://www.cnblogs.com/yzy-blogs/p/6597326.html
Copyright © 2011-2022 走看看