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){}
}