1. 数据库:

Column Type Comment
id int(11) Auto Increment  
name varchar(50) NULL  
url varchar(255) NULL  

2.整体架构:

3.model层product.java

package com.zhoumo.model;

public class Product {
private Integer id;
private String name;
private String url;

//无参数的构造器
public Product()
{
}

//id属性的setter和getter方法
public void setId(Integer id)
{
this.id = id;
}
public Integer getId()
{
return this.id;
}

//name属性的setter和getter方法
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
} //age属性的setter和getter方法
public void setUrl(String url)
{
this.url = url;
}
public String getUrl()
{
return this.url;
}
}

4.数据库映射文件product.hbm.xml

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.zhoumo.model">
<class name="Product" table="product">
<!-- 映射标识属性 -->
<id name="id" column="Id"
type="int">
<!-- 指定主键生成器策略 -->
<generator class="increment"/>
</id>
<!-- 映射普通属性 -->
<property name="name" type="string"/>
<property name="url" type="string"/>
</class>
</hibernate-mapping>

5.DAO层

public interface ProductDao {
/**
* 保存实例
* @param  需要保存的实例
* @return 刚刚保存的实例的标识属性值
*/
Integer save(Product product);

}

6.DAO实现层

package com.zhoumo.dao.impl;
import com.zhoumo.model.Product;
import com.zhoumo.dao.*;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class ProductDaoImpl extends HibernateDaoSupport implements ProductDao {

/**
* 保存Person实例
* @param person 需要保存的Person实例
* @return 刚刚保存的Person实例的标识属性值
*/
public Integer save(Product product)
{
return (Integer)getHibernateTemplate()
.save(product);
}

7. Service层

package com.zhoumo.service;

import com.zhoumo.model.Product;

public interface ProductService{
Integer save(Product product);
}

8. Service实现层

package com.zhoumo.service.impl;

import com.zhoumo.dao.ProductDao;
import com.zhoumo.model.Product;
import com.zhoumo.service.ProductService;

public class ProductServiceImpl implements ProductService{

private ProductDao productDao;
//依赖注入DAO组件所需的setter方法
public void setProductDao(ProductDao productDao)
{
this.productDao = productDao;
}
public Integer save(Product product) {
// TODO Auto-generated method stub
return productDao.save(product);
}

}

9. Action层

package com.zhoumo.action;

import com.opensymphony.xwork2.Action;
import com.zhoumo.model.Product;
import com.zhoumo.service.ProductService;

public class AddProductAction implements Action
{
//下面是用于封装用户请求参数的属性
private Product product;
//用于封装处理结果的属性
private String tip;
//系统所用的业务逻辑组件
private ProductService productService;
//设置注入业务逻辑组件所必需的setter方法
public void setProductService(ProductService productService)
{
this.productService = productService;
}

//person属性的setter和getter方法
public void setProduct(Product product)
{
this.product = product;
}
public Product getProduct()
{
return this.product;
}

//tip属性的setter和getter方法
public void setTip(String tip)
{
this.tip = tip;
}
public String getTip()
{
return this.tip;
}
public String execute() throws Exception {
// TODO Auto-generated method stub
if(productService.save(product)>0)
{
setTip("哈哈,注册成功!");
return SUCCESS;
}
else
{
setTip("哈哈,注册失败!");
return ERROR;
}

}
}

10.配置文件:

structs.xml

<?xml version="1.0" encoding="GBK"?>
<!-- 指定Struts 2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<!-- Struts 2配置文件的根元素 -->
<struts>
<!-- 配置了系列常量 -->
<constant name="struts.i18n.encoding" value="GBK"/>
<constant name="struts.devMode" value="true"/>
<package name="xqh" extends="struts-default">
<!-- 定义处理用户请求的Action,指定该Action的实现类-->
<action name="AddProduct"
class="com.zhoumo.action.AddProductAction">
<!-- 为两个逻辑视图配置视图页面 -->
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
<!-- 让用户直接访问该应用时列出所有视图页面 -->
<action name="*">
<result>/{1}.jsp</result>
</action>
</package>
</struts>

11. applicationContext.xml文件

<?xml version="1.0" encoding="GBK"?>
<!-- 指定Spring配置文件的Schema信息 -->
<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-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<!-- 定义数据源Bean,使用C3P0数据源实现 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<!-- 指定连接数据库的驱动 -->
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<!-- 指定连接数据库的URL -->
<property name="jdbcUrl" value="jdbc:mysql://10.0.7.99:3306/auction?useUnicode=true&amp;characterEncoding=UTF-8"></property>
<!-- 指定连接数据库的用户名 -->
<property name="user" value="root"/>
<!-- 指定连接数据库的密码 -->
<property name="password" value="12"/>
<!-- 指定连接数据库连接池的最大连接数 -->
<property name="maxPoolSize" value="40"/>
<!-- 指定连接数据库连接池的最小连接数 -->
<property name="minPoolSize" value="1"/>
<!-- 指定连接数据库连接池的初始化连接数 -->
<property name="initialPoolSize" value="1"/>
<!-- 指定连接数据库连接池的连接的最大空闲时间 -->
<property name="maxIdleTime" value="20"/>
</bean>
<!-- 定义Hibernate的SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 依赖注入数据源,注入正是上面定义的dataSource -->
<property name="dataSource" ref="dataSource"/>
<!-- mappingResouces属性用来列出全部映射文件 -->
<property name="mappingResources">
<list>
<!-- 以下用来列出Hibernate映射文件 -->
<value>com/zhoumo/model/Product.hbm.xml</value>
</list>
</property>
<!-- 定义Hibernate的SessionFactory的属性 -->
<property name="hibernateProperties">
<!-- 配置Hibernate属性 -->
<value>
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.format_sql=true;
</value>
</property>
</bean>
<!-- 定义DAO Bean-->
<bean id="productDao" class=
"com.zhoumo.dao.impl.ProductDaoImpl">
<!-- 注入持久化操作所需的SessionFactory -->
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 配置一个业务逻辑组件 -->
<bean id="productService" class=
"com.zhoumo.service.impl.ProductServiceImpl">
<!-- 注入持久化访问所需的DAO组件 -->
<property name="productDao" ref="productDao"/>
</bean>

<!-- 配置Hibernate的局部事务管理器,使用HibernateTransactionManager类 -->
<!-- 该类实现PlatformTransactionManager接口,是针对Hibernate的特定实现-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!-- 配置HibernateTransactionManager时需要依注入SessionFactory的引用 -->
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 配置事务增强处理,指定事务管理器 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- 用于配置详细的事务语义 -->
<tx:attributes>
<!-- 所有以'get'开头的方法是read-only的 -->
<tx:method name="get*" read-only="true"/>
<!-- 其他方法使用默认的事务设置 -->
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<aop:config>
<!-- 配置一个切入点 -->
<aop:pointcut id="pointcut"
expression="bean(service)"/>
<!-- 指定在pointcut切入点应用txAdvice事务增强处理 -->
<aop:advisor advice-ref="txAdvice"
pointcut-ref="pointcut"/>
</aop:config>

</beans>

 12.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">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 使用ContextLoaderListener初始化Spring容器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 定义Struts 2的FilterDispathcer的Filter -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- FilterDispatcher用来初始化Struts 2并且处理所有的WEB请求。 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

 13.JSP页面

产品新增页

<%--
网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
author yeeku.H.lee kongyeeku@163.com
version 1.0
Copyright (C), 2001-2012, yeeku.H.Lee
This program is protected by copyright laws.
Program Name:
Date:
--%>

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>产品新增</title>
</head>
<body>
<h3>产品新增</h3>
<s:form action="AddProduct">
<s:textfield name="product.name" label="用户名" value=""/>
<s:textfield name="product.url" label="链接" value=""/>
<tr>
<td colspan="2">
<s:submit value="注册" theme="simple"/>
<s:reset value="重填" theme="simple"/></td>
</tr>
</s:form>
</body>
</html>

成功提示页

<%--
网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
author yeeku.H.lee kongyeeku@163.com
version 1.0
Copyright (C), 2001-2012, yeeku.H.Lee
This program is protected by copyright laws.
Program Name:
Date:
--%>

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>成功页面</title>
</head>
<body>
您已经登录!
<s:property value="tip"/>
</body>
</html>

错误提示页

<%--
网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
author yeeku.H.lee kongyeeku@163.com
version 1.0
Copyright (C), 2001-2012, yeeku.H.Lee
This program is protected by copyright laws.
Program Name:
Date:
--%>

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>错误页面</title>
</head>
<body>
注册失败!
</body>
</html>

第一个structs+spring+hibernate的web程序的更多相关文章

  1. structs spring hibernate 三者之间有什么关系?

    现在开发流行MVC模式,structs在C(控制器)中使用:hibernate在M(模型)中被使用:至于 spring ,最大的作用在于,structs.hibernate的对象,由于在各个层之间相互 ...

  2. Structs+Spring+Hibernate快速入门

    Structs+Spring+Hibernate,这是很经典的一个搭配,它的开发流程也比较程式化,下面以用户注册为例.     注册页面代码: <%@page contentType=" ...

  3. 构建一个基于 Spring 的 RESTful Web Service

    本文详细介绍了基于Spring创建一个“hello world” RESTful web service工程的步骤. 目标 构建一个service,接收如下HTTP GET请求: http://loc ...

  4. 使用struts+spring+hibernate组装web应用

    这篇文章将讨论怎样组合几个着名的框架去做到松耦合的目的,怎样建立你的构架,怎样让你的各个应用层保持一致.富于挑战的是:组合这些框架使得每一层都以一种松耦合的方式彼此沟通,而与底层的技术无关.这篇文章将 ...

  5. Struts+Spring+Hibernate的Web应用执行过程

    struts1和spring有两种整合的方法  一种是action和spring bean映射:一种是将action交给spring初始化 第一种方式:访问.do的URL->tomcat接收到r ...

  6. 创建一个简单的maven的web程序

    最近学习Hadoop,发现学习要想用hadoop作为后台运行web程序,必须应用maven,所以学习了今天学习了一下maven,然后搭建了一个简单的web程序 首先我使用的是eclipse中自带的ma ...

  7. Spring Boot入门第二天:一个基于Spring Boot的Web应用,使用了Spring Data JPA和Freemarker。

    原文链接 今天打算从数据库中取数据,并展示到视图中.不多说,先上图: 第一步:添加依赖.打开pom.xml文件,添加必要的依赖,完整代码如下: <?xml version="1.0&q ...

  8. spring框架等web程序在tomcat下的启动顺序

    http://www.cnblogs.com/panxuejun/p/5847774.html

  9. [macOS开发.NET Core] 一个简单的WEB程序

    上一篇咱们提到了在macOS下选进行开发. 咱们已经把工具准备完成了. 现在咱们做一个简单的DEMO 创建WEB程序  之前咱们已经创建过WEB程序,并且成功的运行过数据 现在咱们创建一个页面,并显 ...

随机推荐

  1. spring使用Email邮件系统

    1.提供邮件信息发送接收,附件绑定功能. 1.配置spring-email.xml文件 <context:property-placeholder location="classpat ...

  2. linux配置3-安装tomcat

    下载文件:apache-tomcat-7.0.73.tar.gz 通过共享传到Ubuntu, 复制到/tmp 解压 移动解压后的文件到到/opt/tomcat7,完成可见:/opt/tomcat7/a ...

  3. Windows Store App 网络通信 HttpWebRequest

    如果希望更好地控制HTTP请求,可以使用System.Net类库中的HttpWebRequest类,该类对HTTP协议进行了完整的封装,并且提供了很多对HTTP协议中的 Header.Content和 ...

  4. java selenium (六) XPath 定位

    xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. 阅读目录 什么是xpath xpath 是XML Path的简称, 由于HTML文档本身就是一个标准的XML页面, ...

  5. 16090202(剑灵GPA)

    [目标] 剑灵GPA [思路] 1 2 绘制角色DrawCall body 5526面片 2.1[第一个DrawCall]63 RT 这个DrawCall PS VS 参数列表 VS // // Ge ...

  6. ECMAScript6 面向对象 时钟效果

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. ROS语音交互(四)接入图灵语义理解

    首先程序中会用到Json,curl 安装相应的库 $ sudo apt-get install libcurl3 libcurl4-openssl-dev$ sudo apt-get install ...

  8. 关于silverlight5 打印功能收集

    http://www.cnblogs.com/slmk/archive/2012/07/18/2570303.html Silverlight打印解决方案2.1正式发布(支持打印预览.页面设置(横向纵 ...

  9. 开启关闭keditor 过滤

    filterMode: false, K.create('#txt_content', { uploadJson: '/js/kindeditor-4.1.10/upload_json.ashx', ...

  10. Work around by " Due to heavy load, the latest workflow operation has been queued. " 分类: Sharepoint 2015-07-08 00:19 3人阅读 评论(0) 收藏

    I hope most of the users and developers might have come across above note and worried about it. Ther ...