zoukankan      html  css  js  c++  java
  • ssh整合 小例子

    实现了用户的查插删改操作。

    原理:struts负责接收、分发请求。spring采用面向接口编程的思想整合整体框架,负责连接数据库。hibernate负责操作数据库语言。

    思路:

    1.配置struts的配置信息
    2.创建struts和hibernate的关联(主要是加载jar包)
    3.创建struts和spring的关联(主要是加载jar包)
    4.编写页面信息。action
    5.纵向开发模式(但是平时按照横向开发)。纵向开发好处是思路清晰,先写完dao层
    service层action层编写模式
    6.开始编写spring的配置文件。添加bean。采用依赖注入完成面向接口编程(面向切面编
    程更准确些)。
    7.编写struts的配置文件。将action映射到spring的配置文件中的bean中


    防止表单重复提交(重定向)

    好了,不多说了,用例子说话才是最权威的。

    1.配置struts

    a.wen.xml文件添加struts的过滤器、映射,spring的监听器

    <?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>encodingFilter</filter-name>
                <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
                <init-param>
                    <param-name>encoding</param-name>
                    <param-value>UTF-8</param-value>
                </init-param>
            </filter>
            <filter-mapping>
                <filter-name>encodingFilter</filter-name>
                <url-pattern>/*</url-pattern>
        </filter-mapping>
        <!-- 解决中文乱码问题 -->    
        
        <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>/*</url-pattern>
        </filter-mapping>
        
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    
    </web-app>

    b.struts的jar包支持

    c.struts的配置文件 struts.xml(放在src目录下)

    <?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>
          <constant name="struts.i18n.encoding" value="UTF-8"></constant>
            <package name="ssh2" extends="struts-default">
                <action name="saveUser" class="saveUserAction">
                    <result name="success" type="redirect">listUser.action</result>
                </action>
                
                <action name="listUser"  class="listUserAction">
                    <result name="success">/list.jsp</result>
                </action>
                
                <action name="deleteUser" class="removeUserAction">
                    <result name="success" type="redirect">/listUser.action</result>
                </action>
                
                <!--请求转发  -->
                <action name="updatePUser" class="updatePUserAction">
                    <result name="success">/update.jsp</result>
                </action>
                
                <!-- 重定向 -->
                <action name="updateUser" class="updateUserAction">
                    <result name="success" type="redirect">/listUser.action</result>
                </action>
            </package>
            
            
        
        </struts>

    2.导入hibernate的jar包支持,采用myeclipse自带的jar包

    a.右击项目名称选择 myeclipse-->Add Hibernate Capabilities 如下图(为了将hibernate配置文件放置在src目录下,其实哪里都一样。。。)

    b.点击next,不用向导配置完成后,打开配置文件

    c.只是导入一些jar包,不需要连接数据库

    d.不用创建session工厂

    e.点击Finish完成

    3.添加spring的jar包支持

    同上面一样,导入jar包

    4.编写页面信息、bean以及此bean的映射文件User.hbm.xml(放在com.test.bean目录下)

    a.index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="s"   %>
    <%
    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 'index.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><font color="red">Operation List</font></h1>
        
        <s:a href="save.jsp">Sav e User</s:a><br/>
        <s:a href="listUser.action">List Users</s:a>
      </body>
    </html>

    b.创建bean

    package com.test.bean;
    
    public class User {
    
        private int id;
        private String firstname;
        private String lastname;
        private int age;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getFirstname() {
            return firstname;
        }
        public void setFirstname(String firstname) {
            this.firstname = firstname;
        }
        public String getLastname() {
            return lastname;
        }
        public void setLastname(String lastname) {
            this.lastname = lastname;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
    }

    3.bean的映射文件User.hbm.xml

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        <class name="com.test.bean.User" table="users">
            <id name="id" column="id" type="int">
                <generator class="increment"></generator>
            </id>
            
            <property name="firstname" column="firstname" type="string"></property>
            <property name="lastname" column="lastname" type="string"></property>
            <property name="age" column="age" type="int"></property>
        </class>
    </hibernate-mapping>

     

    6.因为要良好封装,所以从dao层开始编写

    a.dao层接口

    package com.test.dao.impl;
    
    import java.util.List;
    
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
    
    import com.test.bean.User;
    import com.test.dao.UserDAO;
    
    public class UserDAOImpl extends HibernateDaoSupport implements UserDAO 
    {
        
        public void saveUser(User user) {
            this.getHibernateTemplate().save(user);
        }
        
        @SuppressWarnings("unchecked")
        @Override
        public List<User> findAllUsers() {
            String hql = "from User user order by user.id desc";
            return     (List<User>)this.getHibernateTemplate().find(hql);
        }
        
        @Override
        public void removeUser(User user) {
            this.getHibernateTemplate().delete(user);
        }
        
        @Override
        public void updateUser(User user) {
            this.getHibernateTemplate().update(user);
        }
        
        @Override
        public User findUserById(Integer id) {
    
            User user = (User)this.getHibernateTemplate().get(User.class, id);
            return user;
        }
    
    }

    b.dao层实现类

    package com.test.dao.impl;
    
    import java.util.List;
    
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
    
    import com.test.bean.User;
    import com.test.dao.UserDAO;
    
    public class UserDAOImpl extends HibernateDaoSupport implements UserDAO 
    {
        
        public void saveUser(User user) {
            this.getHibernateTemplate().save(user);
        }
        
        @SuppressWarnings("unchecked")
        @Override
        public List<User> findAllUsers() {
            String hql = "from User user order by user.id desc";
            return     (List<User>)this.getHibernateTemplate().find(hql);
        }
        
        @Override
        public void removeUser(User user) {
            this.getHibernateTemplate().delete(user);
        }
        
        @Override
        public void updateUser(User user) {
            this.getHibernateTemplate().update(user);
        }
        
        @Override
        public User findUserById(Integer id) {
    
            User user = (User)this.getHibernateTemplate().get(User.class, id);
            return user;
        }
    
    }

    7.编写service层

    a.service的接口

    package com.test.service;
    
    import java.util.List;
    
    import com.test.bean.User;
    
    public interface UserService {
        
        public void save(User user);
        
        public List<User> findAll();
        
        public void delete(User user);
        
        public User findById(Integer id);
        
        public void update(User user);
    
    }

    b.service的实现类

    package com.test.service.impl;
    
    import java.util.List;
    
    import com.test.bean.User;
    import com.test.dao.UserDAO;
    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 save(User user) {
            
            this.userDAO.saveUser(user);//完成真正的业务逻辑
        }
    
        @Override
        public List<User> findAll() {
            return this.userDAO.findAllUsers();
        }
        
        @Override
        public void delete(User user) {
            this.userDAO.removeUser(user);
        }
    
        @Override
        public User findById(Integer id) {
            User user = this.userDAO.findUserById(id);
            System.out.println(user);
            return user;
        }
    
        @Override
        public void update(User user) {
            
            this.userDAO.updateUser(user);
        }
    }

    8.action的实现

    a.完成的是显示全部用户信息功能的action

    package com.test.action.user;
    
    import java.util.List;
    import java.util.Map;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    import com.test.bean.User;
    import com.test.service.UserService;
    
    public class ListUserAction 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.put("list", this.service.findAll());
            return SUCCESS;
        }
    }

    b.根据id删除用户信息

    package com.test.action.user;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.test.bean.User;
    import com.test.service.UserService;
    
    public class RemoveUserAction extends ActionSupport {
    
        private User user;
        private UserService service;
        public User getUser() {
            return user;
        }
        public void setUser(User user) {
            this.user = user;
        }
        public UserService getService() {
            return service;
        }
        public void setService(UserService service) {
            this.service = service;
        }
        
        @Override
        public String execute() throws Exception {
            this.service.delete(user);
            return  SUCCESS;
        }
    }

    c.添加用户信息

    package com.test.action.user;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.test.bean.User;
    import com.test.service.UserService;
    
    public class SaveUserAction extends ActionSupport {
    
        private User user;
        private UserService service;
    
        public UserService getService() {
            return service;
        }
    
        public void setService(UserService service) {
            this.service = service;
        }
    
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
        
        @Override
        public String execute() throws Exception {
            
            //调用service相关的方法,完成实际的业务逻辑
            //action只负责收集数据,验证校验
            this.service.save(this.user);
            return SUCCESS;
        }
    }

    d.通过ID查找用户信息

    package com.test.action.user;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.test.bean.User;
    import com.test.service.UserService;
    
    public class UpdatePUserAction extends ActionSupport {
    
        private User user;
        private UserService service;
        public User getUser() {
            return user;
        }
        public void setUser(User user) {
            this.user = user;
        }
        public UserService getService() {
            return service;
        }
        public void setService(UserService service) {
            this.service = service;
        }
        
        @Override
        public String execute() throws Exception {
    
            this.user = this.service.findById(this.user.getId());
            return SUCCESS;
        }
    }
    View Code

    e.通过ID修改用户信息

    package com.test.action.user;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.test.bean.User;
    import com.test.service.UserService;
    
    public class UpdateUserAction extends ActionSupport {
    
        private User user;
        private UserService service;
        public User getUser() {
            return user;
        }
        public void setUser(User user) {
            this.user = user;
        }
        public UserService getService() {
            return service;
        }
        public void setService(UserService service) {
            this.service = service;
        }
        
        @Override
        public String execute() throws Exception {
            this.service.update(user);
            return SUCCESS;
        }
    }

    9.添加spring的配置信息

    bean的实现(放在WEB-INF目录下)

    <?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-2.5.xsd">
    
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
            destroy-method="close">
        
            <property name="driverClassName">
                <value>com.mysql.jdbc.Driver</value>
            </property>
            
            <property name="url">
                <value>jdbc:mysql://localhost:3306/hibernate</value>
            </property>
            
            <property name="username">
                <value>root</value>
            </property>
            
            <property name="password">
                <value>123456</value>
            </property>
        </bean>
        
        <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            
            <property name="dataSource">
                <ref local="dataSource"/>
            </property>
            
            <property name="mappingResources">
                <list>
                    <value>com/test/bean/User.hbm.xml</value>
                </list>
            </property>
            
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">
                        org.hibernate.dialect.MySQLDialect
                    </prop>
                    <prop key="hibernate.show_sql">true</prop>
                </props>
            </property>
        </bean>
    
        <bean id="userDao" class="com.test.dao.impl.UserDAOImpl" scope="singleton">    
            <property name="sessionFactory">
                <ref bean="sessionFactory"/>
            </property>
        </bean>
        
        <bean id="userService" class="com.test.service.impl.UserServiceImpl" scope="singleton">
            <property name="userDAO"  ref="userDao" />
        </bean>
        
        <bean id="saveUserAction" class="com.test.action.user.SaveUserAction" scope="prototype">
            <property name="service" ref="userService"></property>
        </bean>
        
        <bean name="listUserAction" class="com.test.action.user.ListUserAction" scope="prototype">
            <property name="service" ref="userService"></property>
        </bean>
        
        <bean name="removeUserAction" class="com.test.action.user.RemoveUserAction"  scope="prototype">
            <property name="service" ref="userService"></property>
        </bean>
        
        <bean name="updateUserAction" class="com.test.action.user.UpdateUserAction"  scope="prototype">
            <property name="service" ref="userService"></property>
        </bean>
        
        <bean name="updatePUserAction" class="com.test.action.user.UpdatePUserAction">
            <property name="service" ref="userService"></property>
        </bean>
    </beans>

    10.struts.xml(放在src目录下)

    <?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="ssh2" extends="struts-default">
                <action name="saveUser" class="saveUserAction">
                    <result name="success" type="redirect">listUser.action</result>
                </action>
                
                <action name="listUser"  class="listUserAction">
                    <result name="success">/list.jsp</result>
                </action>
                
                <action name="deleteUser" class="removeUserAction">
                    <result name="success" type="redirect">/listUser.action</result>
                </action>
                
                <!--请求转发  -->
                <action name="updatePUser" class="updatePUserAction">
                    <result name="success">/update.jsp</result>
                </action>
                
                <!-- 重定向 -->
                <action name="updateUser" class="updateUserAction">
                    <result name="success" type="redirect">/listUser.action</result>
                </action>
            </package>    
        
        </struts>

    11.页面展示

    a.list.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <%@ taglib uri="/struts-tags" prefix="s"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'list.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">
        -->
    <SCRIPT type="text/javascript">
        function del()
        {
            if(comfirm("are you sure?"))
            {
                return true;
            }
            return false;
        }
    </SCRIPT>
      </head>
      
      <body> 
        <h1><font color="red"><center>User List</center></font></h1>
        
        <table border="1" width=80% align="center">
            <tr>
                <td>序号:</td>
                <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.firstname"/>
                    </td>
                    <td>
                        <s:property value="#us.lastname"/>
                    </td>
                    <td>
                        <s:property value="#us.age"/>
                    </td>
                    <td>
                        <s:a href="deleteUser.action?user.id=%{#us.id}" onclick="return del();">delete</s:a>
                    </td>
                    <td>
                        <s:a href="updatePUser.action?user.id=%{#us.id}">update</s:a>
                    </td>
                </tr>
            </s:iterator>
            
        </table>
      </body>
    </html>

    b.save.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags"  prefix="s"%>
    <%
    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 'save.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><font color="red">Operation User</font></h1>
        
        <s:form action="saveUser">
            <s:textfield name="user.firstname" label="firstname"></s:textfield>
            <s:textfield name="user.lastname" label="lastname"></s:textfield>
            <s:textfield name="user.age" label="age"></s:textfield>
            
            <s:submit value="submit"></s:submit>
            
        </s:form>
        
      </body>
    </html>

    c.update.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'update.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><font color="red"><center> Update User</center></font></h1>
         
         <s:form action="updateUser">
             
             <table>
                 <tr>
                     <td>
                         <s:hidden name="user.id" value="%{user.id}"></s:hidden>
                     </td>
                     <td>
                         <s:textfield name="user.firstname" value="%{user.firstname}"></s:textfield>
                     </td>
                     <td>
                         <s:textfield name="user.lastname" value="%{user.lastname}"></s:textfield>
                     </td>
                     <td>
                         <s:textfield name="user.age" value="%{user.age}"></s:textfield>
                     </td>
                     <td>
                         <s:submit value="submit"></s:submit>
                     </td>
                 </tr>
             </table>
         </s:form>
      </body>
    </html>

    总体的框架

    lib目录下jar包信息

    好了完工。。。。坐等评论。

    珍惜现在,珍惜每一分,每一秒。 从不放弃,坚持。。。。。
  • 相关阅读:
    webyestem(伊莱博)票据管理(ver1.0)数据库设计
    MicrosoftNorthwind(电子商务)数据库设计
    WebForm三层架构
    WebForm带接口工厂模式的三层架构
    VS 2008 C#代码调试进C++代码设置/远程调试
    C# 中使用指针
    互操作性——使用C/C++类型的非托管函数基础
    Perforce使用指南_forP4V
    [转]DotNet程序之找BUG心得
    C# 对XML基本操作总结
  • 原文地址:https://www.cnblogs.com/feiguo/p/3675892.html
Copyright © 2011-2022 走看看