您的位置:首页 > 运维架构 > 网站架构

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

2017-01-06 10:46 489 查看

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的方法,实现转发,或者重定向。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet jsp
相关文章推荐