需求:
使用Servlet和四层结构知识,改进只用JSP(不分层)完成用户信息的增删改查操作的信息管理系统,使其具有更好的软件结构,以及提升可读性和可扩展性。(jsp-servlet-service-dao)
目录结构
登录
(1)LoginServlet的doPost方法
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("login-post");
request.setCharacterEncoding("utf-8");
Map<String, String[]> map = request.getParameterMap();
User user = new User();
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
userService userservice = new userServiceImpl();
User loginUser=userservice.login(user);
HttpSession session = request.getSession();
if(loginUser != null){
session.setAttribute("user",loginUser);
response.sendRedirect(request.getContextPath()+"/index.jsp");
}else{
request.setAttribute("login_msg","用户名或密码错误!");
request.getRequestDispatcher("/login.jsp").forward(request,response);
}
}
(2)Dao层用户登录校验
@Override
public User login(User u) {
if (u.getUsername()==null||u.getUsername().equals("")||u.getPassword()==null||u.getPassword().equals("")){
return null;
}
User user=new User();
try {
conn = JDBCUtils.getConnection();
String sql="select * from user_list where user_name=? and user_password = ?";
System.out.println("sql:"+sql);
pst = conn.prepareStatement(sql);
pst.setString(1,u.getUsername());
pst.setString(2,u.getPassword());
rs=pst.executeQuery();
if(rs.next()){
user.setAge(rs.getInt("user_age"));
user.setUsername(rs.getString("user_id"));
user.setPassword(u.getPassword());
user.setUserRole(rs.getString("user_role"));
user.setUserId(u.getUsername());
return user;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.close(rs, pst, conn);
}
return null;
}
注册
(1)registServlet的doPost方法
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
System.out.println("regist-post");
request.setCharacterEncoding("utf-8");
Map<String, String[]> map = request.getParameterMap();
User user = new User();
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
String userRole = request.getParameter("userRole");
user.setUserRole(userRole);
System.out.println(user);
userService userservice = new userServiceImpl();
int result = userservice.insert(user);
HttpSession session = request.getSession();
if (result == 1){
session.setAttribute("user",user);
session.setAttribute("role",user.getUserRole());
response.sendRedirect(request.getContextPath()+"/index.jsp");
}else{
request.setAttribute("regist_msg","注册失败!");
request.getRequestDispatcher("/regist.jsp").forward(request,response);
}
}
(2)注册功能的dao层代码
@Override
public int insert(User user) {
if (user==null){
return 0;
}
int result=-1;
try {
conn = JDBCUtils.getConnection();
String sql="insert into user_list(user_id,user_age,user_name,user_password,user_role) values(?,?,?,?,?)";
System.out.println("sql:"+sql);
pst = conn.prepareStatement(sql);
pst.setString(1,user.getUserId());
pst.setInt(2,user.getAge());
pst.setString(3,user.getUsername());
pst.setString(4,user.getPassword());
pst.setString(5,user.getUserRole());
result=pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.close(rs, pst, conn);
}
return result;
}
(3)进行删除时验证用户身份js方法
function del(user_id,user_role,userName){
if (user_role.toString()=="用户"){
alert("您没有权限删除其他人");
return false;
}
if(confirm("确认删除"+userName+"吗?")){
window.location.href= "delete.jsp?user_id="+user_id+"&user_name="+userName;
}else{
window.location.href="index.jsp";
}
}
(4)删除用户的deleteServlet的doGet方法
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("delete-get");
request.setCharacterEncoding("utf-8");
String user_id = request.getParameter("user_id");
userService service = new userServiceImpl();
service.delete(user_id);
response.sendRedirect(request.getContextPath()+"/index.jsp");
(5)更新用户信息updateServlet的doPost方法
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
System.out.println("update-post");
request.setCharacterEncoding("utf-8");
Map<String, String[]> map = request.getParameterMap();
User user = new User();
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
HttpSession session = request.getSession();
userService userservice = new userServiceImpl();
int result=userservice.update(user);
if (result == 1){
response.sendRedirect(request.getContextPath()+"/index.jsp");
}else{
}
}
总结
分层编写代码。使用Dao进行与数据库的增删改查操作;Service层进行业务操作;Servlet进行处理请求。在jsp表单提交的时候调用Servlet处理请求。采用分层管理代码,将方法的定义和实现抽离。使用工具类读取配置文件的时候,要保证路径正确,不然会读取不到报错。在表单中使用post请求,则应该编写servlet中的doPost方法。采用分层方法管理代码,代码的管理起来更加方便了,可读性更高,修改更加简便
源码下载
点击下载源码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)