Servlet代码优化
1 自定义baseServlet
public class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//重写了service方法。
//进行请求的分发
//获取请求路径
String uri = req.getRequestURI(); // 例如路径为:/brand-case/brand/selectAll
//获取最后一段路径,即方法名
int index = uri.lastIndexOf('/');//获取最后一个/的位置,该方法为String对象的方法。
String methodName = uri.substring(index + 1); // 获取最后一个/的部分字符串,该方法为String对象的方法。
//获取BrandServlet /UserServlet 字节码对象 Class
//System.out.println(this);来验证当前对象
Class<? extends BaseServlet> cls = this.getClass();
//获取方法 Method对象
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();
}
}
}
2 后端优化
@WebServlet("/brand/*")
//该urlPatten所有包括/brand/的url都会跳转到BrandServlet,同理,所有包括/user/的url都会跳转到UserServlet。
public class BrandServlet extends BaseServlet{
//继承了自定义的servlet,自定义的servlet被重写了service()方法,每次访问该servlet就会执行重写后的service()方法。
//service()方法实现的功能是:通过url的二级路径来判断调用哪个方法。
//该servlet包含以下方法:继承自HttpServlet的生命周期方法、BaseServlet重写后的service()方法、以及下面的自定义方法。
private BrandService brandService = new BrandServiceImpl();
public void selectAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//修饰符必须为public
//该方法与service()方法为两个独立的方法,所以要获取请求中的数据,必须将request和response作为参数。
List<Brand> brands = brandService.selectAll();
String jsonString = JSON.toJSONString(brands);
response.setContentType("text/json;charset=utf-8");
response.getWriter().write(jsonString);
}
public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//修饰符必须为public
BufferedReader br = request.getReader();
String params = br.readLine();//json字符串
Brand brand = JSON.parseObject(params, Brand.class);
brandService.add(brand);
response.getWriter().write("success");
}
}
3 前端优化
selectAll() 函数中发送异步请求的 url 应该改为 http://localhost:8080/brand-case/brand/selectAll

浙公网安备 33010602011771号