我们先实现一个最基本的需求..添加,然后保存以后返回列表页面.这里先不包括验证什么的..都假设输入是正确的.验证到下一节说明..
我们从需求出发...一步步实现.我这里用的是myeclipse6.0 .struts2.0.16.spring2.0 hibernate3 mysql5.1
1.准备工作...当然是数据库了..在mysql数据库里,创建一个名为"user"的数据库.创建一个表也叫"user". 表里面就三个字段,id ,username ,age这里我的数据库名为 root 密码为11.
2.创建一个web project .工程名是myTest1.选择JAVA EE 5.0..点finish.
3导入hibernate.点工程右键,MyEclipse 选择Add hibernate capabilities.上面的不变.下面下面的JAR Library Installation .选择Copy cheched Library..点next .这里不需要修改,点Next.将最上面的勾去掉.我们等下自己写这个factory.点next.再将上面的勾去掉.点finish..
4.导入spring..点工程右键,MyEclipse 选择Add spring capabilities..其中Libraries选择前四个.还有一个Spring 2.0 Web libraries ..一共是五个..下面的JAR Library Installation .选择Copy cheched Library...这个.也就是将加入的jar包复制到lib目录下..点next .在产生applicationContext.xml的目录里选择WebRoot/WEB-INF 点next.把上面的√去掉.等下我们自己写...最后点FINISH.spring就导入成功了
5 导入struts2..现在myeclipse还不支持导入struts2.所以这里我们需要手动导入.方法也很简单..将struts2.0.16客户端的jar包里.选择freemarker.jar,ognl.jar.struts2-spring-plugin.jar.xwork.jar.struts-core.jar.这里不需要导入common-logging.jar.因为spring里面已经有这个jar包了.所以不需要再次导入..然后在src目录下创建一个struts.xml..这样就差不多了.
这里特别注意一下.需要将common-pool.jar包放到Lib目录下..貌似myeclipse6.5就会自动导入.6.0不会的说
6 准备工作差不多了.终于开始写页面了...首先,我们先做一个save.jsp..里面有一个表单,输入名字和年龄..
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'save.jsp' starting page</title>
</head>
<body>
<s:form action="userAction">//注意,我们这里选择模型驱动.而不是字段驱动.
还有,这个action name 设置为 userAction ..
<s:textfield name="user.username" label="username"></s:textfield>
<s:textfield name="user.age" label="age"></s:textfield>
<s:submit></s:submit>
</s:form>
</body>
</html>
7创建bean..这个很简单.就是在com.test.model下面创建一个User.java.标准的bean.没啥可说的
package com.test.model;
public class User {
private Integer id;
private String username;
private int age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
7 开始写action .首先在src下面创建一个com.test.action包.在这个包下面创建UserAction.java
package com.test.action;
import com.opensymphony.xwork2.ActionSupport;
import com.test.model.User;
import com.test.service.UserService;
public class UserAction extends ActionSupport {
private UserService userservice;
private User user;
public UserService getUserservice() {
return userservice;
}
public void setUserservice(UserService userservice) {
this.userservice = userservice;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute(){
userservice.saveUser(user);
return SUCCESS;
}
}
这里在流程上已经有点偏了.因为这里我直接写出了userserive.这个类我们还没实现..而在实现这个service以前我们又必须实现userDAO.下一步,我们实现userDAO
8 新建一个包.com.test.DAO 这个是存放DAO接口的..spring要求我们必须面向接口编程 创建一个UserDAO.java
package com.test.DAO;
//这里定义了五个方法.分别是增删改查..查里面有两个,一个是根据ID查,一个是查所有.
import java.util.List;
import com.test.model.User;
public interface UserDAO {
public void addUser(User user);
public void delUser(User user);
public void updateUser(User user);
public User selectById(Integer id);
public List<User> selectAll();
}
9 创建一个com.test.DAO.impl包.实现上面定义的UserDAO ...类名是UserDAOimpl
package com.test.DAO.impl;//这里结合了hibernate.所以我们继承 HibernateDaoSupport来实现相应的操作.都很简单的..就要注意下selectALL方法.里面用到了hql语句
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.test.DAO.UserDAO;
import com.test.model.User;
public class UserDAOimpl extends HibernateDaoSupport implements UserDAO {
@Override
public void addUser(User user) {
this.getHibernateTemplate().save(user);
}
@Override
public void delUser(User user) {
this.getHibernateTemplate().delete(user);
}
@Override
@SuppressWarnings("unchecked")
public List<User> selectAll() {
String hql= "from User";
return (List<User>)this.getHibernateTemplate().find(hql);
}
@Override
public User selectById(Integer id) {
return (User)this.getHibernateTemplate().get(User.class, id);
}
@Override
public void updateUser(User user) {
this.getHibernateTemplate().update(user);
}
}
10创建好了DAO实现数据库的操作..现在开始写Service业务层...由于我们没有任何事务,所以Service就是调用一次DAO层...首先还是创建一个包来放接口.com.test.service ..里面的类UserService.java
package com.test.service;
import java.util.List;
import com.test.model.User;
public interface UserService {//这里也对应DAO.写了五个方法..
public void saveUser(User user);
public void delUser(User user);
public void updateUser(User user);
public User findById(int id);
public List<User> findAll();
}
11同理,当然是写这个service的实现类..com.test.service.impl包..UserServiceImpl.java
package com.test.service.impl;//这里没写什么业务,只是调用了一次dao.
import java.util.List;
import com.test.DAO.UserDAO;
import com.test.model.User;
import com.test.service.UserService;
public class UserServiceImpl implements UserService {
private UserDAO userdao;
public UserDAO getUserdao() {
return userdao;
}
public void setUserdao(UserDAO userdao) {
this.userdao = userdao;
}
@Override
public void delUser(User user) {
userdao.delUser(user);
}
@Override
public List<User> findAll() {
return userdao.selectAll();
}
@Override
public User findById(int id) {
return userdao.selectById(id);
}
@Override
public void saveUser(User user) {
userdao.addUser(user);
}
@Override
public void updateUser(User user) {
userdao.updateUser(user);
}
}
12 最重要的地方开始了.就是配置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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">//配置dataSource.这个部分在hibernate里面说的比较多了.不多说了
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost/user</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>11</value>
</property>
</bean>
<bean id="factory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="mappingResources">
<value>com/test/model/User.hbm.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
<bean id="UserDao" class="com.test.DAO.impl.UserDAOimpl">
<property name="sessionFactory">//这个部分也说明了.其实就是在DAO里面注入一个factory.我们在调用this.getHibernateTemplate() 的时候必须有这个factory.
<ref bean="factory"/>
</property>
</bean>
<bean id="UserService" class="com.test.service.impl.UserServiceImpl">
<property name="userdao">//在类UserServiceImpl里面定义了一个userdao.这里的这个name属性必须和那里的名字相同.因为要调用那里的set方法.
<ref bean="UserDao"/>//依赖注入.spring里面说了很多了...
</property>
</bean>
<bean id="userAction" class="com.test.action.UserAction">
<property name="userservice">
<ref bean="UserService" />
</property>
</bean>
<bean id="listActionClass" class="com.test.action.ListAction">
<property name="service">//这个是配置下面list页面的时候用的...先放上来了...免得重复黏贴
<ref bean="UserService"/>
</property>
</bean>
</beans>
13 save页面的最后一步当然是配置struts.xml.结果页面下面再说
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="user" extends="struts-default">
<action name="userAction" class="userActionClass">
<result type="redirect">ListAction.action</result>//这里重定向到ListAction.显示list页面
<result name="input">/save.jsp</result>
</action>
<action name="ListAction" class="listActionClass">
<result >/list.jsp</result>//list页面的action配置
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
14 至此,save页面已经全部完成.但是提交以后总要显示列表信息吧..也就是将数据库里的数据全部取出来显示.所以,我们在com.test.action下面再写一个action.叫ListAction.java
package com.test.action;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.test.service.UserService;
public class ListAction extends ActionSupport {
private UserService service;
public UserService getService() {
return service;
}
public void setService(UserService service) {
this.service = service;
}
@SuppressWarnings("unchecked")
@Override
public String execute() throws Exception {
Map request = (Map)ActionContext.getContext().get("request");获取一个request的MAP对象
request.put("list", service.findAll());//放入MAP
return SUCCESS;
}
}
15 这里,还忘记一个重要的东西..就是bean对应的hbm.xml 因为我使用Middlegen自动生成的,所以代码多一些..ID的生产策略是加一..
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
<!--
Created by the Middlegen Hibernate plugin 2.1
http://boss.bekk.no/boss/middlegen/
http://www.hibernate.org/
-->
<class
name="com.test.model.User"
table="user"
>
<meta attribute="class-description" inherit="false">
@hibernate.class
table="user"
</meta>
<id
name="id"
type="java.lang.Integer"
column="id"
>
<meta attribute="field-description">
@hibernate.id
generator-class="assigned"
type="java.lang.Integer"
column="id"
</meta>
<generator class="increment" />
</id>
<property
name="username"
type="java.lang.String"
column="username"
not-null="true"
length="50"
>
<meta attribute="field-description">
@hibernate.property
column="username"
length="50"
not-null="true"
</meta>
</property>
<property
name="age"
type="int"
column="age"
not-null="true"
length="10"
>
<meta attribute="field-description">
@hibernate.property
column="age"
length="10"
not-null="true"
</meta>
</property>
<!-- Associations -->
</class>
</hibernate-mapping>
16 我忘记了一个非常重要的配置..web.xml.这么重要的东西.不多说了.
<?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.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
17又忘记一个jar包.就是jdbc连mysql的驱动包..我用的是mysql-connector-java-5.1.7-bin.jar
18 最后是我们的列表页面.list.jsp .里面用到ognl表达式.有空得去学习下
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'list.jsp' starting page</title>
</head>
<body>
<h1><font color="red"><center>User List</center></font></h1>
<table align="center" border="1" width="80%">
<tr>
<td>序号
</td>
<td>名字
</td>
<td>年龄
</td>
<td>删除
</td>
<td>修改
</td>
</tr>
<s:iterator value="#request.list" id="us">
<tr>
<td><s:property value="#us.id"/>
</td>
<td><s:property value="#us.username"/>
</td>
<td><s:property value="#us.age"/>
</td>
<td><s:a href="deleteUser.action?user.id=%{#us.id}">删除</s:a>
</td>
<td><s:a href="updatePUser.action?user.id=%{#us.id}">修改</s:a>
</td>
</tr>
</s:iterator>
</table>
</body>
</html>
19 最后..终于测试通过.
SSH框架的第一个整合例子
最新推荐文章于 2022-03-01 09:22:50 发布