- 浏览: 850336 次
- 性别:
- 来自: 深圳
-
文章分类
- 全部博客 (379)
- struts (5)
- hibernate (16)
- spring (16)
- ssh (20)
- MySQL (16)
- 数据库脚本 (2)
- DownLoad (1)
- GAE (5)
- Java (103)
- LoadRunner (2)
- VF (1)
- 学习资料 (24)
- 软件使用 (21)
- 通信类 (4)
- 生活 (3)
- J2ME (1)
- 心理学 (1)
- Linux (26)
- Android (3)
- Oracle (1)
- 面向对象概念&面试准备 (11)
- ExtJs (2)
- Google Map (1)
- Flex (47)
- 算法研究 (1)
- share (20)
- python (1)
- MongoDB (7)
- centos6 (13)
- C++ (8)
- DB2 (3)
- C# (1)
- 代码片段 (24)
- Lucene (2)
- php (1)
- NodeJS (1)
- Express (1)
最新评论
-
shua1991:
已阅,我表示同意。
Eclipse统计代码行数 -
nakedou:
写的不错,挺详细的
在CentOS中使用 yum 安装MongoDB及服务器端配置 -
sjp524617477:
好方法
Eclipse统计代码行数 -
simpletrc:
<script>ale ...
Java写到.txt文件,如何实现换行 -
csdn_zuoqiang:
Apache Ftp Server,目前是1.0.4,非常好的 ...
Apache FtpServer在64位系统下服务不能启动解决方法
本文利用一个简单的实例来实现数据表的增加、修改、删除和查询操作。使用Struts2.0、Spring2.0和Hibernate3。
数据库采用MySQL。现在开始进入开发,使用的IDE为MyEclipse6
- 首先创建数据库MyDB,在其中建立表UserInfo,表中包含3个字段
userid,username,password,其中userid为自动增长字段
- 创建MyEclipse下的Web Project,名称为UserWeb,在项目中加入Struts2,Spring2和Hibernate3所需要的类库文件。在添加spring2类库文件时,将配置文件applicationContext.xml放置到站点的WEB-INF目录下
- 在当前项目中使用了struts2,spring2,所以需要对两种框架进行整合,整合的步骤就是在web.xml中进行struts2和spring2的配置,配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.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>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
- 因为首先得是对简单表的增删改查操作,而且使用的是hibernate持久化,所以需要建立持久化类(JOPO类)和映射文件(hbm文件),在工程的src下建立com.frank.obj包,并在其中分别创建持久化类Userinfo.java和映射文件Userinfo.hbm.xml,建立过程可以通过IDE自动生成,代码如下:
- Userinfo.java
package com.frank.obj;
import java.lang.SuppressWarnings;
/**
* Userinfo entity.
*
* @author MyEclipse Persistence Tools
*/
@SuppressWarnings("serial")
public class Userinfo implements java.io.Serializable {
// Fields
private Integer userid;
private String username;
private String password;
// Constructors
/** default constructor */
public Userinfo() {
}
/** full constructor */
public Userinfo(String username, String password) {
this.username = username;
this.password = password;
}
// Property accessors
public Integer getUserid() {
return this.userid;
}
public void setUserid(Integer userid) {
this.userid = userid;
}
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
}
- Userinfo.hbm.xml
<?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 table="userinfo" catalog="mydb">
<id type="java.lang.Integer">
<column />
<generator />
</id>
<property type="java.lang.String">
<column length="20" not-null="true" />
</property>
<property type="java.lang.String">
<column length="20" not-null="true" />
</property>
</class>
</hibernate-mapping>
- 在src下建立一个名称为struts.xml的文件,此文件作为struts2的配置文件,配置诸如action、interceptor等,文件样式如下:
<?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>
<include file="struts-default.xml"/>
<package extends="struts-default">
</package>
</struts>
- 首先实现登录功能,登录成功后显示所有用户的列表
- 首先建立实现操作的业务类UserDAO,业务类中的方法利用hibernateTemplate(hibernate模板实现CRUD操作),其中先实现登录验证方法checkUser,代码如下:
package com.frank.dao;
import org.hibernate.HibernateException;
import java.util.List;
import org.springframework.orm.hibernate3.HibernateTemplate;
import com.frank.obj.Userinfo;
public class UserDAo {
private HibernateTemplate hibernateTemplate;
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public boolean checkUser(Userinfo user){
try{
String queryString="from UserInfo user where user.username=? and user.password=?";
List list=hibernateTemplate.find(queryString,new Object[]{user.getUsername(),user.getPassword()});
if(list.size()>0){
return true;
}else{
return false;
}
}catch(HibernateException ex){
ex.printStackTrace();
return false;
}
}
}
其中hibernateTemplate是以后利用Spring配置进行注入,利用此模板实现持久化操作
- 在本工程中,建立所有业务类的入口类RuleDAO,以后利用此入口类可以得到所有需要的业务类,代码如下:
package com.frank.dao;
public class RuleDAO {
private UserDAo userDAo;
public UserDAo getUserDAo() {
return userDAo;
}
public void setUserDAo(UserDAo userDAo) {
this.userDAo = userDAo;
}
}
- 然后建立struts2的控制器,在这里,建立一个所有控制器的父类,实现所有控制器的通用功能,以便其他的具体控制器继承。控制器调用业务类实现操作,并进行转发控制,父类BaseAction代码如下:
package com.frank.action;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.frank.dao.RuleDAO;
import com.opensymphony.xwork2.ActionSupport;
public class BaseAction extends ActionSupport {
public RuleDAO getRuleDAO(){
ServletContext servletContext=ServletActionContext.getServletContext();
WebApplicationContext webApplicationContext=WebApplicationContextUtils.getWebApplicationContext(servletContext);
return (RuleDAO)webApplicationContext.getBean("ruleDAO");
}
public HttpServletRequest request(){
return ServletActionContext.getRequest();
}
public HttpServletResponse response(){
return ServletActionContext.getResponse();
}
public HttpSession session(){
return ServletActionContext.getRequest().getSession();
}
public ServletContext application(){
return ServletActionContext.getServletContext();
}
}
- 现在开始建立具体的控制器类UserAction,以便实现对用户业务操作的各种控制,因为控制器要实现多种控制,所以我们放弃控制器默认的execute契约方法,使用我们自己定义的契约方法,比如实现登录控制的方法在这里为login,如果验证成功,返回SUCCESS,具体代码如下:
package com.frank.action;
import com.frank.obj.Userinfo;
public class UserAction extends BaseAction {
private Userinfo user;
public Userinfo getUser() {
return user;
}
public void setUser(Userinfo user) {
this.user = user;
}
public String login() throws Exception{
if(this.getRuleDAO().getUserDAo().checkUser(user)){
return SUCCESS;
}
return INPUT;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return super.execute();
}
}
因为控制要获取页面传入的数据,所以需要声明相应的数据成员(名称相同,而且必须要有符合命名规范的set和get方法),这样在页面提交数据并请求此控制器的时候,可以利用此数据成员获取用户输入的数据。比如这里利用Userinfo类型的user数据成员获取数据,以便调用业务方法进行适当的验证。明显的,我们知道验证的契约方法为我们自己定义的login,如果验证成功,返回SUCCESS
- 如果要使用此控制器,并使用我们定义的契约方法,我们需要在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>
<include file="struts-default.xml"/>
<package extends="struts-default">
<action method="login">
<result>userList.jsp</result>
<result >login.jsp</result>
</action>
</package>
</struts>
在此配置了一个控制器,其中控制器的请求名称为“login”,使用的契约方法为“login”,成功时转发到userList.jsp,失败时,返回到login.jsp
- 好了,现在进行登录页面的设计,非常的简单,只是要注意请求的action设置,还有就是输入单元的名称设置,新建一个名称为login.jsp,在此输入表单采用struts2的表单标签,所以需要在头部使用taglib指令引用struts2标签库,具体代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'login.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>
<h1>Welcome Login:</h1>
<s:form action="login.action">
<s:textfield label="username"/><br>
<s:textfield label="password"/><br>
<s:submit/>
</s:form>
</body>
</html>
- 建立一个名称为userList.jsp进行测试操作(成功的话转发到这个页面),在此只是简单的设置一些内容,以后进行修改
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'userList.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>
<H1>Login Success!!!</H1>
</body>
</html>
- 好了,现在可以开始进行spring的bean配置了,具体配置代码如下:
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<bean >
<property >
<value>com.mysql.jdbc.Driver</value>
</property>
<property >
<value>jdbc:mysql://localhost:3306/mydb</value>
</property>
<property >
<value>root</value>
</property>
<property >
<value>123456</value>
</property>
</bean>
<bean >
<property >
<ref bean="dataSource"/>
</property>
<property >
<list>
<value>com/frank/obj/Userinfo.hbm.xml</value>
</list>
</property>
<property >
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
</bean>
<bean >
<property >
<ref bean="sessionFactory"/>
</property>
</bean>
<bean >
<property >
<ref bean="hibernateTemplate"/>
</property>
</bean>
<bean >
<property >
<ref bean="userDAo"/>
</property>
</bean>
<bean >
<property >
<ref bean="sessionFactory"/>
</property>
</bean>
<tx:advice transaction-manager="txManager">
<tx:attributes>
<tx:method propagation="REQUIRED"/>
<tx:method propagation="REQUIRED"/>
<tx:method propagation="REQUIRED"/>
<tx:method propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution(* com.frank.dao..*.*(..))"/>
<aop:advisor advice-ref="myadvice" pointcut-ref="userPointcut"/>
</aop:config>
</beans>
- 部署、启动web服务器,测试(在建立的Userinfo表中增加几个用户作为测试用户名和密码)
- 如果启动时出现错误,需要删除你的类库文件中的asm-2.3.6.jar文件
- 验证如下:
输入正确的用户名和密码后,登录,出现如下页面,测试成功!!!
在上一篇文章中实现了基本的登录操作。当登录成功后,转发到userList.jsp页面,此页面显示现有的所有用户列表(只是模拟查询操作,没有实际的业务含义)。所以需要修改相应的组件。
首先,因为从login控制器转发到userList.jsp,所以控制器login需要为userList.jsp准备数据(当然,准备的是所有用户的信息)。在这里需要修改UserAction,在其中加入集合数据类users(List类型),此数据成员用于获取所有用户对象,然后提供给userList.jsp。
同样需要修改业务类UserDAO,增加获取用户集合的方法,然后在login中登录成功后进行调用,将集合数据放置到users数据成员中,进而提供给userList.jsp。修改后如下:
UserDAo.java
package com.frank.dao;
import org.hibernate.HibernateException;
import java.util.List;
import org.springframework.orm.hibernate3.HibernateTemplate;
import com.frank.obj.Userinfo;
public class UserDAo {
private HibernateTemplate hibernateTemplate;
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public boolean checkUser(Userinfo user){
try{
String queryString="from Userinfo user where user.username=? and user.password=?";
List list=hibernateTemplate.find(queryString,new Object[]{user.getUsername(),user.getPassword()});
if(list.size()>0){
return true;
}else{
return false;
}
}catch(HibernateException ex){
ex.printStackTrace();
return false;
}
}
public List getAllUsers(){
try{
String queryString="from Userinfo";
List list=hibernateTemplate.find(queryString);
return list;
}catch(HibernateException ex){
ex.printStackTrace();
return null;
}
}
}
UserAction.java
package com.frank.action;
import java.util.List;
import com.frank.obj.Userinfo;
public class UserAction extends BaseAction {
private Userinfo user;
private List users;
public Userinfo getUser() {
return user;
}
public void setUser(Userinfo user) {
this.user = user;
}
public String login() throws Exception{
if(this.getRuleDAO().getUserDAo().checkUser(user)){
users=this.getRuleDAO().getUserDAo().getAllUsers();
return SUCCESS;
}
return INPUT;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return super.execute();
}
public List getUsers() {
return users;
}
public void setUsrs(List users) {
this.users = users;
}
}
userList.jsp用户显示所有用户的信息,通过使用struts2的iterator标签实现对users集合的迭代操作,显示用户列表。修改如下:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'userList.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 width="80%" border="1">
<thead>
<tr>
<th width="20%">UserId</th>
<th width="20%">UserName</th>
<th width="20%">Password</th>
<th width="20%">Update</th>
<th width="20%">Delete</th>
</tr>
</thead>
<s:iterator value="users">
<tr>
<td width="20%"> <s:property value="userid"/></td>
<td width="20%"> <s:property value="username"/></td>
<td width="20%"> <s:property value="password"/></td>
<td width="20%"> <a href='<s:url value="userEdit.action"><s:param name="userid" value="userid"/></s:url>'>update</a></td>
<td width="20%"> <a href='<s:url value="userDelete.action"><s:param name="userid" value="userid"/></s:url>'>delete</a></td>
</tr>
</s:iterator>
</table>
</body>
</html>
红体部分作为后面的修改、删除用,稍后讲解。
当登录成功后,显示用户列表,如下:
红色部分为为对已存在在的数据进行修改和删除操作。此处使用了struts2的<s:url>标签。url标签可以定义一个控制器请求映射,其中包括<s:param>,作为请求参数。比如此处,请求参数名称为userid,而请求参数的值为当前记录的userid字段值(即主键编号),控制器可以获取请求参数的值,进而进行特定的处理。比如修改的时候,控制器可以通过当前的参数(<s:param>)获取需要修改的记录的编号。
修改的时候请求的控制器映射为userEdit.action,所以需要配置此控制器,修改后的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>
<include file="struts-default.xml"/>
<package name="default" extends="struts-default">
<action name="login" class="com.frank.action.UserAction" method="login">
<result>userList.jsp</result>
<result name="input">login.jsp</result>
</action>
<action name="userEdit" class="com.frank.action.UserAction" method="readyUpdate">
<result>userUpdate.jsp</result>
<result name="input">error.jsp</result>
</action>
</package>
</struts>
通过上述配置可知,userEdit同样对应UserAction类,但是契约方法为readyUpdate。成功后转发到userUpdate.jsp.
readyUpdate契约方法通过UserDAo业务对象中的方法获取需要修改的用户对象,然后转发到userUpdate.jsp,显示需要修改的用户数据。
所以UserDAo业务类中需要添加一个通过用户编号获取用户对象的方法,修改后如下:
package com.frank.dao;
import org.hibernate.HibernateException;
import java.util.List;
import org.springframework.orm.hibernate3.HibernateTemplate;
import com.frank.obj.Userinfo;
public class UserDAo {
private HibernateTemplate hibernateTemplate;
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public boolean checkUser(Userinfo user){
try{
String queryString="from Userinfo user where user.username=? and user.password=?";
List list=hibernateTemplate.find(queryString,new Object[]{user.getUsername(),user.getPassword()});
if(list.size()>0){
return true;
}else{
return false;
}
}catch(HibernateException ex){
ex.printStackTrace();
return false;
}
}
public Userinfo getUserById(int userid){
try{
Userinfo user=(Userinfo)hibernateTemplate.load(Userinfo.class, new Integer(userid));
return user;
}catch(HibernateException ex){
ex.printStackTrace();
return null;
}
}
public List getAllUsers(){
try{
String queryString="from Userinfo";
List list=hibernateTemplate.find(queryString);
return list;
}catch(HibernateException ex){
ex.printStackTrace();
return null;
}
}
}
UserAction新增的业务方法readyUpdate通过用户编号获取需要修改的用户对象,进而让userUpdate.jsp使用,修改后的代码如下:
package com.frank.action;
import java.util.List;
import com.frank.obj.Userinfo;
public class UserAction extends BaseAction {
private Userinfo user;
private List users;
private int userid;//新增的数据成员,用户获得列表页面传入的参数值
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public Userinfo getUser() {
return user;
}
public void setUser(Userinfo user) {
this.user = user;
}
public String readyUpdate() throws Exception{
user=this.getRuleDAO().getUserDAo().getUserById(userid);
if(user!=null){
return SUCCESS;
}
return INPUT;
}
public String login() throws Exception{
if(this.getRuleDAO().getUserDAo().checkUser(user)){
users=this.getRuleDAO().getUserDAo().getAllUsers();
return SUCCESS;
}
return INPUT;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return super.execute();
}
public List getUsers() {
return users;
}
public void setUsrs(List users) {
this.users = users;
}
}
新创建userUpdate.jsp,用于显示需要修改的用户信息,用户可以在此页面中对现有数据进行修改,然后持久化到数据库中,页面如下:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'userUpdate.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>
<h1>Update User</h1><br>
<s:form action="userUpdateDo.action">
<s:textfield name="user.userid" label="UserId:" readonly="true"/>
<s:textfield name="user.username" label="UserName:"/><br>
<s:textfield name="user.password" label="Password:"/><br>
<s:submit/>
</s:form>
</body>
</html>
这样,当在用户列表中点击“update”超链接时,显示如下:(此时编号只读)
现在我们可以在原有数据的基础上进行修改,然后提交持久化修改结果。
注意当提交修改结果的时候,请求的控制器映射为userUpdateDo.action,所以需要对此映射进行配置,同样使用UserAction,但是需要更改契约方法,此方法名称为updateUser,调用业务类UserDAo中的方法真正实现数据的更新。
修改后的struts.xml如下:(配置了一个新的action名称为userUpdateDo.action)
<?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>
<include file="struts-default.xml"/>
<package name="default" extends="struts-default">
<action name="login" class="com.frank.action.UserAction" method="login">
<result>userList.jsp</result>
<result name="input">login.jsp</result>
</action>
<action name="userEdit" class="com.frank.action.UserAction" method="readyUpdate">
<result>userUpdate.jsp</result>
<result name="input">error.jsp</result>
</action>
<action name="userUpdateDo" class="com.frank.action.UserAction" method="updateUser">
<result>userList.jsp</result>
<result name="input">error.jsp</result>
</action>
</package>
</struts>
成功后显示最新的结果
同时需要在业务类UserDAo中增加更新对象的方法,增加如下方法:
public boolean updateUser(Userinfo user){
try{
hibernateTemplate.update(user);
return true;
}catch(HibernateException ex){
ex.printStackTrace();
return false;
}
}
在控制器类调用此方法完成数据的更新,因为修改控制器的契约方法为updateUser,所以控制器UserAction修改如下:
package com.frank.action;
import java.util.List;
import com.frank.obj.Userinfo;
public class UserAction extends BaseAction {
private Userinfo user;
private List users;
private int userid;
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public Userinfo getUser() {
return user;
}
public void setUser(Userinfo user) {
this.user = user;
}
public String readyUpdate() throws Exception{
user=this.getRuleDAO().getUserDAo().getUserById(userid);
if(user!=null){
return SUCCESS;
}
return INPUT;
}
public String login() throws Exception{
if(this.getRuleDAO().getUserDAo().checkUser(user)){
users=this.getRuleDAO().getUserDAo().getAllUsers();
return SUCCESS;
}
return INPUT;
}
public String updateUser() throws Exception{
if(this.getRuleDAO().getUserDAo().updateUser(user)){
users=this.getRuleDAO().getUserDAo().getAllUsers();
return SUCCESS;
}
return INPUT;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return super.execute();
}
public List getUsers() {
return users;
}
public void setUsrs(List users) {
this.users = users;
}
}
红体为新增契约方法,注意在修改成功后,需要由users数据成员获取最新的用户列表,然后显示出来
当修改编号为1的用户时,将密码修改为888888
修改后显示最新结果的用户列表:
修改完成!!!
好了,完成了查询、修改,现在开始做删除操作,非常的简单!
在用户列表中,每条记录都有一个“delete”超链接,点击可以完成对当前记录的删除。同样,删除超链接用到了<s:url>标签,用来请求相应的控制器,并传递参数,参数值当然为当前记录的主键编号,名称为userid。如下:
<a href='<s:url value="userDelete.action"><s:param value="userid"/></s:url>'>delete</a>
此时需要配置userDelete.action控制器,配置如下:
<?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>
<include file="struts-default.xml"/>
<package extends="struts-default">
<action method="login">
<result>userList.jsp</result>
<result >login.jsp</result>
</action>
<action method="readyUpdate">
<result>userUpdate.jsp</result>
<result >error.jsp</result>
</action>
<action method="updateUser">
<result>userList.jsp</result>
<result >error.jsp</result>
</action>
<action method="deleteUser">
<result>userList.jsp</result>
<result >error.jsp</result>
</action>
</package>
</struts>
新配置的控制器同样对应UserAction,此控制器的契约方法为deleteUser,显示需要在UserAction中增加一个deleteUser方法,此方法调用业务类UserDAo中的deleteUser方法完成对当前用户数据的删除,所以需要在业务类UserDAo中增加deleteUser方法,方法如下:
public boolean deleteUser(Userinfo user){
try{
hibernateTemplate.delete(user);
return true;
}catch(HibernateException ex){
ex.printStackTrace();
return false;
}
}
UserAction中的契约方法deleteUser如下:
public String deleteUser() throws Exception{
Userinfo user=this.getRuleDAO().getUserDAo().getUserById(userid);
if(this.getRuleDAO().getUserDAo().deleteUser(user)){
users=this.getRuleDAO().getUserDAo().getAllUsers();
return SUCCESS;
}
return INPUT;
}
删除前如下:
点击第二条记录的“delete”,删除记录后结果如下:
删除成功!!!
现在可以开始做增加操作了,首先修改userList.jsp,在其中增加进行超链接,转发到增加页面userAdd.jsp,修改后如下:(很简单)
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'userList.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 width="80%" border="1">
<thead>
<tr>
<th width="20%">UserId</th>
<th width="20%">UserName</th>
<th width="20%">Password</th>
<th width="20%">Update</th>
<th width="20%">Delete</th>
</tr>
</thead>
<s:iterator value="users">
<tr>
<td width="20%"> <s:property value="userid"/></td>
<td width="20%"> <s:property value="username"/></td>
<td width="20%"> <s:property value="password"/></td>
<td width="20%"> <a href='<s:url value="userEdit.action"><s:param value="userid"/></s:url>'>update</a></td>
<td width="20%"> <a href='<s:url value="userDelete.action"><s:param value="userid"/></s:url>'>delete</a></td>
</tr>
</s:iterator>
</table>
<br>
<a href="userAdd.jsp">Add New User</a>
</body>
</html>
userAdd.jsp使用户增加数据,然后请求控制器进行增加操作,注意因为userid为自增字段,不用输入,页面代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'userAdd.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>
<h1>Add New User</h1><br>
<s:form action="userAdd.action">
<s:textfield label="UserName:"/><br>
<s:textfield label="Password:"/><br>
<s:submit/>
</s:form>
</body>
</html>
此时增加控制器映射为userAdd.action,所以需要进行配置,控制器中利用新的契约方法insertUser进行处理,此契约方法调用业务类UserDAo中行增的insertUser方法进行实际的持久化操作
UserDAo中新增方法如下:
public boolean insertUser(Userinfo user){
try{
hibernateTemplate.save(user);
return true;
}catch(HibernateException ex){
ex.printStackTrace();
return false;
}
}
UserAction中新契约方法如下:
public String insertUser() throws Exception{
if(this.getRuleDAO().getUserDAo().insertUser(user)){
users=this.getRuleDAO().getUserDAo().getAllUsers();
return
相关推荐
### 在Netbeans中使用Struts2.0+Spring2.5+Hibernate框架 #### 一、概述 在当今的企业级应用程序开发中,采用MVC(Model-View-Controller)架构模式的框架组合变得越来越普遍。其中,Struts2、Spring与Hibernate...
Struts2.0+Spring+Hibernate整合开发应用,内附struts2.0中文帮助手册,Struts2权威指南,和Myeclipse整合Struts2.0+Spring+Hibernate实现登录的源码.
标题与描述均提到了“Struts2.0+Spring2.0+Hibernate3.0整合开发快速入门”,这表明文章旨在介绍如何将这三个框架整合在一起进行企业级Java应用的开发。接下来,我们将深入分析和解释这部分内容所涉及的关键知识点。...
### Struts2.0+Spring2.0+Hibernate3.1 整合知识点详解 #### 一、项目背景与概述 随着企业应用的发展,越来越多的系统需要具备强大的业务逻辑处理能力以及灵活的数据持久化功能。Struts2作为MVC框架之一,Spring...
SSH(Spring、Struts2.0、Hibernate)是Java开发中的经典组合,它将Spring的强大功能、Struts2.0的优秀MVC架构以及Hibernate的高效持久化能力完美结合,为开发者提供了高效的开发环境。本文将通过一个实例,详细介绍...
这个"Struts2.0+spring2.0+hibernate开发JAR包"包含了这三个框架的核心库,方便开发者在项目中快速集成和使用。 **Struts2.0** 是一个基于 Model-View-Controller(MVC)架构的Java Web框架,用于构建动态、数据...
Struts2.0、Spring和Hibernate是Java Web开发中的三个核心框架,它们组合在一起被称为SSH(Struts2、Spring、Hibernate)集成框架。这个"struts2.0+spring+hibernate最新完整开发包"提供了这三个框架的最新版本,为...
Struts2.0、Spring2.5和Hibernate3.2是经典的Java企业级开发框架组合,通常被称为SSH(Struts2、Spring、Hibernate)集成框架。这个组合在2000年代末到2010年代初广泛应用于构建大型、复杂的企业级Web应用。SSH框架...
Struts2.0、Spring2.0和Hibernate3.0是Java Web开发中经典的MVC框架组合,被誉为SSH(Struts、Spring、Hibernate)框架。这个项目旨在展示如何将这三个框架进行集成,以便在实际应用中实现高效的数据访问和业务逻辑...
Struts2.0、Spring2.0、Hibernate3和DWR以及Freemarker是Java Web开发中的关键组件,它们各自负责不同的职责,并且通过合理的整合,可以构建出强大的企业级应用系统。 Struts2.0是Apache软件基金会下的一个开源MVC...
Struts2.0、Spring3.0和Hibernate3.2是Java Web开发中经典的三大框架,它们各自负责不同的职责,并通过整合实现高效、灵活的应用开发。这个Demo是开发者利用一个周末时间,结合网上找到的jar包,精心构建的SSH框架...
标题 "ibatis+struts2.0+spring" 指的是一个集成开发环境,它结合了三个重要的Java企业级框架:iBatis、Struts2.0和Spring。这个项目可能是为了帮助开发者理解如何在实际应用中整合这三个组件,以便构建更高效、可...
### Struts2.0 + Spring2.0 + Hibernate3.1 Web 应用知识点解析 #### 一、项目概述 本项目是一个基于Struts2.0、Spring2.0及Hibernate3.1的Web应用程序。它不仅实现了基本的CRUD(创建、读取、更新、删除)操作,...
Struts2.0、Spring2.0和Hibernate3.1是经典的Java企业级开发框架组合,通常被称为SSH(Struts2、Spring、Hibernate)架构。这个仓库管理系统是基于SSH搭建的,展示了如何在实际项目中整合这三个框架进行数据管理。 ...
在Web开发中,Struts2、Spring和Hibernate(简称SSH)是一种常见的三大框架整合,用于构建高效、灵活的企业级应用程序。这个整合方案利用Struts2作为MVC框架负责前端展示逻辑,Spring作为依赖注入(DI)和应用上下文...
在本文中,我们将详细介绍Struts2.0+Spring2.0+Hibernate3.1的登录及增删改查功能的完整演示示例。这个示例适合初学者进行学习。首先,需要了解这三种技术:Struts2、Spring和Hibernate,它们都是Java EE开发中不可...
总的来说,"Struts2.0+Hibernate+Spring"的整合学习涵盖了Web应用开发的多个方面,包括MVC设计模式、ORM技术、依赖注入和事务管理等,是Java Web开发者必备的技术栈。通过实际的案例操作,你可以更深入地理解这些...
目的:给学习SSH(Struts2.1.6+Spring2.0+Hibernate3.1)整合的学生。从使用角度看,Struts2的SSH事例比Struts1.x的SSH简单。至于声明式事务部分,你可以参见另外一个资源“Spring 2.0 + Struts 1.2 + Hibernate 3.2 +...
**三大框架SSH(Struts2.0+Spring+Hibernate)整合详解** SSH,即Struts2、Spring和Hibernate,是Java开发中常见的三大开源框架,它们分别负责MVC模式中的表现层、业务逻辑层和数据访问层。Struts2提供了一个强大的...
Struts2.0、Spring 和 Hibernate 是 Java Web 开发领域中的三大核心技术,它们共同构建了高效、灵活且可扩展的企业级应用框架。这个OA(Office Automation)办公自动化系统的实现,结合了这三者的优点,旨在提供一个...