zoukankan      html  css  js  c++  java
  • 第一个structs+spring+hibernate的web程序

    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>

  • 相关阅读:
    常用数据结构的应用场景
    数组与链表的对比
    [LeetCode 293] Flip Game
    [Leetcode] Palindrome Permutation 回文变换
    九大排序算法再总结
    query函数的可查询数据
    Column常用的参数
    sqlalchemy的常用字段
    sqlalchemy基本的增删改查
    sqlalchemy映射数据库
  • 原文地址:https://www.cnblogs.com/lovefendi/p/4125971.html
Copyright © 2011-2022 走看看