这次学习有了新的体会,除了之前对mvc模式的简单了解之外,第一个感受就是Servlet中Service方法的运用。
为什么这么说呢,放在之前我写servlet是这样写的,总是一个请求写一个servlet,最后写完一个网页代码是非常
冗余的。但是这次开发我惊奇的发现,还有这么好的方法---service,就像c++里的main()函数,c++里的程序都是从
main()函数开始的。其实service方法一直都是存在的,没有service就不能称为servlet了。当我们重写service方法之后,
servlet容器就会把请求交给service方法来进行处理。
比如这次的管理员管理模块,前台选择增删改查之后会跳转到AdminServlet而且会带method参数,service方法获取method
值进行判断,然后调用相应的方法。如果需要用到doXXX,在service方法中加一句super.service(),就可以了。
添加管理员和修改管理员信息放到同一个jsp页面和同一个servlet方法里了,这样有效的减少了代码的冗余。但是这是怎么实现的呢?
<a href="adminServlet?method=toUpdate&id=${item.id}">修改</a> 当我们选择修改的时候,进入AdminServlet经过service方法判断
调用toUpdate方法,在toUpdate()方法里获取id的值进行判断,因为超级管理员的id=1不能进行修改,所以resp.sendRedirect(req.getContextPath()+
"/admin/AdminServlet?method=list&status=3");重定向到AdminServlet再次通过service判断method调用listUser方法,listUser方法获取status参数的值,
if (status != null) {
req.getRequestDispatcher("/admin/listUsers.jsp?status=" + status).forward(req, resp);
}
判断不为空就带着status转发到页面,因为status=3,所以提示没有权限操作超级管理员。如果id>1
AdminDao adminDao = new AdminDao();
AdminBean adminBean = adminDao.getById(id);
req.setAttribute(Constants.SESSION_UPDATE_BEAN, adminBean);
req.getRequestDispatcher("/admin/addUser.jsp").forward(req, resp);
通过id获取adminBean ,并且放到request中,然后转发到addUser.jsp
<form role="form" class="form-horizontal" action="${pageContext.request.contextPath}/admin/AdminServlet?method=addUser&updateId=${updateBean.id }"
method="post" id="checkForm">
进行修改之后,跳到AdminServlet,并且带着method和管理员的id即updateBean.id,addUser获取id的值和用户名密码之后,判断id是否为空
如果为空就是添加,这时需要判断用户名是否存在,用户名不存在就可以注册,写入数据库并返回status提示注册成功,否则返回status提示该用户已存在;
如果id不为空就是修改,这时也需要判断该用户是否存在,如果不存在返回status提示修改失败,如果存在写入数据库返回status修改成功。