Java Web学习之路--Servlet初识

从今天开始我们算是正式开始代码部分了了。

Servlet是什么?

Servlet全称Java Servlet,是一种用Java编写的服务器端程序。Servlet由服务器调用,运行在服务器端。**Servlet的主要功能在于交互式的浏览和修改数据,生成动态Web内容。**比如网上聊天、评论这些交互功能。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类。

Servlet的作用:

Servlet既然是接口,那么它就是起到规范作用。
Servlet接口定义的是一套处理网络请求的规范,所有实现Servlet的类,都需要实现它的五个方法。
在这里插入图片描述
其中最重要的是两个生命周期方法 init()和destory(),还有一个处理请求的service(),因此所有实现Servlet接口的类,或者说,所有想要处理网络请求的类,都需要回答这三个问题:

  • 初始化时做什么?
  • 销毁时做什么?
  • 接受到请求时做什么?

通过Web服务器映射的URL访问资源,需要经历三个过程:

  • 接受请求
  • 处理请求
  • 响应请求

那么Servlet能直接处理请求吗?
答案是,不能。

Servlet是不会直接和客户端打交道的,Tomcat才是那个和客户端直接打交道的家伙
Tomcat监听了端口,请求过来后,根据URL等信息,确定要将请求交给哪个Servlet去处理,然后调用那个Servlet的service(),service()会返回一个response对象,Tomcat再把这个response返回给客户端。

Servlet带给我们的最大的作用就是能够处理浏览器带来的HTTP请求,并返回一个响应给浏览器,从而实现浏览器的服务器的交互。

Servlet的实现:

创建Myservlet类,实现Servlet接口。

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class Myservlet implements Servlet {
/*
 * Serclet配置
 * (non-Javadoc)
 * @see javax.servlet.Servlet#getServletConfig()
 */
	@Override
	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		return null;
	}
/*
 * Servlet信息
 * (non-Javadoc)
 * @see javax.servlet.Servlet#getServletInfo()
 */
	@Override
	public String getServletInfo() {
		// TODO Auto-generated method stub
		return null;
	}
/*
 * 初始化
 * (non-Javadoc)
 * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
 */
	@Override
	public void init(ServletConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}
/*
 * 服务
 * (non-Javadoc)
 * @see javax.servlet.Servlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
 */
	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
	}
	
/*
 * 销毁
* (non-Javadoc)
* @see javax.servlet.Servlet#destroy()
*/
	@Override
	public void destroy() {
	    // TODO Auto-generated method stub
		
		
	}	
}

以我们大家熟悉的Hello World为例

	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setContentType("text/html;charset=UTF-8");//防止乱码
		PrintWriter out=response.getWriter();
		out.println("Hello World");
	}

接下来就是配置xml文件,让Tomcat知道如何调用Servlet:

  <!-- 声明Servlet对象 -->
  <servlet>
  <!-- 指定Servlet对象的名称,一般为类名 -->
  <servlet-name>Myservlet</servlet-name>
  <!-- 指定Servlet对象的完整位置,包含Servlet对象的包名和类名 -->
  <servlet-class>Servlet.Myservlet</servlet-class>
  </servlet>
  
  <!-- 映射Servlet -->
  <servlet-mapping>
  <!--与Servlet对象中保持一致-->
  <servlet-name>Myservlet</servlet-name>
  <!--用于映射访问URL,外界访问Myservlet的路径-->
  <url-pattern>/Myservlet</url-pattern>
  </servlet-mapping>

接下来就是通过浏览器访问该Servlet:
在这里插入图片描述
!!!这里提醒一下,不要从eclipse打开servlet,可能会导致service()方法被调用两次。

Servlet的生命周期:

public class Myservlet implements Servlet {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
        System.out.println("Servlet正在销毁");
	}

	@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 config) throws ServletException {
		// TODO Auto-generated method stub
        System.out.println("Servlet正在初始化");
	}

	@Override
	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	    System.out.println("Servlet正在提供服务");
	}
	
}

运行结果:

  1. 第一次访问:我们发现init()和service()方法都被调用
    在这里插入图片描述

  2. 第二次访问:相比与第一次访问,这次只调用了service()
    在这里插入图片描述

  3. 当关闭Tomcat时,destroy()被调用:
    在这里插入图片描述
    Servlet声明周期可分为5个步骤

    1.加载Servlet。Tomcat首次访问Servlet时,会创建Servlet的实例
    
    2.初始化。Servlet被实例化后,Tomcat会调用init()方法初始化这个对象
    
    3.处理服务。当浏览器访问Servlet时,Servlet会调用service()方法处理请求
    
    4.销毁。当Tomcat关闭或者检测到Servlet要从Tomcat删除的时候会自动调用destroy()方法,
      释放该实例所占用的资源。一个Servlet如果长时间不被使用的话,也会被Tomcat自动销毁
      
    5.卸载。当Servlet调用完destroy()方法后,等待垃圾回收。如果有需要再次使用这个Servlet,
      会重新调用init()方法进行初始化操作。
    **简单总结:**只要访问Servlet,service()方法就会被调用。init()只有第一次访问Servlet的时候才会被调用。destroy()只有在Tomcat关闭的时候才会被调用。
    

继承HttpServlet类编写Servlet程序:

HttpServlet类也是一个抽象类实现了service()方法并针对HTTP/1.1中定义的7种请求类型提供了相应的方法-doGet()doPost()doPut()doDelete()doHead()doTrace()doOptions() 方法。HttpServlet类已经实现了Servlet接口的所有方法,我们在使用过程中只用继承HttpServlet,重写我们需要的方法就行了。 而且HttpServlet类在原有Servlet接口上添加了一些HTTP协议处理方法,它的功能也更加强大。
HttpServlet类继承GenericServlet类。HttpServlet类、GenericServlet类、Servlet接口的关系如图:
在这里插入图片描述
HttpServlet有两个特性是GenericServlet所不具备的:

不用覆盖service方法,而是覆盖doGet或者doPost方法。在少数情况,还会覆盖其他的5个方法。
使用的是HttpServletRequest和HttpServletResponse对象。

一般我们都是重写doGet()和doPost()方法。
这里我使用的是MyEclipse2018:
在这里插入图片描述

在这里插入图片描述
创建完成后会自动配置好XML文件,我们直接使用就好了!

参考:
https://blog.csdn.net/qq_19782019/article/details/80292110
servlet的本质是什么,它是如何工作的? - 柳树的回答 - 知乎
servlet的本质是什么,它是如何工作的? - bravo1988的回答 - 知乎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值