您的位置:首页 > 编程语言 > Java开发

Struts + Spring + Hibernate基础框架搭建2

2015-06-24 23:53 549 查看
上一篇已经搭建了一个最基本的ssh开发环境。也能基本运行了,但是没有写实际的代码,只是把环境给配置好了。这次我们来写一个简单的例子,这个例子是参考网上的一个工程,本人也是菜鸟,哈哈

完整的工程目录如下:



首先我们创建好Userinfo.java , BaseDao.java , UserManagerService.java还有UserManagerAct.java这三个文件。并放到相应的包里面去分别是org.ssh.pojo,org.ssh.dao,org.ssh.service,org.ssh.action。如上图所示;下面逐一分析这个几个类

1.Userinfo.java 这是一个pojo类,也就是实体类。先看看代码先

[java] view
plaincopy

package org.ssh.pojo;

/**

* 用户信息

*/

public class Userinfo implements java.io.Serializable {

private static final long serialVersionUID = 5866268712137826050L;

/**用户id*/

private Integer id;

/**用户名*/

private String uname;

/**性别*/

private String sex;

/**密码*/

private String password;

/**电话号码*/

private String telphone;

/**住址*/

private String address;

public Userinfo() {

}

public Integer getId() {

return this.id;

}

public void setId(Integer id) {

this.id = id;

}

public String getUname() {

return this.uname;

}

public void setUname(String uname) {

this.uname = uname;

}

public String getSex() {

return this.sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public String getPassword() {

return this.password;

}

public void setPassword(String password) {

this.password = password;

}

public String getTelphone() {

return this.telphone;

}

public void setTelphone(String telphone) {

this.telphone = telphone;

}

public String getAddress() {

return this.address;

}

public void setAddress(String address) {

this.address = address;

}

}

这个类主要是用来描述一个实体对象,跟数据库的用户表产生映射关系,所以我们还要在UserInfo.java的同级目录下创建一个hibernate的描述文件Userinfo.hbm.xml,内容如下:

[html] view
plaincopy

<?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">

<!--

Mapping file autogenerated by MyEclipse Persistence Tools

-->

<hibernate-mapping>

<class name="org.ssh.pojo.Userinfo" table="userinfo" catalog="myssh">

<id name="id" type="java.lang.Integer">

<column name="id" />

<generator class="assigned"></generator>

</id>

<property name="uname" type="java.lang.String">

<column name="uname" length="30" not-null="true" unique="true"/>

</property>

<property name="sex" type="java.lang.String">

<column name="sex" length="10" not-null="true" />

</property>

<property name="password" type="java.lang.String">

<column name="password" length="20" not-null="true" />

</property>

<property name="telphone" type="java.lang.String">

<column name="telphone" length="15" />

</property>

<property name="address" type="java.lang.String">

<column name="address" length="50" />

</property>

</class>

</hibernate-mapping>

这个内容应该不难理解,其实就是描述一下这个类关联数据库的那个表,那个属性关联哪一列,数据类型是什么...,这里不详细研究了,下次用注解就不用这个文件了。

2.BaseDao.java 这个类主要实现数据库的操作,这里只是一些简单的实现。上代码

[java] view
plaincopy

package org.ssh.dao;

import java.io.Serializable;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/**

* 数据库io操作

*/

public class BaseDao extends HibernateDaoSupport {

/**查询*/

public <T> List<T> getObjects(String queryString){

return (List<T>)this.getHibernateTemplate().find(queryString);

}

/**查询所有*/

public <T> List<T> getAllObjects(Class<T> clazz){

return this.getHibernateTemplate().loadAll(clazz);

}

/**添加一个*/

public <T> void addObject(T clazz){

this.getHibernateTemplate().save(clazz);

}

/**更新指定的*/

public <T> void updateObject(T clazz){

this.getHibernateTemplate().update(clazz);

}

/**删除指定的*/

public <T> void deleteObject(T clazz){

this.getHibernateTemplate().delete(clazz);

}

/**通过id获取*/

public <T> T getObject(Class<T> clazz,Serializable id){

return this.getHibernateTemplate().get(clazz, id);

}

}

3.UserManagerService.java 用户管理业务逻辑的实现,这个是业务逻辑层,业务逻辑在这里实现,这里操作数据库是调用上一层dao层代码。上代码

[java] view
plaincopy

package org.ssh.service;

import java.util.List;

import org.ssh.dao.BaseDao;

/**

* 用户管理业务逻辑的实现

* */

public class UserManagerService<T> {

private BaseDao dao;

public T doLogin(String userName,String password) throws Exception{

if(userName == null || password == null) return null;

String queryString = "SELECT u FROM Userinfo u WHERE u.uname = '"+userName +"' AND u.password = "+password;

List<T> users = dao.getObjects(queryString);

return users.get(0);

}

public List<T> queryUsers(String uname,Class<T> clazz){

if(uname == null || "".equals(uname))

return dao.getAllObjects(clazz);

String queryString = "SELECT u FROM Userinfo u WHERE u.uname like '"+uname+"%'";

return dao.getObjects(queryString);

}

public void addUser(T user) throws Exception{

dao.addObject(user);

}

public void modifyUser(T user) throws Exception{

dao.updateObject(user);

}

public void deleteUser(int id,Class<T> clazz) throws Exception{

T u = dao.getObject(clazz, id);

dao.deleteObject(u);

}

public T getUser(Class<T> clazz, int id){

return dao.getObject(clazz, id);

}

public BaseDao getDao() {

return dao;

}

public void setDao(BaseDao dao) {

this.dao = dao;

}

}

4.UserManagerAct.java 这是一个action,充当视图控制器的角色,也就是mvc中的c。直接与外部打交道,可以供客户端调用,也可以和jsp等调用,这一层通过调用业务逻辑层来完成功能。不直接操作数据库,业务逻辑也不在这里实现。一些界面控制可以在这里实现,上代码

[java] view
plaincopy

package org.ssh.action;

import java.util.List;

import org.apache.struts2.ServletActionContext;

import org.ssh.pojo.Userinfo;

import org.ssh.service.UserManagerService;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

/**

* 用户管理控制器

* */

public class UserManagerAct extends ActionSupport {

private static final long serialVersionUID = -281275682819237996L;

private Userinfo user = new Userinfo();

private UserManagerService<Userinfo> userService;

private List<Userinfo> users;

private String searchText;

public String doLogin(){

if(this.user.getUname() == null || this.user.getPassword() == null) return INPUT;

try {

Userinfo user = userService.doLogin(this.user.getUname(), this.user.getPassword());

if(user != null){

ActionContext.getContext().getSession().put("userinfo", user);

return doQuery();

}else

return INPUT;

} catch (Exception e) {

return ERROR;

}

}

public String doQuery(){

searchText = getParam("queryText");

users = userService.queryUsers(searchText,Userinfo.class);

return SUCCESS;

}

public String doAdd(){

String result = "";

try {

String param = getParam("param");

if(Integer.parseInt(param) > 0){

user.setId(0);

userService.addUser(user);

result = doQuery();

}else

result = "addUser";

} catch (Exception e) {

e.printStackTrace();

}

return result;

}

public String doEdit(){

try {

Integer param = Integer.parseInt(getParam("param"));

if(param == 0){

Integer id = Integer.parseInt(getParam("id"));

user = userService.getUser(Userinfo.class, id);

return "editUser";

}else if(param == 1){

userService.modifyUser(user);

}

} catch (Exception e) {

e.printStackTrace();

}

return doQuery();

}

public String doDelete(){

try {

Integer param = Integer.parseInt(getParam("id"));

userService.deleteUser(param,Userinfo.class);

} catch (Exception e) {

e.printStackTrace();

}

return doQuery();

}

protected String getParam(String key){

return ServletActionContext.getRequest().getParameter(key);

}

public UserManagerService<Userinfo> getUserService() {

return userService;

}

public void setUserService(UserManagerService<Userinfo> userService) {

this.userService = userService;

}

public List<Userinfo> getUsers() {

return users;

}

public Userinfo getUser() {

return user;

}

public void setUser(Userinfo user) {

this.user = user;

}

public String getSearchText() {

return searchText;

}

public void setSearchText(String searchText) {

this.searchText = searchText;

}

}

至此所有的java代码已经完成接下来我们还要配置一些内容,目的是让ssh使用上面的代码。

1.配置applicationContext.xml文件

[html] view
plaincopy

<?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">
<!-- 数据库配置 -->

<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/myssh">

</property>

<property name="username" value="anan"></property>

<property name="password" value="xxxxxx"></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>

<prop key="hibernate.hbm2ddl.auto">update</prop>

</props>

</property>

<!-- 配置实体描述文件 -->

<property name="mappingResources">

<list>

<value>org/ssh/pojo/Userinfo.hbm.xml</value>

</list>

</property>

</bean>

<bean id="userAct" class="org.ssh.action.UserManagerAct" scope="prototype">

<property name="userService" ref="userService"></property>

</bean>

<bean id="userService" class="org.ssh.service.UserManagerService">

<property name="dao" ref="dao"></property>

</bean>

<bean id="dao" class="org.ssh.dao.BaseDao">

<property name="sessionFactory" ref="sessionFactory"/>

</bean>

</beans>

这里主要是配置了hibernate加载我们的实体类Userinfo

同时配置了spring加载我们的dao,service和action...

2.struts.xml 配置action

[html] view
plaincopy

<?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>

<constant name="struts.objectFactory" value="spring" />

<package name="MySSH" extends="struts-default">

<global-results>

<result name="error">/jsp/error.jsp</result>

<result name="success">/jsp/success.jsp</result>

</global-results>

<action name="userManagerAct" class="userAct" method="doLogin">

<result name="login">/index.jsp</result>

</action>

<action name="query" class="userAct" method="doQuery" />

<action name="delete" class="userAct" method="doDelete" />

<action name="edit" class="userAct" method="doEdit">

<result name="editUser">/jsp/editUser.jsp</result>

</action>

<action name="add" class="userAct" method="doAdd">

<result name="addUser">/jsp/addUser.jsp</result>

</action>

</package>

</struts>

3.最后配置web.xml

[html] view
plaincopy

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0"

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_3_0.xsd">
<display-name></display-name>

<!-- Spring配置和监听start -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/classes/application*.xml</param-value>

</context-param>

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<!--end-->

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

<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>*.action</url-pattern>

</filter-mapping></web-app>

好了,配置完成了。接下来还要写一些jsp文件让这个蛋疼的东西飞起来

1.index.jsp

[html] view
plaincopy

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%

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>用户登录</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">

</head>

<body>

<font size="4">这个一个 struts2,spring 和 hibernate 使用的例子。请用以下账号密码登录<br>

默认账号/密码: <font color="red">anan/123</font><br>

<br>请事先在数据库插入用户信息

</font>

<br>

<br>

<form action="userManagerAct.action" method="post">

<table>

<tr>

<td>username</td><td><input type="text" name="user.uname"/></td>

<td>password</td><td><input type="password" name="user.password"/></td><td>密 码</td><td></td>

</tr>

<tr>

<td colspan="2">

<input type="submit" value="submit">

<input type="reset" value="reset">

</td>

</tr>

</table>

</form>

</body>

</html>

2.addUser.jsp

[html] view
plaincopy

<%@ 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>user list 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">

</head>

<body>

<form action="add.action" method="post">

<table width="500" align="center">

<caption>ADD USER INFORMATION</caption>

<tr height="26px">

<td width="150px" align="right">UNAME</td>

<td width="350px">

<input type="hidden" name="param" value="1"/>

<input type="text" name="user.uname" value="${user.uname }"/>

</td>

</tr>

<tr height="26px">

<td align="right">PASSWORD</td>

<td><input type="password" name="user.password" value="${user.password }"/></td>

</tr>

<tr height="26px">

<td align="right">SEX</td>

<td>

<select name="user.sex">

<option value="male">male</option>

<option value="female">female</option>

</select>

</td>

</tr>

<tr height="26px">

<td align="right">TELPHONE</td>

<td><input type="text" name="user.telphone" value="${user.telphone }"/></td>

</tr>

<tr height="26px">

<td align="right">ADDRESS</td>

<td><input type="text" name="user.address" value="${user.address }"/></td>

</tr>

<tr height="26px">

<td colspan="2" align="center" width="500">

<input type="submit" value="Save"/>

<input type="button" value="Back" onclick="window.history.back(-1)"/>

</td>

</tr>

</table>

</form>

</body>

</html>

3.editUser.jsp

[html] view
plaincopy

<%@ 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>user list 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">

</head>

<body>

<form action="edit.action" method="post">

<table width="500" align="center">

<caption>User Information Edit</caption>

<tr height="26px">

<td width="150px" align="right">NO.</td>

<td width="350px">

<input type="text" name="user.id" value="${user.id }" readonly="readonly"/>

<input type="hidden" name="user.password" value="${user.password }"/>

<input type="hidden" name="param" value="1"/>

</td>

</tr>

<tr height="26px">

<td width="160" align="right">UNAME</td>

<td><input type="text" name="user.uname" value="${user.uname }"/></td>

</tr>

<tr height="26px">

<td width="70" align="right">SEX</td>

<td>

<select name="user.sex">

<option value="male">male</option>

<option value="female">female</option>

</select>

</td>

</tr>

<tr height="26px">

<td width="150" align="right">TELPHONE</td>

<td><input type="text" name="user.telphone" value="${user.telphone }"/></td>

</tr>

<tr height="26px">

<td width="300" align="right">ADDRESS</td>

<td><input type="text" name="user.address" value="${user.address }"/></td>

</tr>

<tr height="26px">

<td colspan="2" align="center">

<input type="submit" value="Save"/>

<input type="button" value="Back" onclick="window.history.back(-1)"/>

</td>

</tr>

</table>

</form>

</body>

</html>

4.error.jsp

[html] view
plaincopy

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%

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 'error.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>

登录失败,2秒后自动转到登录页面....

<script type="text/javascript">

setTimeout(reDo, 2000);

function reDo(){

window.location.href = "/struts2_spring_hibernate1.0/index.jsp";

}

</script>

</body>

</html>

5.sucess.jsp

[plain] view
plaincopy

<%@ 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>user list 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">

</head>

<body>

<form action="query.action" method="post">

<table align="center">

<tr>

<td style="vertical-align: middle;">USERNAME

<input type="text" style="width: 300px;height: 30px;font-size: 16px" name="queryText" value="${searchText }"/>

<input type="submit" value="Query" style="width: 100px;height: 30px;font-size: 16px"/>

<input type="button" value="Add" style="width: 100px;height: 30px;font-size: 16px"

onclick="window.location.href='add.action?param=0'"/>

</td>

</tr>

</table>

</form>

<table align="center" border="1" cellpadding="0" cellspacing="0" bordercolor="#3366cc">

<tr align="center" bgcolor="#3399cc" height="26px">

<td width="100">NO.</td>

<td width="160">UNAME</td>

<td width="70">SEX</td>

<td width="150">TELPHONE</td>

<td width="300">ADDRESS</td>

<td width="120">EDIT/DELETE</td>

</tr>

<c:forEach var="user" items="${users }">

<tr align="center" height="24px">

<td width="100">${user.id}</td>

<td width="160">${user.uname}</td>

<td width="70">${user.sex }</td>

<td width="150">${user.telphone }</td>

<td width="300">${user.address}</td>

<td width="120">

<a href="edit.action?param=0&id=${user.id}">编辑</a>

<a href="delete.action?id=${user.id}">删除</a>

</td>

</tr>

</c:forEach>

</table>

</body>

</html>

全部文件应该都搞定了,相比上一次的工程需要添加一些jar包,稍后我把整个工程代码上传。或者大家自己去找缺少的jar包

运行一下:





程序运行成功,有点成就感...

总结一下:

基于ssh开发环境搭建相比起来确实麻烦不少,特别是jar的依赖,而且要整套搞起来东西还是挺多的。但是搞鼓完了之后收获还是蛮大的,之前学习的很多概念性的东西都不理解,搞完这个之后貌似都有点感觉了。ssh真不愧是经典的框架之一,下次我将用注解来实现

工程下载地址:

http://download.csdn.net/detail/yunji3344/4890206
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: