向上抽取BaseServlet类
package com.bjsxt.servlet;
import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public abstract class BaseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//设置请求编码格式
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
//获取请求信息
String methodName=req.getParameter("method");
//调用方法处理请求(动态根据方法名调用方法--->反射)
try {
//反射获取方法所在的类的类对象
Class cla=this.getClass();
//反射获取要被调用的方法对象
Method m=cla.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
//反射执行方法
m.invoke(this, req,resp);
} catch (Exception e) {
e.printStackTrace();
}
}
}
其他类进行继承
package com.bjsxt.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.bjsxt.service.UserService;
import com.bjsxt.service.impl.UserServiceImpl;
public class RegServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//设置请求编码格式
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
//获取请求信息
String uname=req.getParameter("uname");
String pwd=req.getParameter("pwd");
String sex=req.getParameter("sex");
int age=Integer.parseInt(req.getParameter("age"));
String birthday=req.getParameter("birthday");
//处理请求信息
//获取业务层对象
UserService us=new UserServiceImpl();
//处理注册
int i=us.regUserInfoService(uname,pwd,sex,age,birthday);
//响应处理结果
//获取Session对象
HttpSession hs=req.getSession();
//重定向到登录页面
if(i>0){
//给注册成功添加标记到session中
hs.setAttribute("flag", "regSuccess");
resp.sendRedirect("/project2/login.jsp");
}else{
//重定向到注册页面
resp.sendRedirect("/project2/login.jsp");
}
}
}
总结
先根据url跳转到相应servlet中,在对应servlet中继承BaseServlet,当调用时先执行父类中的service方法,在service方法中通过反射获取url中传递的方法名(获取到当前类的类名,就是我所继承的类的子类,例如我上述案例的RegServlet)。然后通过反射执行对应类中的对应方法。