SSH框架搭建

Wesley13
• 阅读 743

一。加入struts2
1.在pom.xml中加入struts2的依赖
  
    org.apache.struts
    struts2-core
    2.5.13
  

2.在web.xml中加入过滤器
  
    struts2
    org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
  

  
    struts2
    /*
  

二。加入spring框架,整合spring+struts2
1.加入spring的依赖,和struts与spring整合的依赖
  
  
    org.springframework
    spring-context
    4.1.9.RELEASE
  

  
    org.springframework
    spring-web
    4.1.9.RELEASE
  

  
    org.apache.struts
    struts2-spring-plugin
    2.5.13
  

  
    org.springframework
    spring-orm
    4.1.9.RELEASE
  

  
    org.springframework
    spring-aspects
    4.1.9.RELEASE
  

  
    org.springframework
    spring-jdbc
    4.1.9.RELEASE
  

  
  
    org.hibernate
    hibernate-core
    4.3.5.Final
  

  
  
    org.apache.commons
    commons-dbcp2
    2.1.1
  

2.在web.xml中加入spring监听,以及告诉监听spring的配置文件
  
  
    org.springframework.web.context.ContextLoaderListener
  

  
  
    contextConfigLocation
    classpath*:application.xml
  

  
  
  
    openSessionInViewerFilter
    org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
  

  
    openSessionInViewerFilter
    /*
  

3.struts.xml文件修改
  

    
      
      
      
      
      
      regex:.*
      
      
        ${successURL}
        ${inputURL}
      

    

  

4.appliaction.xml也就是spring核心配置文件

5.各层用注解完成依赖注入
  @Repository:DAO层的注解申明
  @Service:业务层注解
  @Controller:控制层注解 @Controller("userAction")此处的名字要和struts.xml中Action的class属性一致

实例:整合ssh,并完成前台发送请求后台,后台返回数据到前台的过程

SSH框架搭建 SSH框架搭建

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>SSHjava</groupId>
    <artifactId>SSHjava</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <resources>
            <resource>
                <directory>src</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <warSourceDirectory>WebContent</warSourceDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <!-- struts2 -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.5.13</version>
        </dependency>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.1.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.1.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.5.13</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.1.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>4.1.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.1.9.RELEASE</version>
        </dependency>
        <!-- hibernate -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.5.Final</version>
        </dependency>
        <!-- 数据库连接池jar -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.1.1</version>
        </dependency>
        <!-- jstl -->
         <dependency> 
             <groupId>javax.servlet.jsp.jstl</groupId> 
             <artifactId>jstl</artifactId> 
             <version>1.2</version> 
         </dependency>
         <dependency>
             <groupId>taglibs</groupId>
             <artifactId>standard</artifactId> 
             <version>1.1.2</version> 
         </dependency> -
    </dependencies>
</project>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>SSHjava06</display-name>
    <!-- 创建Spring的监听器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- Spring的监听器可以通过这个上下文参数来获取application.xml文件的位置 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:application.xml</param-value>
    </context-param>
    
    <!-- Spring中提供了 org.springframework.orm.hibernate4.support.OpenSessionInViewFilter 
        这个类来完成OpenSessionInViewer的操作 -->
    <!-- 这个过滤器是配合hibernate中级联操作的延迟加载来使用的,一旦用了这个过滤器,就必须使用spring的事务管理 -->
    <filter>
        <filter-name>openSessionInViewerFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>openSessionInViewerFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <!-- struts2的过滤器 -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
</web-app>

jdbc.properties

jdbc.driverClassName = oracle.jdbc.driver.OracleDriver
jdbc.url = jdbc:oracle:thin:@localhost:1521:orcl
jdbc.username = java
jdbc.password = java123

  application.xml

<?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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context.xsd
      http://www.springframework.org/schema/aop
      http://www.springframework.org/schema/aop/spring-aop.xsd
      http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">
    <!-- 打开Spring的Annotation的支持 -->
    <context:annotation-config />
    <!-- 设定Spring去哪些包中查找Annotation -->
    <context:component-scan base-package="com" />
    <!-- 告诉spring${}取值的资源文件路径 -->
    <context:property-placeholder location="classpath:jdbc.properties" />

    <!-- spring管理数据库链接 -->
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <!-- 配置连接池的初始值 -->
        <property name="initialSize" value="1" />
        <!-- 连接池的最大值 -->
        <!-- <property name="maxActive" value="500"/> -->
        <!-- 最大空闲时,当经过一个高峰之后,连接池可以将一些用不到的连接释放,一直减少到maxIdle为止 -->
        <!-- <property name="maxIdle" value="2"/> -->
        <!-- 当最小空闲时,当连接少于minIdle时会自动去申请一些连接 -->
        <property name="minIdle" value="1" />
        <property name="maxTotal" value="100" />
        <property name="maxIdle" value="20" />
        <property name="maxWaitMillis" value="1000" />
    </bean>
    
    <!-- 创建Spring的SessionFactory工厂 -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" >
        <!-- 注入数据源 -->
        <property name="dataSource" ref="dataSource" />
         <!-- 设置Spring去哪个包中查找相应的实体类 -->
        <property name="packagesToScan">
            <value>com.pojo</value>
        </property>
        <property name="hibernateProperties">
          <props>
              <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
              <prop key="hibernate.show_sql">true</prop>
              <prop key="hibernate.format_sql">true</prop>
        <!-- <prop key="hibernate.hbm2ddl.auto">update</prop>自动根据实体类生成表结构 -->
          </props>
         </property>
    </bean>
    
    <!-- 配置Spring的事务处理  声明式事务-->
        <!-- 创建事务管理器 -->
      <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
      </bean>
      <!--       打开事务注解开关  可以在代码中直接声明事务 必须放在AOP的配置前面才有效果-->
      <tx:annotation-driven transaction-manager="txManager"/>
      <!-- 配置AOP,Spring是通过AOP来进行事务管理的 -->
      <aop:config>
          <!-- 设置PointCut表示那些方法需要加入到事务管理 -->
        <aop:pointcut id="allMethods" expression="execution(* com.service.*.*(..))"/>
        <!-- 通过advisor来确定具体要加入事务控制的方法 -->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="allMethods"/>
      </aop:config>
    
      <!-- 配置哪些方法需要加入事务控制 -->
      <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
          <!-- 让所有方法都加入事务管理,为了提高效率,可以把一些查询之类的方法设置为只读的事务 -->
          <tx:method name="*" propagation="REQUIRED" read-only="true"/>
          <!-- 以下方法都是可能涉及修改的方法,就无法设置为只读 -->
          <tx:method name="add*" propagation="REQUIRED"/>
          <tx:method name="del*" propagation="REQUIRED"/>
          <tx:method name="update*" propagation="REQUIRED"/>
          <tx:method name="save*" propagation="REQUIRED"/>
          <tx:method name="modify*" propagation="REQUIRED"/>
        </tx:attributes>
      </tx:advice>

</beans>

  struts.xml

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <!-- //2.5的版本后动态访问url必须打开 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <!-- //此处说明action由spring管理 -->
    <constant name="struts.objectFactory" value="spring" />
    <package name="my" namespace="/" extends="struts-default">
        <!-- //2.5版本后访问非execute方法要加入该配置 -->
        <global-allowed-methods>regex:.*</global-allowed-methods>
        <action name="*_*" class="{1}Action" method="{2}">
            <result name="success">${successURL}</result>
            <result name="input">${inputURL}</result>
        </action>
    </package>
</struts>

student.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <a href="stu_getall">查询</a>
    <table>
        <c:forEach items="${list }" var="stu">
            <tr>
                <td>${stu.studentName }</td>
                <td>${stu.classinfo.className}</td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

StudentAction.java

package com.control;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor;
import com.pojo.Student;
import com.service.IStudentService;

@Controller("stuAction")
public class StudentAction {

    @Autowired
    IStudentService stuSer ;

    String successURL;//跳转到成功结果的url路径

    public String getSuccessURL() {
        return successURL;
    }
    public void setSuccessURL(String successURL) {
        this.successURL = successURL;
    }
    public void setStuSer(IStudentService stuSer) {
        this.stuSer = stuSer;
    }

    public String getall(){
        List<Student> list = stuSer.getAllStu();
        Map req = (Map) ActionContext.getContext().get("request");
        req.put("list", list);
        successURL="/jsp/student.jsp";
        return "success";
    }
}

其他层代码省略,另外BaseDao中方法替换

    @Override
    public Session getsSession(){
        //如果使用spring来管理事务,一定要用getCurrentSession()来获取session
        return sessionFactory.getCurrentSession();
    }
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
3年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这