【MyEclipse】:SSH快速搭建

【MyEclipse】:SSH快速搭建

ssh搭建的前提,需要掌握 spring,struts2,hibernate

这是一种快速搭建的方式,框架基本上都是自动生成好。

如有不足之处,请指教!

@

1、数据库表

create table users(
	uid INT auto_increment PRIMARY KEY,
	uname VARCHAR(20) NOT NULL,
	usex VARCHAR(2) NOT NULL,
	ubirth TIMESTAMP DEFAULT CURRENT_TIMESTAMP not null
)DEFAULT CHARSET=utf8;

insert into users values(null,"张珊",‘女‘,DEFAULT);
insert into users values(null,"李四",‘男‘,DEFAULT);
insert into users values(null,"王五",‘男‘,DEFAULT);
insert into users values(null,"赵柳",‘女‘,DEFAULT);

2、新建项目

2.1、创建一个web project项目

【MyEclipse】:SSH快速搭建

2.2、导入spring

【MyEclipse】:SSH快速搭建

【MyEclipse】:SSH快速搭建

spring 添加玩以后,会多出很多的jar 包和一个配置文件 applicationContext.xml

【MyEclipse】:SSH快速搭建

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">


</beans>
2.3、添加 struts2

导入 struts2

【MyEclipse】:SSH快速搭建
【MyEclipse】:SSH快速搭建
【MyEclipse】:SSH快速搭建

项目结构

【MyEclipse】:SSH快速搭建

struts.xml

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

</struts>    
2.4、添加 Hibernate
  1. 导入hibernate

【MyEclipse】:SSH快速搭建
【MyEclipse】:SSH快速搭建
【MyEclipse】:SSH快速搭建
【MyEclipse】:SSH快速搭建
【MyEclipse】:SSH快速搭建
【MyEclipse】:SSH快速搭建

  1. Hibernate 的配置自动添加到 applicationContext.xml 文件中
<!-- 连接池 -->
<bean id="dataSource"
      class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName"
              value="com.mysql.jdbc.Driver">
    </property>
    <property name="url"
              value="jdbc:mysql://localhost:3306/myschool">
    </property>
    <property name="username" value="root"></property>
    <property name="password" value="root"></property>
</bean>

<bean id="sessionFactory"
      class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
        <ref bean="dataSource" />
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">
                org.hibernate.dialect.MySQLDialect
            </prop>
        </props>
    </property>
</bean>
2.5、逆向工程,生成实体类
  1. 连接 mysql 数据库

【MyEclipse】:SSH快速搭建

【MyEclipse】:SSH快速搭建
【MyEclipse】:SSH快速搭建

  1. 导入数据库表
    【MyEclipse】:SSH快速搭建
    【MyEclipse】:SSH快速搭建
    【MyEclipse】:SSH快速搭建
    【MyEclipse】:SSH快速搭建

项目结构

【MyEclipse】:SSH快速搭建

  1. 在 applicationContext.xml 中配置事务和支持注解开发
<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	">


	<bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName"
			value="com.mysql.jdbc.Driver">
		</property>
		<property name="url"
			value="jdbc:mysql://localhost:3306/myschool">
		</property>
		<property name="username" value="root"></property>
		<property name="password" value="root"></property>
	</bean>
	
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.MySQLDialect
				</prop>
			</props>
		</property>
		<property name="mappingResources">
			<list>
				<value>com/ssh/pojo/Users.hbm.xml</value></list>
		</property>
	</bean>
	
	<!-- 事务 -->
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>
	
	<!-- 注解  -->
	<tx:annotation-driven/>
	
	<bean id="UsersDAO" class="com.ssh.pojo.UsersDAO">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
	
</beans>

注意:

【MyEclipse】:SSH快速搭建

2.6、配置 web.xml
  1. 配置 Context Params

【MyEclipse】:SSH快速搭建

  1. Filters 过滤器

【MyEclipse】:SSH快速搭建
【MyEclipse】:SSH快速搭建
【MyEclipse】:SSH快速搭建

【MyEclipse】:SSH快速搭建
【MyEclipse】:SSH快速搭建

