JSP、Servlet实战:团队开发新闻系统(三)架构简介

来源:互联网 发布:filco 蓝牙mac 编辑:程序博客网 时间:2024/05/28 11:49

JSP、Servlet实战:团队开发新闻系统(三)架构简介

这里写图片描述
这里写图片描述
jsp、servlet原生就是MVC设计思想。
Controller层是Servlet来充当,JSP充当View的角色,Model是Bean。

程序流程

jsp或者html页面请求servlet,为了代码结构清晰、提高开发效率,提取出service层,service如果需要与数据库打交道可以调用dao层。

  • servlet用于请求转发、响应,
  • service实现业务逻辑,
  • dao用于操作数据库

Dao

如果没有统一的编码规范以及减少代码重复率,还可以抽离BaseDao,每个对应的dao继承BaseDao

BaseDao.java

package cn.edu.bzu.group12.orangenews.dao;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/** * @author pangPython *  基础的数据库操作 */public abstract class BaseDao {    private Connection conn = null;    private Statement stat = null;    public BaseDao(){        try {            this.setConn(getConnection());            this.setStat(conn.createStatement());        } catch (ClassNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    //获取数据库连接    private Connection getConnection() throws ClassNotFoundException, SQLException{        final String url = "jdbc:mysql://192.168.50.103:3306/group12";        final String user = "group12";        final String password = "group12";        Class.forName("com.mysql.jdbc.Driver");        return DriverManager.getConnection(url,user,password);    }     public Connection getConn() {        return conn;    }    public void setConn(Connection conn) {        this.conn = conn;    }    //查询     public ResultSet Query(String sql) throws SQLException{        return this.stat.executeQuery(sql);    }    //增 insert into table values()    public boolean Insert(String sql){        return false;    }    //删 delete     public boolean Delete(String sql){        return false;    }    //根据id删对象    public int DeleteById(int id){        //delete from table where id = b;        return 0;    }    //改 update table set ''='';    public boolean Update(String sql){        return false;    }    public Statement getStat() {        return stat;    }    public void setStat(Statement stat) {        this.stat = stat;    }    //抽象方法 resultset 转换成 bean 对象类型    abstract Object RS2Obj(ResultSet rs,Object obj) throws SQLException;}

UserDao.java

package cn.edu.bzu.group12.orangenews.dao;import java.sql.ResultSet;import java.sql.SQLException;import org.apache.log4j.Logger;import cn.edu.bzu.group12.orangenews.bean.User;/** * @author pangPython *  用户数据库操作 */public class UserDao extends BaseDao{    Logger log = Logger.getLogger(UserDao.class) ;    User user = new User();    //插入User到数据库    public int add(User user) {        //insert into user values('pwd','user_name',1,'tel','email');        String sql = "insert into user(pwd,user_name,user_sex,tel,email) values('"+user.getPwd()                        +"','"+user.getUser_name()                        +"',"+user.getUser_sex()                        +",'"+user.getTel()                        +"','"+user.getEmail()                        +"')";         try {            return this.getStat().executeUpdate(sql);        } catch (SQLException e) {            e.printStackTrace();        }        return 0;    }    public User get(int user_id) throws SQLException{        String sql = "select * from user where user_id = "+user_id;        ResultSet rs = this.getStat().executeQuery(sql);        user.setUser_id(user_id);        while (rs.next()) {            user = (User) RS2Obj(rs, new User());        }        return user;    }    public User getUserByNameAndPwd(String user_name,String user_pwd) throws SQLException{        String sql = "select * from user where user_name = '"+user_name+"' and pwd = '"+user_pwd+"'";        ResultSet rs = this.getStat().executeQuery(sql);        while (rs.next()) {            user = (User) RS2Obj(rs, new User());        }        return user;    }    //继承自BaseDao抽象方法    //把数据库查询的ResultSet转换成User对象    @Override    Object RS2Obj(ResultSet rs, Object obj) throws SQLException {        User user_obj = (User)obj;        user_obj.setUser_id(rs.getInt("user_id"));        user_obj.setUser_name(rs.getString("user_name"));        user_obj.setPwd(rs.getString("pwd"));        user_obj.setEmail(rs.getString("email"));        user_obj.setUser_sex(rs.getInt("user_sex"));        user_obj.setTel(rs.getString("tel"));        return user_obj;    }        //  SELECT LAST_INSERT_ID();        public int getLastInsertId(String table_name) throws SQLException{            String sql = "SELECT MAX(user_id) AS user_id FROM USER";            ResultSet rs = this.getStat().executeQuery(sql);            while (rs.next()) {                log.debug("返回了数据库中的结果!");                return rs.getInt("user_id");            }            log.debug("返回了0!");            return 0;        }        //更新用户密码        public boolean UpdatePwd(int user_id, String new_pwd) throws SQLException {            String sql = "update user set pwd = '"+new_pwd+"' where user_id = "+user_id;            if(this.getStat().executeUpdate(sql)>0){                return true;            }            return false;        }        //更新用户信息        public boolean Update(User user) throws SQLException {            String sql = "update user set user_name = '"+user.getUser_name()+"' , user_sex = "+user.getUser_sex()+" , email = '"+user.getEmail()+"' , tel = '"+user.getTel()+"' where user_id = "+user.getUser_id();            log.debug("打印sql信息:"+sql);            if(this.getStat().executeUpdate(sql)>0){                return true;            }            return false;        }}

Bean

bean是作为数据库表的映射,封装的实体类。设计时最好属性名与数据库表的字段名对应,user表就有一个对应的User.java
这里写图片描述
这里写图片描述

Service

service层主要写项目的业务逻辑,并且最好不出现数据库操作
实例化一个dao,在service中调用dao中的基础方法
这里写图片描述

Servlet

servlet中主要是重写service方法或者可以重写doGet、doPost方法。
实例化一个Service,处理来自用户的请求,接收参数,然后调用Service的方法,实现转发,或者重定向。

0 0
原创粉丝点击