servlet全网最全(二):跟着宝哥学java:servlet三种创建方式

2 servlet的创建

注意:创建一个web项目:选中servlet版本是2.5
     项目必须引入tomcat的jar

2.1 方式1:实现javax.servlet.Servlet接口

  • 步骤1:创建Servlet接口的实现类
package com.zhiyou100_03.servlet;

//2.1 方式1:实现javax.servlet.Servlet接口
public class Day01Demo01  implements Servlet {

	public void destroy() {
		System.out.println("destroy方法:::Servlet对象的销毁:流的关闭 资源释放等");
	}

	public ServletConfig getServletConfig() {
		System.out.println("getServletConfig方法:::获取Servlet配置信息");
		return null;
	}

	public String getServletInfo() {
		System.out.println("getServletInfo方法:::获取Servlet基本:作者 时间 版本");
		return null;
	}

	public void init(ServletConfig arg0) throws ServletException {
		System.out.println("init方法:初始化方法 servlet对象创建时要执行的代码");
	}

	public void service(ServletRequest requset, ServletResponse response) throws ServletException, IOException {
		System.out.println("service方法:servlet的业务核心代码:接受请求 处理数据 给与响应的代码");
		//接受请求参数
		int a=Integer.parseInt(requset.getParameter("a"));
		int b=Integer.parseInt(requset.getParameter("b"));
		//设置响应体
		response.getOutputStream().print("<font color='red' size='7'>"+a+"+"+b+"="+(a+b)+"</font>");
	}
}

  • 步骤2:在web的核心配置文件web.xml中配置此servlet的请求路径(url)
<!-- 配置Day01Demo01.java:servlet的请求路径: -->
<servlet>
    <servlet-name>Day01Demo01</servlet-name> <!-- 指定当前servlet的昵称:唯一即可/实现servlet和servlet-mapper的关联 -->
    <servlet-class>com.zhiyou100_03.servlet.Day01Demo01</servlet-class><!-- 指定servlet类的完整路径 -->
</servlet>
<servlet-mapping>
    <servlet-name>Day01Demo01</servlet-name>
    <url-pattern>/day01/d1.do</url-pattern> <!-- 指定servlet的请求路径 -->
</servlet-mapping>
  • 步骤3:发布项目 浏览器请求

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iofUFql7-1683249543077)(imgs/image-20221020155905420.png)]

2.2 方式2:继承javax.servlet.GenericServlet抽象类

  • 只有步骤1不同
//2.2 方式2:继承javax.servlet.GenericServlet抽象类
public class Day01Demo02  extends GenericServlet {
    //根据需求重写其他方法:
	//public void destroy();
	//public void init(ServletConfig arg0);
	//唯一需要重写的方法
	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		System.out.println("service方法:servlet的业务核心代码:接受请求 处理数据 给与响应的代码");
		//接受请求参数
		int a=Integer.parseInt(request.getParameter("a"));
		int b=Integer.parseInt(request.getParameter("b"));
		//设置响应体
		response.getOutputStream().print("<font color='red' size='7'>"+a+"+"+b+"="+(a+b)+"</font>");
		
	}
}

2.3方式2:继承javax.servlet.http.HttpServlet类

  • 只有步骤1不同
//2.3方式2:继承javax.servlet.http.HttpServlet类
public class Day01Demo03  extends HttpServlet {

	//重写doget方法:接受get请求
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("HttpServlet:service方法:servlet的业务核心代码:接受请求 处理数据 给与响应的代码");
		//接受请求参数
		int a=Integer.parseInt(req.getParameter("a"));
		int b=Integer.parseInt(req.getParameter("b"));
		//设置响应体
		resp.getOutputStream().print("<font color='red' size='7'>HttpServlet:"+a+"+"+b+"="+(a+b)+"</font>");
	}
	//重写dopost方法:接受post请求
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

2.4 这三种类的关系

javax.servlet.GenericServlet是javax.servlet.Servlet接口的实现类:是抽象的
javax.servlet.http.HttpServlet是javax.servlet.GenericServlet子类:是非抽象类
javax.servlet.http.HttpServlet用于指定接受http协议的请求:::提供更多http协议相关的方法:::首选
//模拟Servlet接口、GenericServlet类、HttpServlet类的关系
interface MyServletConfig{}
interface MyServletRequest{}
interface MyServletResponse{}
//模拟Servlet接口
interface MyServlet{
	public void init(MyServletConfig msc);
	public void destroy();
	public void service(MyServletRequest req,MyServletResponse resp);
	public MyServletConfig getServletConfig();
	public String getServletInfo();
}
//模拟GenericServlet类
abstract class MyGenericServlet implements MyServlet{
	public void init(MyServletConfig msc){
		System.out.println("init 初始化方法!");
	}
	public void destroy(){
		System.out.println("destroy 销毁方法!");
	}
	public MyServletConfig getServletConfig(){
		System.out.println("init 初始化方法!");
		return null;
	}
	//service依然是抽象的
	public String getServletInfo(){
		System.out.println("init 初始化方法!");
		return null;
	}
}
interface MyHttpServletRequest extends MyServletRequest{
	public String getMethod();
}
interface MyHttpServletResponse extends MyServletResponse{}
//模拟HttpServlet类
class MyHttpServlet extends MyGenericServlet{
	//实现父类的抽象方法
	public void service(MyServletRequest req,MyServletResponse resp){
		MyHttpServletRequest httpReq=(MyHttpServletRequest)req;
		MyHttpServletResponse httpResp=(MyHttpServletResponse)resp;
		service(httpReq,httpResp);
	}
	//特有方法
	public void service(MyHttpServletRequest req,MyHttpServletResponse resp){
		if(req.getMethod().equalsIgnoreCase("get")){
			doGet(req, resp);
		}
		if(req.getMethod().equalsIgnoreCase("post")){
			doGet(req, resp);
		}
	}
	//特有方法
	public void doGet(MyHttpServletRequest req,MyHttpServletResponse resp){}
	//特有方法
	public void doPost(MyHttpServletRequest req,MyHttpServletResponse resp){}
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值