【MyEclipse】:SSH快速搭建
【MyEclipse】:SSH快速搭建
【MyEclipse】:SSH快速搭建

  1. Listeners 监听器
    【MyEclipse】:SSH快速搭建
    【MyEclipse】:SSH快速搭建
    【MyEclipse】:SSH快速搭建
    【MyEclipse】:SSH快速搭建

  2. 保存,web.xml就配置完了

  3. 部署到Tomcat服务器上,无报错,即搭建成功!

2.7、数据编写
  1. 建立基本结构

    • com.ssh.action
    • com.ssh.dao
    • com.ssh.pojo
    • com.ssh.service
  2. 实体类和dao层

    实体类

public class Users implements java.io.Serializable {
	private Integer uid;
	private String uname;
	private String usex;
	private Timestamp ubirth;
    
    //get/set方法,有参无参构造函数,toString();
}

? dao层

package com.ssh.dao;

import java.sql.Timestamp;
import java.util.List;
import org.hibernate.LockMode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.ssh.pojo.Users;


public class UsersDAO extends HibernateDaoSupport {
    private static final Logger log = LoggerFactory.getLogger(UsersDAO.class);
    // property constants
    public static final String UNAME = "uname";
    public static final String USEX = "usex";

    protected void initDao() {
        // do nothing
    }

    public void save(Users transientInstance) {
        log.debug("saving Users instance");
        try {
            getHibernateTemplate().save(transientInstance);
            log.debug("save successful");
        } catch (RuntimeException re) {
            log.error("save failed", re);
            throw re;
        }
    }

    public void delete(Users persistentInstance) {
        log.debug("deleting Users instance");
        try {
            getHibernateTemplate().delete(persistentInstance);
            log.debug("delete successful");
        } catch (RuntimeException re) {
            log.error("delete failed", re);
            throw re;
        }
    }

    public Users findById(java.lang.Integer id) {
        log.debug("getting Users instance with id: " + id);
        try {
            Users instance = (Users) getHibernateTemplate().get(
                "com.ssh.pojo.Users", id);
            return instance;
        } catch (RuntimeException re) {
            log.error("get failed", re);
            throw re;
        }
    }

    public List findByExample(Users instance) {
        log.debug("finding Users instance by example");
        try {
            List results = getHibernateTemplate().findByExample(instance);
            log.debug("find by example successful, result size: "
                      + results.size());
            return results;
        } catch (RuntimeException re) {
            log.error("find by example failed", re);
            throw re;
        }
    }

    public List findByProperty(String propertyName, Object value) {
        log.debug("finding Users instance with property: " + propertyName
                  + ", value: " + value);
        try {
            String queryString = "from Users as model where model."
                + propertyName + "= ?";
            return getHibernateTemplate().find(queryString, value);
        } catch (RuntimeException re) {
            log.error("find by property name failed", re);
            throw re;
        }
    }

    public List findByUname(Object uname) {
        return findByProperty(UNAME, uname);
    }

    public List findByUsex(Object usex) {
        return findByProperty(USEX, usex);
    }

    public List findAll() {
        log.debug("finding all Users instances");
        try {
            String queryString = "from Users";
            return getHibernateTemplate().find(queryString);
        } catch (RuntimeException re) {
            log.error("find all failed", re);
            throw re;
        }
    }

    public Users merge(Users detachedInstance) {
        log.debug("merging Users instance");
        try {
            Users result = (Users) getHibernateTemplate().merge(
                detachedInstance);
            log.debug("merge successful");
            return result;
        } catch (RuntimeException re) {
            log.error("merge failed", re);
            throw re;
        }
    }

    public void attachDirty(Users instance) {
        log.debug("attaching dirty Users instance");
        try {
            getHibernateTemplate().saveOrUpdate(instance);
            log.debug("attach successful");
        } catch (RuntimeException re) {
            log.error("attach failed", re);
            throw re;
        }
    }

    public void attachClean(Users instance) {
        log.debug("attaching clean Users instance");
        try {
            getHibernateTemplate().lock(instance, LockMode.NONE);
            log.debug("attach successful");
        } catch (RuntimeException re) {
            log.error("attach failed", re);
            throw re;
        }
    }

