解决思路:
(1)建一个总的servlet类,把其他类的中的doget方法都集中到这个类中,
private void updateEmp(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
//获取参数
Map<String, String[]> map = request.getParameterMap();
//注册器
ConvertUtils.register(new Converter() {
public Object convert(Class type, Object value) {
String o = (String) value;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
try {
return LocalDate.parse(o, formatter);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}, LocalDate.class);
Emp emp = new Emp();
try {
BeanUtils.populate(emp, map);
} catch (Exception e) {
e.printStackTrace();
}
//调用业务层处理数据
EmpService empService = new EmpServiceImpl();
boolean b = empService.updateEmp(emp);
//响应数据
if (b) {
//成功,请求转发到查询所有
request.getRequestDispatcher("/adapter?flag=selectAllEmp").forward(request, response);
} else {
response.getWriter().write("save failed");
}
}
/**
* 查询所有
*
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/
private void selectAllEmp(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
EmpService empService = new EmpServiceImpl();
List<Emp> emps = empService.selectAllEmp();
if (emps.size() > 0) {
request.setAttribute("emps", emps);
request.getRequestDispatcher("/listUser.jsp").forward(request, response);
} else {
response.getWriter().write("data is empty");
}
}
(2)获取参数"flag",通过flag的值调用不同的方法
(3)每一个访问服务器的请求都要带一个键flag参数,服务器根据参数值分配方法
(4)代码实现
@WebServlet("/adapter")
public class Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//获取参数
String flag = request.getParameter("flag");
if (flag.length() > 0 && flag != null) {
if (flag.equals("delete")) {
//如果是delete,那就调用删除的方法
delete(request, response);
} else if (flag.equals("login")) {
//如果是login,那就调用注册的方法
login(request, response);
} else if (flag.equals("findOne")) {
//如果是findOne,那就调用查询一个的方法
findOne(request, response);
} else if (flag.equals("saveEmp")) {
//如果是saveEmp,那就调用插入的方法
saveEmp(request, response);
} else if (flag.equals("selectAll")) {
//如果是selectAll,那就调用查询所有的方法
selectAll(request, response);
} else if (flag.equals("updateEmp")) {
//如果是 updateEmp,那就调用更新所有的方法
updateEmp(request, response);
} else if (flag.equals("selectAllEmp")) {
selectAllEmp(request, response);
}
}
}
注意
(1)请求如果是post请求,那就用input标签的隐藏
<form method="post" class="form-x" action="/emp02/adapter">
<input type="hidden" name="flag" value="saveEmp">
</form>
(2)请求中多参的传法:url?键1=值1&键2=值2,注意中间不要有空格
<a class="button border-main" href='/emp02/adapter?eid=${emp.eid}&flag=findOne'/>