Servlet 1:Servlet类

※ 1. 什么是servlet
servlet其实就是java里面一种java类,只不过这种java类有一些特殊的作用,所以我们就叫它servlet

※ 2. servlet的作用
可以让浏览器直接通过一个路径去访问。(一般的java类是做不到这一点的)
定义标准(处理浏览器提交的请求并且回写资源给浏览器的类)
※ 3. 怎么写一个类,能成为一个servlet
三种方式:
a.实现一个接口:javax.servlet.Servlet
b.继承一个抽象类:javax.servlet.GenericServlet
c.继承一个抽象类javax.servlet.http.HttpServlet
这种是之后一直要用的方法.

注意:Servlet接口中,有五个抽象方法,其实最重要的一个方法是:

service(ServletRequestreq,ServletResponse res)

A. 抽象类GenericServlet实现了接口Servlet,但是留了一个抽象方法没有实现,就是上面所提到的service方法,除此之外,GenericServlet里面还增加了一些新的方法.
B. 抽象类HttpServlet,继承了GenericServlet,但是HttpServlet中没有任何抽象方法,除了从父类继承过来的方法之外,里面还有很多新的方法:doXxx方法,另外需要注意的是,HttpServlet里面有俩个service方法,但是俩个方法的参数类型不同.

i.Servlet接口中的service方法.
因为无论我们使用哪一种方式去写出来的一个servlet类的中,一定会有一个方法叫做service,这个方法是Servlet接口中的定义的,tomcat服务器接收到客户端请求后,帮我们调用servlet中的方法的时候,它只会调用这一个service方法.
注意这个service方法中参数的类型:

  service(ServletRequestreq,ServletResponse res)

ii.GenericServlet中的俩个init方法
带参数的init(ServletConfig config)方法是从Servlet接口中实现的,还有一个是这个类直接定义的,无参的init()方法.
tomcat服务器创建servlet对象的时候,会帮我们去调用init(ServletConfig config)进行servlet类中的初始化工作,所以如果我们想在servlet类中初始化自己的一些相关数据的话,需要去重写这个init方法。有参数的init方法中调用了无参的init方法,所以将来我们只需要重写这个无参的init方法就可以了。这样我们就不需要再专门对这个init(ServletConfig config)方法中的参数进行处理了。

iii.HttpServlet中的俩个service方法
a. 这个是从Servlet接口中实现的方法.

service(ServletRequest req, ServletResponse res){
	    //强转参数类型
	    HttpServletRequest request = (HttpServletRequest)req;
	    HttpServletResponse response = (HttpServletResponse)res;
	    
	    //调用新定义的service方法
	    service(request,response);
		
	}

b. HttpServlet中新定义的方法

service(HttpServletRequest req, HttpServletResponse resp){
	   //拿到当前请求的类型 get/post
	   String method = req.getMethod();
	   
	   //判断请求的方法 然后去调用doXxx方法
           if(method.equals("GET")){
		doGet(req,resp);
	   }
	   if(method.equals("POST")){
		doPost(req,resp);
	   }
	   ...
	   ..
	}
	http://ip:port/项目名字/资源路径
	
	http://127.0.0.1:8002/web_test/servlet1

※ Servelt & GenericServlet & HttpServlet
在这里插入图片描述
※ 4. 直接构建servlet类
在Eclipse的web项目中可以直接构建servlet类

package com.briup.web.Servelt;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 注解等价于web.xml的配置
 * 
 * 注解,Tomcat启动项目的时候会自动扫描所有Servlet文件,
 * 有注解会把注解和类关联记录
 * loadOnStartup该servlet对象随Tomcat启动而创建,
 * 值表示创建的优先级,值越小越先创建(负数是第一次访问时创建(默认情况))
 */
//@WebServlet("/FourSer")
//两个启动名字对应一个Servlet
//@WebServlet(urlPatterns={"/FourSer","/FS"})
@WebServlet(urlPatterns={"/FourSer","/FS"},name="fourTT",loadOnStartup=2)
public class FourServiet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public FourServiet() {
       System.out.println("FourServiet create");
        // TODO Auto-generated constructor stub
    }
    @Override
    public void init() throws ServletException {
    	// TODO Auto-generated method stub
    	System.out.println("init......");
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("service....");
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
   private void destory() {
	// TODO Auto-generated method stub
     System.out.println("destroy....");
}
}

※ 5. servlet的生命周期
servlet的对象是单例:在web项目整个运行期间,每一个servlet类只会有一个对象存在.默认情况下,这一个对象是在servlet第一次被访问的时候才会创建的,而且之后不管再访问多少次这个servlet,也不会再去创建它的的对象的.(我们可以设置某一个servlet的对象在服务器启动的时候就被创建出来)

这些操作(方法的调用)都是由服务器来做的:
1.默认情况下,第一次被访问的时候tomcat创建servlet对象(调用无参构造器)
2.tomcat调用init(ServletConfig config)方法
在servlet对象实例化之后,tomcat服务器会立马调用这个方法给servlet的实例进行初始化工作。
3.客户端访问的时候,tomcat会调用service(ServletRequest req,ServletResponse res)方法
4.在销毁servlet对象的时候会tomcat调用destroy()方法.

通过web.xml文件中设置,可以让servlet的对象是在服务器启动的时候被创建出来.

web.xml:
	  <servlet>
		 <servlet-name>LifeServletTest</servlet-name>
		 <servlet-class>com.briup.servlet.LifeServletTest</servlet-class>
		 <load-on-startup>1</load-on-startup>
	 </servlet>

加入<load-on-startup>标签,表示这个servlet需要在启动服务器的时候就被创建对象.其中,标签可以要放一个数字,这个数字的大小就决定了多个servlet对象被创建的顺序,数字越小越先创建.(如果我们配置了多个servlet在启动服务器的时候被创建对象的话)

package com.briup.web.Servelt;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 注解等价于web.xml的配置
 * 
 * 注解,Tomcat启动项目的时候会自动扫描所有Servlet文件,
 * 有注解会把注解和类关联记录
 * loadOnStartup该servlet对象随Tomcat启动而创建,
 * 值表示创建的优先级,值越小越先创建(负数是第一次访问时创建(默认情况))
 */
//@WebServlet("/FourSer")
//两个启动名字对应一个Servlet
//@WebServlet(urlPatterns={"/FourSer","/FS"})
@WebServlet(urlPatterns={"/FourSer","/FS"},name="fourTT",loadOnStartup=2)
public class FourServiet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * 1.Servlet是单例对象,整个Tomcat运行阶段只有一个对象,
     * 默认情况第一次访问的时候调用无参构造器创建对象
     * 如果在web.xml文件中配置类标签<load-on-startup>该对象的Servlet会
     * 随着Tomcat的启动创建
     * 2.构建对象之后调用init方法初始化
     * 3.直接调用service方法,
     * 传入封装好的ServletRequest对象和ServletResponse对象
     * 4.Tomcat正常关闭的时候,调用destory方法
     */
    public FourServiet() {
       System.out.println("FourServiet create");
        // TODO Auto-generated constructor stub
    }
    @Override
    public void init() throws ServletException {
    	// TODO Auto-generated method stub
    	System.out.println("init......");
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("service....");
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
   private void destory() {
	// TODO Auto-generated method stub
     System.out.println("destroy....");
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值