demo完整示例

发表时间:2017-05-16 15:41:45 浏览量( 27 ) 留言数( 0 )

学习目标:

1、掌握从头开始搭建struts2的项目的历史

2、使用struts2实现一个简单的实例


学习过程:

下面我们通过一个经典的增删改查来演示一下struts2的使用。

一、建立数据库

首先在mysql中建立一个mvcdb的数据库,再建立一个tb_user表,我们任务就是对这个表进行增删改查的操作,建表语句如下:

CREATE TABLE `tb_user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) DEFAULT NULL,
  `passwd` varchar(100) DEFAULT NULL,
  `addr` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

二、建立项目和包结构,实现dao层和pojo等

先建立一个demo的web项目,再建立以下的包结构。

attcontent/0bcb79a4-7dca-4c55-83b9-bc78cc5c2997.png

接下实现dao层,先导入mysql的驱动包,然后在pojo包建立一个User类,代码如下:

public class User {
	private int userId;
	private String username;
	private String passwd;
	private String addr;
	private int age;
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPasswd() {
		return passwd;
	}
	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}

}

在src建立数据库连接的配置文件jdbc.properties,代码如下:

driver=com.mysql.jdbc.Driver
Dburl=jdbc:mysql://localhost:3306/mvcdb
Dbname=root
Dbpassword=123456

然后就可以实现dao层了,我们还是把基本的数据库操作封装到BaseDao中,实现代码如下:

public class BaseDao {
	protected String driver;
	protected String url;
	protected String user;
	protected String pwd;
	
	protected Connection conn;
	protected Statement stm;
	protected PreparedStatement preStm;
	protected ResultSet rs;
	
	public BaseDao() {
		
		Properties properties = new Properties();
		try {
			// 
			properties.load(this.getClass().getClassLoader()
					.getResourceAsStream("jdbc.properties"));

			//
			driver = properties.getProperty("driver");
			url = properties.getProperty("Dburl");
			user = properties.getProperty("Dbname");
			pwd = properties.getProperty("Dbpassword");


		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
	}
	
	public Connection getConnetion(){	
		try {		
			conn=DriverManager.getConnection(url, user, pwd);
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return conn;
	}
	
	public void closeResource(){
		try {
			if(rs!=null){
				rs.close();
			}
			if(stm!=null){
				stm.close();
			}
			if(preStm!=null){
				preStm.close();
			}
			if(conn!=null || !conn.isClosed()){
				conn.close();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public ResultSet execQuery(String sql,Object[] obj){
		try {
			preStm=conn.prepareStatement(sql);
			if(obj!=null && obj.length>0){
				for(int i=0;i<obj.length;i++){
					preStm.setObject((i+1), obj[i]);
				}
			}
			rs=preStm.executeQuery();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return rs;
	}
	//
	protected int execUpdate(String sql, Object[] obj) {
		int result = -1;
		try {
			//
			preStm = conn.prepareStatement(sql);
			//
			if (obj != null && obj.length > 0) {
				for (int i = 0; i < obj.length; i++) {
					preStm.setObject((i + 1), obj[i]);
				}
			}

			result = preStm.executeUpdate();

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return result;
	}
	
	
}

好接下了就可以实现UserDao类了。代码如下:

public class UserDao extends BaseDao {

	public int add(User user) {
		int result=0;
		getConnetion();
		String sql = "insert into tb_user(username,passwd,addr) values(?,?,?)";
		result=execUpdate(sql, new Object[] { user.getUsername(), user.getPasswd(),
				user.getAddr() });
		closeResource();
		return result;
	}

	public void del(int id) {
		getConnetion();
		String sql = "delete from tb_user where user_id=?";
		execUpdate(sql, new Object[] { id });
		closeResource();
	}
	
	
	public void update(User user) {
		getConnetion();
		String sql = "update  tb_user set username=?, passwd=?,addr=? where user_id=?";
		execUpdate(sql, new Object[] { user.getUsername(),user.getPasswd(),user.getAddr(),user.getUserId() });
		closeResource();
	}	
	public List<User> getAll() {
		getConnetion();
		List<User> users = new ArrayList<User>();

		String sql = "select * from tb_user";
		rs = execQuery(sql, new Object[] {});
		try {
			while (rs.next()) {
				User user = new User();
				user.setAddr(rs.getString("addr"));
				user.setPasswd(rs.getString("passwd"));
				user.setUserId(rs.getInt("user_id"));
				user.setUsername(rs.getString("username"));
				users.add(user);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			closeResource();
		}
		return users;
	}
	
	public User getById(int id) {
		User user=null;
		getConnetion();

		String sql = "select * from tb_user where user_id=?";
		rs = execQuery(sql, new Object[] {id});
		try {
			if (rs.next()) {
				user = new User();
				user.setAddr(rs.getString("addr"));
				user.setPasswd(rs.getString("passwd"));
				user.setUserId(rs.getInt("user_id"));
				user.setUsername(rs.getString("username"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			closeResource();
		}
		return user;
	}
	
	public static void main(String[] args) {
		
		UserDao userDao=new UserDao();
		
		User user=new User();
		user.setAddr("地址");
		user.setPasswd("321");
		user.setUsername("liu");
		//user.setUserId(1);
		
		userDao.add(user);
		
		System.out.println(userDao.getAll().size());

	}
}

三、搭建struts2框架

1、导包,可以从struts2-blank中复制,把下面这些包复制到lib目录下

attcontent/9b426ab3-d020-4ee7-8fec-84360c5db11d.png

2、修改web.xml文件,添加struts2的过滤器,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

3、在src目录下新建struts.xml文件,作为struts2的总配置文件,你可以从struts2-blank复制过来,然后把不必要的先删除。代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<package name="user" namespace="/user" extends="struts-default">

	</package>
</struts>


这样我们的struts2的环境就搭建好了。

四、实现Action的功能

在com.action中建立UserAction类,实现代码如下:

import java.util.List;

import com.dao.UserDao;
import com.opensymphony.xwork2.ActionSupport;
import com.pojo.User;

public class UserAction extends ActionSupport {
	private UserDao userDao=new UserDao();
	//使用get/set方法绑定页面的输入
	private User user;
	private List<User> users;
	private int uid;
	public String listuser(){
		users=userDao.getAll();
		return SUCCESS;
	}
	
	public String adduser(){
	   //	1、条用dao处理
        int result =userDao.add(user); 
		if(result>0){
			return SUCCESS;
		}else{
			return ERROR;
		}
	
	}
	
	public String deluser(){
		userDao.del(uid);
		return SUCCESS;
	}
	
	public String toupdateuser(){
		user=userDao.getById(uid);
		return SUCCESS;
	}
	
	public String updateuser(){
		userDao.update(user);
		return SUCCESS;
	}
	public void setUid(int uid) {
		this.uid = uid;
	}
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public List<User> getUsers() {
		return users;
	}
	public void setUsers(List<User> users) {
		this.users = users;
	}
}

每一个方法都必须对于配置文件一个action标签,所以struts.xml也需要做出相应的配置,这里我们就不使用通配符的方式了。

<package name="user" namespace="/user" extends="struts-default">
		<action name="adduser" class="com.action.UserAction" method="adduser">
			<result>/success.jsp</result>
			<result name="error">/error.jsp</result>
		</action>

		<action name="listuser" class="com.action.UserAction" method="listuser">
			<result name="success">/userlist.jsp</result>
		</action>
		<action name="deluser" class="com.action.UserAction" method="deluser">
			<result name="success" type="redirectAction">list</result>
		</action>

		<action name="toupdateuser" class="com.action.UserAction"
			method="toupdateuser">
			<result name="success">/userupdate.jsp</result>
		</action>

		<action name="updateuser" class="com.action.UserAction" method="updateuser">
			<result name="success" type="redirectAction">list</result>
		</action>
	</package>

五、实现页面

页面比较简单我们从主页index.jsp添加一个超链接,进入用户列表页面(userlist.jsp),这部分内容和我们以前学习servlet是所使用的页面一样,这里就不做过多解析了。