MVC工程开发

JAVA后台

  • servlet(控制器)

  • service(服务逻辑)

  • dao(数据查询)

  • utils(工具类)

  • entity(实体类Bean)

servlet

控制器、过滤器等

主要用于进行页面数据转发,定向页面

  • 配置url

1、通过注释定义路径

@WebServlet("/servletname")

2、通过web.xml


      UserServlet
      com.igeek.shop.web.servlet.UserServlet



      UserServlet
      /user

  • Servlet内容

继承HttpServlet
public class UserServlet extends HttpServlet 
  • 一般只需重写doGet和doPost方法
  • url访问方式 - get|post请求
  • 在一个方法中调用另一个方法 - 只需在一个方法中可实现所有操作

一个对象对应一个Servlet - 区分不同的操作
例如地址中的method使用不同关键字,使用“”分割:
url?method=login | reg | logout

  • doGet/doPost内容

如果有使用中文的情况记得设置中文参数数据的编码方式

request.setCharacterEncoding("UTF-8");
  • 获取请求request参数数据 - 区分不同操作

//以登陆作为示例
String method = request.getParameter("method");
                                    //取出request中method后数据 
        if("login".equals(method)) {            //对数据进行判断以确定其流向
            login(request, response);
        } else if("reg".equals(method)) {
            reg(request, response);
        }
  • 构造login函数

private UserService userService = new UserService();//定义service类对象
protected void login(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        //2:获取请求request参数数据        
                //?拼接参数数据    form表单中参数数据
        String userAccount = request.getParameter("userAccount");
        String password = request.getParameter("password");

         //3: 把数据带至数据库端实现数据操作   -  调用Service业务层对应的方法
        //System.out.println(userAccount + "\t" + password); 
        User user = userService.login(userAccount, password);//返回user对象
    }
  • Service内容

  • Service - 业务

  • 对象操作方法
  • 后台验证(金融、保险...)
  • 逻辑处理
  • 调用数据库层 - 实现数据具体操作
public class UserService {

    private UserDao userDao = new UserDao();//定义数据层对象
    
    public Userlogin(String userAccount, String password) {
        //4: 调用Dao数据层 - 实现数据库操作
        return userDao.login(userAccount, password);
    }   
}
  • dao内容

通过调用utils中的工具类,实现对应数据库中数据操作

public class UserDao {

    public Userlogin(String userAccount, String password) {
        Connection con = DBUtil.getConnection();//工具类utiles中方法--连接数据库
        PreparedStatement stmt = null;//初始化查询语句
        ResultSet rs = null;
        User user = null;
        //5: 定义出sql语句
        String sql = "select * from user where userName = ? and password = md5(?)";
        try {
            stmt = con.prepareStatement(sql);       //Connection获取语句处理
            //若sql中有?参数  - 设置?对应的数据    setType(index, value)  index - 从1开始
            stmt.setString(1, userAccount);
            stmt.setString(2, password);
            
            /*
             * 执行ARUD   
             *  executeQuery()   -  select  
             *  executeUpdate()  -  insert、 update、 delete
             */
            rs = stmt.executeQuery();
            
            /*
             * 对查询的结果处理 - 数据封装为对象       
             *  rs.next()   - boolean
             *  rs.getType(index|列名)
             */
            if(rs.next()) {
                user = new User();
                user.setUserId(rs.getInt("userid"));    //结果集处理 - 每个列数据封装至对象
                user.setUserName(rs.getString(2));
                user.setSex(rs.getString("sex"));
                user.setEmail(rs.getString("email"));
                user.setName(rs.getString("name"));
                user.setBirthDay(rs.getDate("birthDay"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {     //关闭数据库相关操作
            DBUtil.allClose(rs, stmt, con); 
        }
        return user;
    }
    
}
  • 工具类

两种方法
JDBC - API
  • 物理连接操作
  • 加载数据库驱动jar - 拷贝至WEB-INF/lib中
  • 加载驱动程序类
  • DriverManager.getConection()
  • 关闭相关操作
数据库连接池
public class DBUtil {

    private static Connection connection;
//jdbc方法    
//  public static Connection getConnection() {
//      try {
//          Class.forName("com.mysql.jdbc.Driver");
//          connection = DriverManager.getConnection("jdbc:mysql://192.168.12.2:3306/ebuy", 
//                                                   "igeek", "igeek");
//      } catch (ClassNotFoundException e) {
//          e.printStackTrace();
//      } catch (SQLException e) {
//          e.printStackTrace();
//      }
//      return connection;
//  }
    
    private static DataSource dataSource=null;
    static{
        dataSource = new ComboPooledDataSource("mysql");        
                                //读取配置文件 - 读取mysql相关配置
    }
    
    /**
     * 获取数据库连接
     * @return
     */
    public static Connection getConnection(){
        try {
            connection = dataSource.getConnection();        //获取连接池中的一个连接
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }

    
    /**
     * 关闭数据库相关操作
     *  ResultSet - select查询的结果集
     *  PreparedStatement   - 语句处理  java语句转换为数据库中可执行的sql语句
     */
    public static void allClose(ResultSet rs, PreparedStatement stmt, Connection con) {
        if(rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(con != null) {
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    
}
  • entity类(Bean实体)

  • Java实体对象 - 表
  • JavaBean定义
  • private的属性 + setter与getter方法
  • 无参构造器
  • 实现序列化 - 给定唯一系列化UID
  • 网络、文件传递存储对象
public class User implements Serializable {

    private static final long serialVersionUID = 1520708863050632827L;
    private int userId;
    private String userName;        //用户名
    private String password;
    private String sex;
    private String email;
    private String name;            //姓名
    private Date birthDay;

          //Get和Set方法省略
}
  • Servlet对查询回传数据进行处理

    protected void login(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        ........
        //6:对返回的结果进行处理 - 依据流向  - 跳转至下一个显示页面
        if(user == null) {  //用户名或密码错误
            /*
             * 传递页面所需数据
             *  request  -  数据只在下一个页面中使用  - 必须结合forward跳转
             *  session  
             *      setAttribute("name", value)
             */
            request.setAttribute("info", "用户名或密码错误!"); 
            //跳转至下一个url对应的页面
            request.getRequestDispatcher("/login.jsp").forward(request, response); 
        } else {
            /*
             * 数据在多个页面中使用
             *  session - 当前用户  - 跨页面数据传递
             */
            HttpSession sesison = request.getSession();
            sesison.setAttribute("user", user); 
            
            //无request传递数据 - 都可以
//          request.getRequestDispatcher("/index.jsp").forward(request, response); 
            response.sendRedirect(request.getServletContext().getContextPath() + "/index.jsp");     
                                  //    登陆成功跳转至主页面
        }
    }
  • 页面回收Info信息并显示错误

<%-- %= 对象不存在显示 nullEL表达式显示空 --%>  ${requestScope.info}
  • EL表达式

<%-- Jsp注释 - 即可注释java部分也可注释html部分 
    
      ${内置对象.name}
        requestScope
        sessionScope    -  获取servlet传递的setAttribute的数据
                
                若name的值为基本类型或String  - 直接 内置对象.name
                若name的值为实体对象   内置对象.name.属性
            
        pageContext -  获取jsp内置对象
                ${pageContext.request.contextPath}    web上下文 /项目名称
 --%>

源码:
链接: https://pan.baidu.com/s/17FPGWghph1qkNZiPn_6uIA 密码: teje

你可能感兴趣的:(MVC工程开发)