JAVA WEB MVC设计模式之封装实例 – 9.23


折腾挺久的,先上目录结构文件结构,代码不全上,只贴部分

BaiduShurufa_2016-10-16_17-49-4.png

听别人说这是MVC设计模式中的内容,具体没怎么去查,刚刚接触规范化难免会觉得很麻烦,但是熟悉后,你会感觉到这种模式的好处

培哥的源代码写了一个登录类,所以我才可能比较快的上手

JAVA_WEB10.13.rar

然后我放上Regist类吧,在培哥的登录基础上模仿的,加入了Session验证机制,注册后的每一步操作都需要验证是否已经登录。避免有人绕过登录直接删除或者更改系统数据

package com.lckiss.action;
 
import java.sql.ResultSet;
import java.util.List;
 
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import com.lckiss.service.UserService;
 
public class UserRegist extends HttpServlet {
 
 private static final long serialVersionUID = 1L;
 
 /**
 * @author 14436242
 */ @Override
 protected void service(HttpServletRequest req, HttpServletResponse resp){
 String name = req.getParameter("name");
 String pwd = req.getParameter("pwd");
 
 // 内部输出一次看从网页获取的数据是否错误
 System.out.println(name);
 System.out.println(pwd);
 
 try {
 // 业务逻辑
 UserService us = new UserService();
 List users = us.QueryAll();
 String SE = "SELECT SEQ.NEXTVAL FROM DUAL";
 ResultSet NextV = us.ExecuteQuerry(SE);
 int V = 0;
 while (NextV.next()) {
 V = NextV.getInt("NEXTVAL");
 }
 
 String sql = "insert into emp (EMPNO,ename,job) values(SEQ.NEXTVAL,'" + name + "','" + pwd + "')";
 int rs = us.ExecuteUpdate(sql);
 
 if (rs >= 1) {
 req.setAttribute("NextV", V - 1);
 
 //将注册的帐号密码存入Session中,方便后面验证是否已登录
 HttpSession session = req.getSession();
 session.setAttribute("name", name);
 session.setAttribute("pwd", pwd);
 }
 
 // 返回响应
 req.setAttribute("users", users);
 req.setAttribute("flag", true);
 req.getRequestDispatcher("view").forward(req, resp);
 } catch (Exception e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 }
 
}

接下来是删除操作类

package com.lckiss.action;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.util.List;
 
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.lckiss.service.UserService;
 
public class DeletSQL extends HttpServlet {
 
 private static final long serialVersionUID = 1L;
 
 /**
 * @author 14436242
 * @throws IOException
 * @throws ServletException
 */ 
 @Override
 public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 String empno = req.getParameter("empno");
 
 //拿到登录时Session中的帐号密码验证是否已登录
 String name = (String) req.getSession().getAttribute("name");
 String pwd = (String) req.getSession().getAttribute("pwd");
 boolean flag;
 try {
 // 业务逻辑
 UserService us = new UserService();
 //验证帐号合法性
 flag = us.loginByname(name, pwd);
 if (us.UserID(empno)) {
 
 String sql = "delete from emp where EMPNO=" + empno + "";
 int rs = us.ExecuteUpdate(sql);
 if (rs >= 1) {
 req.setAttribute("DeleV", empno);
 }
 List users = us.QueryAll();
 // 返回响应
 req.setAttribute("users", users);
 req.setAttribute("flag", flag);
 req.getRequestDispatcher("view").forward(req, resp);
 }else {
 
 req.setAttribute("flag", false);
 req.getRequestDispatcher("view").forward(req, resp);
 }
 } catch (Exception e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 }
 
}

还有一个更新类

package com.lckiss.action;
 
import java.util.List;
 
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import com.lckiss.service.UserService;
 
public class UpdateSQL extends HttpServlet {
 
 /**
 * @author 14436242
 */ private static final long serialVersionUID = 1L;
 
