Servlet介绍和开发servlet的三个方法

1 servlet介绍

  • Servlet(Java服务器小程序)是用Java编写的服务器程序
  • 由服务器端调用和执行
  • 用Java编写的
  • 是jsp学习的基础
  • 是B/S结构

servlet体系结构

  1. 界面层——IE浏览器等等
  2. 逻辑层——Tomcat(web服务器,容纳和管理servlet,可以接受IE浏览器的http请求,可以返回静态网页)
  3. 数据层——数据库
    在这里插入图片描述
    工作原理:
    浏览器输入网址,发送http请求,这个请求会先被Tomcat的web服务器模块接受,然后转发给Tomcat的引擎(容器部分),会帮忙找到浏览器想要找到的访问的东西(两种可能:如果想访问数据库,就去访问数据库;如果不访问数据库,就返回静态html页面)

Servlet的生命周期:

  1. 装载servlet,由相应容器来完成
  2. 创建一个servlet实例
  3. 调用servlet的init()方法,只会在第一次访问该servlet的时候被调用一次
  4. 服务,调用servlet的service()方法,用于处理业务逻辑;只要访问servlet,该方法就会被调用
  5. 销毁,调用servlet的destroy()方法。在以下情况会被调用(a.Tomcat重启 b.reload该webapp时 c.重启电脑时)

2 开发servlet的三个方法

  • 实现servlet接口
  • 继承GenericServlet
  • 继承HttpServlet

在上一篇实现servlet的第一个例程的文章中,我们采用的是第三种,继承HTTPServlet的方法。这种方法在当下比较常用。

1) 实现servlet接口的方法

实现servlet接口的时候会有destroy(),getServletConfig(),getServletInfo() ,init(ServletConfig arg0),service(ServletRequest arg0, ServletResponse arg1)这五个函数。
init(),service(),destroy()主要会体系servlet的生命周期

ServletDemo1.java文件

import javax.servlet.*;
import java.io.*;

public class ServletDemo1 implements Servlet
{
	@Override
	//该函数用于初始化该servlet(类似类的构造函数)
	//该函数只会被调用一次(当用户第一次访问该servlet时被调用)
	public void init(ServletConfig arg0) throws ServletException 
	{
		// TODO Auto-generated method stub
		System.out.println("init函数被调用");
	}

	@Override
	//这个函数就是要得到配置信息,不是很重要
	public ServletConfig getServletConfig() 
	{
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	//也不是很重要
	public String getServletInfo() 
	{
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	//这个函数主要用于处理业务逻辑,主要用于写业务逻辑代码
	//每当用户访问该servlet是,都会被调用
	//req:用于获得客户端(浏览器)的信息
	//res:用于向客户端(浏览器)返回信息
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException 
	{
		// TODO Auto-generated method stub
		//要返回信息,所以用res,但是res没有可以直接返回的信息
		//所以要从res处获得printwrite
		PrintWriter out = res.getWriter();
		out.println("hello,word");
	}
	
	@Override
	//销毁servlet事例,即释放内存
	//在以下情况会被调用(a. Tomcat重启; b.reload该webapp时; c.重启电脑时)
	public void destroy() 
	{
		// TODO Auto-generated method stub
		System.out.println("destroy");
	}

}

web.xml文件——用户部署servlet
在…中间添加以下代码段

  <!-- 部署ServletDemo1 -->
  <servlet>
    <servlet-name>servletdemo1</servlet-name>
    <servlet-class>ServletDemo1</servlet-class>
  </servlet>

 <!-- 部署ServletDemo1d的 servlet-mapping--> 
  <servlet-mapping>
    <servlet-name>servletdemo1</servlet-name>
    <url-pattern>/servletdemo1</url-pattern>
  </servlet-mapping>

PS:这里的部署代码是加到上一篇文章的同一个web.xml文件中,和 要上下分开放。(不知道为什么要分开,我看到有些网上的说法并没有要求加,但是如果两端代码一起加入,eclipse中会报错)

2) 继承GenericServlet开发servlet

——重写service()方法

ServletDemo2.java文件

import javax.servlet.*;
import java.io.*;

public class ServletDemo2 extends GenericServlet
{
	//重写service()方法
	public void service(ServletRequest req, ServletResponse res)throws ServletException, IOException 
	{
		PrintWriter out = res.getWriter();
		out.println("hello,ServletDemo2");
	}
}

web.xml文件

  <!-- 部署ServletDemo2 -->
  <servlet>
    <servlet-name>servletdemo2</servlet-name>
    <servlet-class>ServletDemo2</servlet-class>
  </servlet>
  <!-- 部署ServletDemo2d的 servlet-mapping--> 
  <servlet-mapping>
    <servlet-name>servletdemo2</servlet-name>
    <url-pattern>/servletdemo2</url-pattern>
  </servlet-mapping>

3)继承HttpServlet——目前用得最多的一种方法

需要重写doGet、doPost方法

见上一篇。

最后的文件夹如图:
在这里插入图片描述
最后的web.xml文件应该是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC
  '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN'
  'http://java.sun.com/dtd/web-app_2_3.dtd'>
<web-app>

 <!-- 部署MyTomcatTest -->
  <servlet>
   <!--给你的的servlet起的名字,随便取(一般可以是类名的小写) -->
    <servlet-name>mytomcattest</servlet-name>
    <!--指明servlet的路径,(包名+类名,如果没有包,就直接是类名)-->
    <servlet-class>MyTomcatTest</servlet-class>
  </servlet>
  
  <!-- 部署ServletDemo1 -->
  <servlet>
    <servlet-name>servletdemo1</servlet-name>
    <servlet-class>ServletDemo1</servlet-class>
  </servlet>
  <!-- 部署ServletDemo2 -->
  <servlet>
    <servlet-name>servletdemo2</servlet-name>
    <servlet-class>ServletDemo2</servlet-class>
  </servlet>
  
  
 <!-- 部署MyTomcatTest的servlet-mapping -->
  <servlet-mapping>
    <!--给你的的servlet起的名字,随便取 -->
    <servlet-name>mytomcattest</servlet-name>
    <!-- 是在浏览器器输入的访问该servlet的URL -->
    <url-pattern>/mytomcattest</url-pattern>
  </servlet-mapping>

 <!-- 部署ServletDemo1d的 servlet-mapping--> 
  <servlet-mapping>
    <servlet-name>servletdemo1</servlet-name>
    <url-pattern>/servletdemo1</url-pattern>
  </servlet-mapping>
  
  <!-- 部署ServletDemo2d的 servlet-mapping--> 
  <servlet-mapping>
    <servlet-name>servletdemo2</servlet-name>
    <url-pattern>/servletdemo2</url-pattern>
  </servlet-mapping>
  
</web-app>
原创文章 37 获赞 5 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Yolandalt7777777/article/details/88396296