zoukankan      html  css  js  c++  java
  • idea:ssh整合小例子:读取数据库信息显示到jsp上面

    1.idea创建项目:很方便,在下面添加各自的jar包,注意点:hibernate和struts2都有一个javassiste的jar包,把低级的删掉即可,因为有两个的时候,会有转换异常

             

    idea会帮你配置好基本的信息。


    jar包一览:

     


    2.首先,在大佬web.xml配置好加载各小弟的配置信息:idea帮忙生成的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?xml version="1.0" encoding="UTF-8"?>
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             version="3.1">
     
     
        <!--读取spring配置-->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml,classpath:applicationContext-beans.xml</param-value>
        </context-param>
     
     
        <!--struts2配置-->
        <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>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
     
    </web-app>



    3.把hibernate搞到spring的容器中去......(已经写过这一方面的内容,就不详细了,直接贴代码  )

    applicationContext.xml这个文件是配置hibernate与spring的整合信息的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <?xml version="1.0" encoding="UTF-8"?>
           xmlns:context="http://www.springframework.org/schema/context"
     
        <context:property-placeholder location="classpath:db.properties"/>
     
     
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
     
            <property name="user" value="${user}"/>
            <property name="password" value="${password}"/>
            <property name="driverClass" value="${driveClass}"/>
            <property name="jdbcUrl" value="${url}"/>
     
        </bean>
     
        <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
     
            <property name="dataSource" ref="dataSource"/>
            <property name="mappingLocations" value="classpath:*.hbm.xml"/>
            <property name="hibernateProperties">
     
                <props>
     
                    <prop key="hibernate.format_sql">true</prop>
                    <prop key="hibernate.show_sql">true</prop>
                    <prop key="hibernate.hbm2ddl.auto">update</prop>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                </props>
            </property>
     
        </bean>
     
        <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory"/>
     
        </bean>
     
        <aop:config>
     
            <aop:pointcut id="pointCut" expression="execution(* com.service.*.*(..))"/>
     
            <aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"/>
        </aop:config>
     
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
     
            <tx:attributes>
                <tx:method name="get*" read-only="true"/>
                <tx:method name="*"/>
            </tx:attributes>
        </tx:advice>
     
    </beans>

    db.properties

    1
    2
    3
    4
    user=root
    password=
    driveClass=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/ssh?useUnicode=true&characterEncoding=UTF-8



    为完善上面这个配置文件,需要生产bean类和mapping映射文件:

    Department.java

    Employee.java

    Department.hbm.xml

    Employee.hbm.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    package com.entities;
     
    import javax.persistence.Basic;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
     
     
    @Entity
    public class Department {
        private int id;
        private String departmentname;
     
        @Id
        @Column(name = " ID", nullable = false)
        public int getId() {
            return id;
        }
     
        public void setId(int id) {
            this.id = id;
        }
     
        @Basic
        @Column(name = "DEPARTMENTNAME", nullable = true, length = 255)
        public String getDepartmentname() {
            return departmentname;
        }
     
        public void setDepartmentname(String departmentname) {
            this.departmentname = departmentname;
        }
         
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    package com.entities;
     
    import javax.persistence.*;
    import java.util.Date;
     
     
    @Entity
    public class Employee {
        private int id;
        private String lastname;
        private String email;
        private Date birth;
        private Date createtime;
        private Department department;
     
        @Id
        @Column(name = "ID", nullable = false)
        public int getId() {
            return id;
        }
     
        public void setId(int id) {
            this.id = id;
        }
     
        @Basic
        @Column(name = "LASTNAME", nullable = true, length = 255)
        public String getLastname() {
            return lastname;
        }
     
        public void setLastname(String lastname) {
            this.lastname = lastname;
        }
     
        @Basic
        @Column(name = "EMAIL", nullable = true, length = 255)
        public String getEmail() {
            return email;
        }
     
        public void setEmail(String email) {
            this.email = email;
        }
     
        @Basic
        @Column(name = "BIRTH", nullable = true)
        public Date getBirth() {
            return birth;
        }
     
        public void setBirth(Date birth) {
            this.birth = birth;
        }
     
        @Basic
        @Column(name = "CREATETIME", nullable = true)
        public Date getCreatetime() {
            return createtime;
        }
     
        public void setCreatetime(Date createtime) {
            this.createtime = createtime;
        }
     
     
        @Basic
        @Column(name = "DEPARTMENT_ID", nullable = true)
        public Department getDepartment() {
            return department;
        }
     
        public void setDepartment(Department department) {
            this.department = department;
        }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    <hibernate-mapping>
     
        <class name="com.entities.Department" table="department" schema="ssh">
            <id name="id">
                <column name=" ID" sql-type="int(11)"/>
                <generator class="native"/>
            </id>
            <property name="departmentname">
                <column name="DEPARTMENTNAME" sql-type="varchar(255)" not-null="true"/>
            </property>
        </class>
    </hibernate-mapping>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    <hibernate-mapping>
     
        <class name="com.entities.Employee" table="employee" schema="ssh">
            <id name="id">
                <column name="ID" sql-type="int(11)"/>
                <generator class="native"/>
            </id>
            <property name="lastname">
                <column name="LASTNAME" sql-type="varchar(255)" not-null="true"/>
            </property>
            <property name="email">
                <column name="EMAIL" sql-type="varchar(255)" not-null="true"/>
            </property>
            <property name="birth">
                <column name="BIRTH" sql-type="date" not-null="true"/>
            </property>
            <property name="createtime">
                <column name="CREATETIME" sql-type="date" not-null="true"/>
            </property>
     
            <many-to-one name="department" class="com.entities.Department">
                <column name="DEPARTMENT_ID"/>
            </many-to-one>
        </class>
    </hibernate-mapping>

          

      至此:打开Tomcat来运行,如果各方面配置没问题,就可以自动生成数据表了。

       



    3.开始操作数据:写一个业务获取数据(数据由自己填充 )

    EmployeeDao.java

    这里的sessionfactory通过set的方法获取.....  set方法把该类注入到bean管理器,获得sessionfactory    

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    package com.service;
     
    import com.entities.Employee;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
     
    import java.util.List;
     
     
    public class EmployeeDao {
     
        private SessionFactory sessionFactory;
     
        public void setSessionFactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        }
     
        public Session getSession() {
     
            return sessionFactory.getCurrentSession();
     
        }
     
        public List<Employee> getAll() {
     
     
            //      左向外联获取department信息,fetch获取单一信息,不用获取一大堆
            String hql = "from Employee e left outer join fetch e.department";
     
            return getSession().createQuery(hql).list();
        }
    }

      

    再写一个service把上面的业务结果中转(自己形象地 理解 )

    EmployeeService.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    package com.service;
     
    import com.entities.Employee;
     
    import java.util.List;
     
     
    public class EmployeeService {
     
        private EmployeeDao employeeDao;
     
        public void setEmployeeDao(EmployeeDao employeeDao) {
            this.employeeDao = employeeDao;
        }
     
        public List<Employee> getAll() {
     
            return employeeDao.getAll();
        }
    }



    4.到了这里,就需要写struts2的东西了,首先    在web的开始页面写一个action超链接

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>$Title$</title>
    </head>
    <body>
     
    <a href="emp-list">List all Employees</a>
     
    </body>
     
    </html>

      实现这个效果,点击后就出现查询结果:


    接着需要实现这个挑战的action,需要在struts.xml中注册这个action的信息,这里用通配符共用这个action

    struts.xml


    这里的employeeAction就是spring中已经注入的bean的id

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?xml version="1.0" encoding="UTF-8"?>
     
    <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
     
    <struts>
     
        <!--打开开发者模式,如有bug会显示之类,不过也消耗性能-->
        <constant name="struts.devMode" value="true"/>
        <!--关闭动态方法调用,这样就不能在浏览器通过调用类方法来调用action了-->
        <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
     
        <!--引用默认配置-->
        <package name="default" extends="struts-default">
     
            <!--通配符表示多种类似的方法共用一个模块,这里就是数据交互出,自己的理解-->
            <action name="emp-*" class="employeeAction" method="{1}">
                <result name="list">/WEB-INF/pages/emp-list.jsp</result>
            </action>
     
        </package>
     
    </struts>

      

    再写一个关于处理与struts相关bean的spring容器文件,其实是一个样的

    applicationContext-beans.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?xml version="1.0" encoding="UTF-8"?>
     
     
        <!--通过set方法把emplayDao注入到bean中,在EmployeeDao使用到sessionFactory-->
        <bean id="employeeDao" class="com.service.EmployeeDao">
            <property name="sessionFactory" ref="sessionFactory"/>
     
        </bean>
     
        <!--同上-->
        <bean id="employeeService" class="com.service.EmployeeService">
            <property name="employeeDao" ref="employeeDao"/>
     
        </bean>
     
        <!--配置action,这里在struts.xml的action会与此绑定,进行数据交互,scope="prototype"确保每个请求都是一个新的action,不能使用单例,那样的话,就会出现信息错乱-->
        <bean id="employeeAction" class="com.actions.EmployeeAction" scope="prototype">
     
            <property name="employeeService" ref="employeeService"/>
     
        </bean>
     
     
    </beans>


    最后,就需要写数据的交汇点,EmployeeAction.java了

    这里就把EmployeeService.java查询得来的数据写入到值栈中,一边在jsp中读取并且显示..       

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    package com.actions;
     
    import com.opensymphony.xwork2.ActionSupport;
    import com.service.EmployeeService;
    import org.apache.struts2.interceptor.RequestAware;
     
    import java.util.Map;
     
     
    public class EmployeeAction extends ActionSupport implements RequestAware {
     
        private EmployeeService employeeService;
     
        public void setEmployeeService(EmployeeService employeeService) {
            this.employeeService = employeeService;
        }
     
        public String list() {
     
            request.put("employee", employeeService.getAll());
     
            return "list";
        }
     
        private Map<String, Object> request;
     
        @Override
        public void setRequest(Map<String, Object> map) {
     
     
            this.request = map;
        }
     
     
    }

           

    最后完善显示结果的jsp文件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
     
    <h4>Employee List Page</h4>
     
    <s:if test="#request.employee==null||request.employee.size()==0">
        没有任何员工信息
    </s:if>
    <s:else>
        <table border="1" cellpadding="2" cellspacing="0">
     
            <tr>
                <td>ID</td>
                <td>LAST_NAME</td>
                <td>E_MAIL</td>
                <td>BIRTH</td>
                <td>CREATE_TIME</td>
                <td>DEPARTMENT</td>
            </tr>
            <s:iterator value="#request.employee">
     
                <tr>
                    <td>${id}</td>
                    <td>${lastname}</td>
                    <td>${email}</td>
                    <td>${birth}</td>
                    <td>${createtime}</td>
                    <td>${department.departmentname}</td>
                </tr>
     
     
            </s:iterator>
        </table>
    </s:else>
     
     
    </body>
    </html>

      


    6.文件一览:




    运行结果:


       





  • 相关阅读:
    最大子数组求和并进行条件组合覆盖测试
    Ubuntu 16.04 c++ Google框架单元测试
    The directory '/home/stone/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If execu
    Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi'
    个人博客作业三:微软小娜APP的案例分析
    补交 作业一
    补交 作业二:个人博客作业内容:需求分析
    嵌入式软件设计第12次实验报告
    嵌入式软件设计第11次实验报告
    嵌入式软件设计第10次实验报告
  • 原文地址:https://www.cnblogs.com/share2015/p/5299138.html
Copyright © 2011-2022 走看看