 @Override
 protected void service(HttpServletRequest req, HttpServletResponse resp) {
 try {
 // 设置格式,防止乱码 必须在流前定义
 resp.setContentType("text/html;charset=GBK");
 // 从传输过来的链接中获取empno值
 String empno = req.getParameter("empno");
 String id = req.getParameter("id");
 // 测试if条件
 System.out.println(id);
 
 //拿到登录时Session中的帐号密码验证是否已登录
 String name = (String) req.getSession().getAttribute("name");
 String pwd = (String) req.getSession().getAttribute("pwd");
 
 UserService us = new UserService();
 //验证帐号合法性
 boolean flag = us.loginByname(name, pwd);
 //检查更改元素是否存在
 boolean rs = us.UserID(empno);
 
 if (rs && "0".equals(id)) {
 HttpSession session = req.getSession();
 // 将empno存储到session中
 session.setAttribute("no", empno);
 // 定向到更新页面,返回数据ID给JSP页面
 req.setAttribute("ID", empno);
 req.getRequestDispatcher("./index.jsp").forward(req, resp);
 // 内部打印,方便检测是否出错
 System.out.println(empno);
 } else if (id == null) {
 // 从session中拿到上次的no
 String pno = (String) req.getSession().getAttribute("no");
 String rename = req.getParameter("name");
 String repwd = req.getParameter("pwd");
 System.out.println(pno + "-" + rename + "-" + repwd);
 // 传入相关信息 准备更新
 String sql = "update emp set ename='" + rename + "',job='" + repwd + "' where EMPNO=" + pno + "";
 int res = us.ExecuteUpdate(sql);
 if (res > 0) {
 req.setAttribute("UpdateV", pno);
 }
 System.out.println(res);
 List users = us.QueryAll();
 req.setAttribute("users", users);
 req.setAttribute("flag", flag);
 req.getRequestDispatcher("view").forward(req, resp);
 } else {
 req.setAttribute("flag", false);
 req.getRequestDispatcher("view").forward(req, resp);
 }
 } catch (Exception e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 
 }
}

以上都有注释,以前的操作可以弄懂的看这个应该是不费力的,Dao Util我做了一定的修改,有想研究的下这个包吧

lckiss.zip

不再做解释,因为前面不懂后面也不好讲了,有问题直接问我吧。

关于后面的View类,request中的3个参数,用于分别判断3个操作,操作成功后分别显示操作数据到页面上,主要是保证一个empno的可见性

方便知道修改了谁,删除了谁,更改了谁。

package com.lckiss.action;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.lckiss.entity.User;
 
/**
 * @author 14436242
 *
 */public class View extends HttpServlet {
 
 private static final long serialVersionUID = 1L;
 
 @Override
 protected void service(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
 // 1.设置应答类型
 response.setContentType("text/html;charset=utf-8");
 // 2.获得输出流
 PrintWriter out = response.getWriter();
 // 3.接收业务逻辑的返回结果
 Boolean flag = (Boolean) request.getAttribute("flag");
 List users = (List) request.getAttribute("users");
 Object NextV = request.getAttribute("NextV");
 Object DeleV = request.getAttribute("DeleV");
 Object UpdateV = request.getAttribute("UpdateV");
 
 System.out.println(flag);
 
 if (flag) {
 // 3.查询所有信息
 // 查询数据库表中所有数据
 if (NextV != null) {
 out.println("<font color='red'>数据" + NextV + "已插入成功</font>");
 }
 
 if (DeleV != null) {
 out.println("<font color='red'>数据" + DeleV + "已删除成功</font>");
 }
 if (UpdateV != null) {
 out.println("<font color='red'>数据" + UpdateV + "已修改成功</font>");
 }
 
 out.println("<p>编号 , 姓名 , 工作 , HIREDATA , SAL , COMM , DEPTNO.</p>");
 
 for (Object obj : users) {
 User user = (User) obj;
 String l = "" + user.getEmpno() + "," + user.getEname() + "," + user.getJob() + "," + user.getHiredata()
 + "," + user.getMgr() + "," + user.getComm() + "," + user.getDeptno() + "";
 String del = "http://localhost/day_1/del?empno=" + user.getEmpno() + "";
 String up = "http://localhost/day_1/update?empno=" + user.getEmpno() + "&id=0";
 out.println("<p>" + l + "-" + "<a href='" + del + "'>删除</a>" + "-" + "<a href='" + up + "'>更新</a>"
 + "</p>");
 }
 out.println("---------<a href='http://localhost/day_1/main.html'>点击返回主页</a>---------");
 } else {
 out.println("<h4><font color='red'>操作失败,请检查成员是否存在并重试或联系管理员</font></h4>");
 }
 }
}

随便上张图

BaiduShurufa_2016-10-16_18-10-15.png

差不多了,自行领悟了,我看懂就行了,一个个的函数解释,还是百度实在。

 抄袭无益  TIL-MICE 2016.10.16

声明:TIL|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA[ZH]协议进行授权

转载:转载请注明原文链接 - JAVA WEB MVC设计模式之封装实例 – 9.23


Life is very interesting. In the end, some of your greatest pains become your greatest strengths.