您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
01-Servlet 代码优化(利用映射实现同一servlet实现多个请求不同业务请求)
发布时间:2024-12-12 22:25:04编辑:雪饮阅读()
-
像是前番我们使用servlet实现了品牌新增,但我们是单独建立了一个servlet去实现的,那么实际上这样不是很友好,同一类功能我觉得应该共同在一个servlet中才是合理的。
像是php那边的一些成熟框架里面,你可以这样/Brand/add是新增,而/Brand/index则是查询所有,但不至于建立两个类进行实现。
那么java这边servlet其实也可以实现,不过要稍微加工下。
首先我们知道servlet中doGet和doPost就是通过service方法进行实现的转发。
那么我们可以基于此,我们覆写service,那么我们的servlet实际上应该是只匹配@WebServlet("/Brand/*")
类似这样,然后servlet的实现类就先触发了父类的service去处理转发,使用反射的方式。
则父类应如:
package com.web;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String uri=req.getRequestURI();
int index=uri.lastIndexOf('/');
String methodName=uri.substring(index+1);
/*
* Class<? extends BaseServlet> cls:这是一个声明,它声明了一个变量cls,其类型为Class<? extends BaseServlet>。
* 这里使用了泛型通配符?和extends关键字,表示cls可以引用任何BaseServlet类或其子类的Class对象。
* 换句话说,cls是一个指向BaseServlet类或其任何子类类型的Class对象的引用。
* */
Class<? extends BaseServlet> cls=this.getClass();
try {
Method method=cls.getMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);
method.invoke(this,req,resp);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
那么子类的实现就很简单了
package com.web;
import com.alibaba.fastjson.JSON;
import com.pojo.Brand;
import com.service.BrandService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/Brand/*")
public class BrandServlet extends BaseServlet{
BrandService brandService=new BrandService();
public void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String JsonString=req.getReader().readLine();
Brand javaObject= JSON.parseObject(JsonString,Brand.class);
brandService.Add(javaObject);
resp.getWriter().write("success");
}
}
那么我们之前的axios进行添加品牌数据的时候则可以修改请求url如
axios({
method:'post',
url:'/zeroEightUserLoginCaseModule/Brand/add',
data:data.value
}) .then(function (response) {
console.log(response);
if(response.data=="success"){
alert("添加成功");
}
})
.catch(function (error) {
console.log(error);
});
关键字词:Servlet,映射
上一篇:08-案例-新增品牌(java端处理前端请求的application json内容(请求体整个读取一行))
下一篇:02-批量删除-后台&前端(element plus的cdn方式安装与使用servlet接收json的int数组处理)、IntelliJ IDEA 2020.3.3 x64激活至2099年
相关文章
- 01-JSP概述&快速入门&原理(jsp-servlet的继承与实现流
- 11-案例-用户登录-准备环境&代码实现(mybatis+servlet
- 07-Request请求转发(servlet转发及webapp目录下的资源
- 04-Idea模板创建Servlet(快速创建servlet及快速创建se
- 03-Request通用方式获取请求参数(servlet在get请求与p
- 16-XML配置Servlet(路由)
- 15-urlPattern配置(WebServlet注解配置各种url访问路
- 14-Servlet方法介绍
- 13-Servlet方法介绍&体系结构(HttpServlet的使用)
- 12-Servlet执行流程&生命周期(init、service、destroy