    public static UsersDAO getFromApplicationContext(ApplicationContext ctx) {
        return (UsersDAO) ctx.getBean("UsersDAO");
    }
}
  1. Users.hbm.xml

    注意:里面的 not null = ‘true’ 需要删除,不然做曾删改时会报错!

    如果没删传对象时所有属性都不能为空!

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.ssh.pojo.Users" table="users" catalog="myschool">
        <id name="uid" type="java.lang.Integer">
            <column name="uid" />
            <generator class="identity" />
        </id>
        <property name="uname" type="java.lang.String">
            <column name="uname" length="20" />
        </property>
        <property name="usex" type="java.lang.String">
            <column name="usex" length="2" />
        </property>
        <property name="ubirth" type="java.sql.Timestamp">
            <column name="ubirth" length="19"/>
        </property>
    </class>
</hibernate-mapping>

  1. 编写Service层的接口和实现类

    接口

package com.ssh.service;

import java.util.List;

import com.ssh.pojo.Users;

public interface UsersService {
	//查询所有用户
	List<Users> queryUsersList();
	
	//单值查询
	Users queryUsers();
	
	//添加
	void addUsers(Users users);
	
	//修改
	void updateUsers(Users users);
	
	//删除
	void delUsers(Users users);
}

? 实现类

package com.ssh.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import com.ssh.dao.UsersDAO;
import com.ssh.pojo.Users;

public class UsersServiceImpl implements UsersService {
	
	private UsersDAO usersDAO;
	
	public void setUsersDAO(UsersDAO usersDAO) {
		this.usersDAO = usersDAO;
	}
	
	//添加
	@Autowired
	@Transactional
	public void addUsers(Users users) {
		usersDAO.save(users);
		
	}
	
	//删除
	@Autowired
	@Transactional
	public void delUsers(Users users) {
		usersDAO.delete(users);
		
	}

	//单值查询
	public Users queryUsers(int uid) {
		return (Users) usersDAO.findById(uid);
	}

	
	//查询所有
	public List<Users> queryUsersList() {
		return usersDAO.findAll();
	}

	//修改
	@Autowired		 //自动装配
	@Transactional   //开启事务行为,曾删改
	public void updateUsers(Users users) {
		usersDAO.merge(users);
		
	}

}

  1. 编写action层
package com.ssh.action;

import java.util.List;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.ssh.pojo.Users;
import com.ssh.service.UsersService;

public class UsersAction extends ActionSupport {
	private UsersService usersService;
	
	private Users users;
	
	private List<Users> list;
	
	private int uid;
	
    //get/set方法
    
	public void setUsersService(UsersService usersService) {
		this.usersService = usersService;
	}
	
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		return super.execute();
	}
	
	//查询所有用户
	public String list() throws Exception {
		list = usersService.queryUsersList();
		return "list"; 
	}
	
	//单值查询
	public String query() throws Exception {
		Users user = usersService.queryUsers(uid);
		//获取session会话
		HttpSession session = ServletActionContext.getRequest().getSession();
		//给session赋值
		session.setAttribute("user", user);
		//返回
		return "query"; 
	}

	//添加
	public String add() throws Exception {
		usersService.addUsers(users);
		return list();
	}

	//删除
	public String del() throws Exception {
		usersService.delUsers(users);
		return list();
	}
	
	//修改
	public String update() throws Exception {
		usersService.updateUsers(users);
		return list();
	}
}

  1. applicationContext.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	">


	<bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName"
			value="com.mysql.jdbc.Driver">
		</property>
		<property name="url"
			value="jdbc:mysql://localhost:3306/myschool">
		</property>
		<property name="username" value="root"></property>
		<property name="password" value="root"></property>
	</bean>
	
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.MySQLDialect
				</prop>
			</props>
		</property>
		<property name="mappingResources">
			<list>
				<value>com/ssh/pojo/Users.hbm.xml</value></list>
		</property>
	</bean>
	
	<!-- 事务 -->
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>
	
	<!-- 注解  -->
	<tx:annotation-driven/>
	
	<!-- dao层 -->
	<bean id="usersDAO" class="com.ssh.dao.UsersDAO">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
	
	<!-- service层 -->
	<bean id="usersService" class="com.ssh.service.UsersServiceImpl">
		<property name="usersDAO" ref="usersDAO"/>
	</bean>
	
	<!-- action层 -->
	<bean id="usersAction" class="com.ssh.action.UsersAction">
		<property name="usersService" ref="usersService"/>
	</bean>
	
</beans>
  1. struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<package name="users" namespace="/users" extends="struts-default">
		<action name="usersAction_*" method="{1}" class="com.ssh.action.UsersAction">
			<result name="list">/list.jsp</result>
			<result name="query">/update.jsp</result>
		</action>
	</package>
</struts>    

3、视图层

index.jsp
<h1><a href="javaScript:location.href=‘users/usersAction_list‘">去list.jsp</a></h1>
list.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <base href="<%=basePath%>">

        <title>My JSP ‘list.jsp‘ starting page</title>

        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

    </head>

    <body>
        <table align="center" cellpadding="1" cellspacing="1" border="1" width="600px;">
            <caption><h1>用户信息</h1></caption>
            <caption><h3><a href="add.jsp">添加用户</a></h3></caption>
            <tr>
                <th>编号</th>
                <th>姓名</th>
                <th>性别</th>
                <th>生日</th>
                <th>操作</th>
            </tr>
            <c:forEach items="${list}" var="user">
                <tr>
                    <td>${user.uid }</td>
                    <td>${user.uname }</td>
                    <td>${user.usex }</td>
                    <td>${user.ubirth }</td>
                    <td>
                        <a href="javaScript:location.href=‘users/usersAction_query?uid=${user.uid}‘">修改</a>
                        &emsp;
                        <a href="javaScript:delUsers(${user.uid})">删除</a>
                    </td>
                </tr>
            </c:forEach>
        </table>
        <script>
            function delUsers(id){
                if(confirm("确认删除吗?")){
                    location.href="users/usersAction_del?users.uid="+id;
                }
            }
        </script>
    </body>
</html>

add.jsp
<form action="users/usersAction_add" method="post">
    <table  align="center" cellpadding="1" cellspacing="1" border="1" width="300px;">
        <caption><h3>添加用户</h3></caption>
        <tr>
            <th>姓名</th>
            <td><input name="users.uname" type="text"/></td>
        </tr>
        <tr>
            <th>性别</th>
            <td>
                <input name="users.usex" type="radio" value="男" checked="checked"/>男&emsp;
                <input name="users.usex" type="radio" value="女"/>女
            </td>
        </tr>
        <tr>
            <th>生日</th>
            <td><input name="users.ubirth" type="text"/></td>
        </tr>
        <tr>
            <td colspan="2">
                <input type="submit" value="提交"/>&emsp;
                <input type="button" value="返回" onclick="javaScript:history.back()"/>
            </td>
        </tr>
    </table>
</form>
update.jsp
<form action="users/usersAction_update" method="post">
    <table  align="center" cellpadding="1" cellspacing="1" border="1" width="300px;">
        <caption><h3>添加用户</h3></caption>
        <tr>
            <input type="hidden" name="users.uid" value="${user.uid}"/>
            <th>姓名</th>
            <td><input name="users.uname" type="text" value="${user.uname}"/></td>
        </tr>
        <tr>
            <th>性别</th>
            <td>
                <input name="users.usex" type="radio" value="男" checked="checked" />男&emsp;
                <input name="users.usex" type="radio" value="女" ${user.usex==‘女‘?‘checked‘:‘‘} />女
            </td>
        </tr>
        <tr>
            <th>生日</th>
            <td><input name="users.ubirth" type="text"  value="${user.ubirth}"/></td>
        </tr>
        <tr>
            <td colspan="2">
                <input type="submit" value="提交"/>&emsp;
                <input type="button" value="返回" onclick="javaScript:history.back()"/>
            </td>
        </tr>
    </table>
</form>
执行效果:

【MyEclipse】:SSH快速搭建

最终目录结构:

【MyEclipse】:SSH快速搭建

【MyEclipse】:SSH快速搭建

上一篇:Linux运维入坑之路--应用管理--zabbix(1)


下一篇:ArcGis:vs c#编程遇到问题The specified filename is invalid