Maven搭建SSH环境

一、新建maven项目

 

 

选中maven-aechetype-webapp

group Id一般为公司域 ;Artifact Id相当于项目名称 ;version不需要更改;Package不使用默认,手动清空

Finish

项目结构如图 报错是因为没有加入servlet API 暂时不用管。

二、配置pom.xml

  1    <properties>
  2          <!-- 文件拷贝编码 -->
  3         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  4         <!-- 输出编码 -->
  5         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  6         <!-- 编译编码 -->
  7         <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
  8    </properties>
  9       <dependencies>
 10         <!-- log4j 日志 -->
 11         <dependency>
 12             <groupId>log4j</groupId>
 13             <artifactId>log4j</artifactId>
 14             <version>1.2.17</version>
 15         </dependency>
 16         <!-- servlet API -->
 17         <dependency>
 18             <groupId>javax.servlet</groupId>
 19             <artifactId>javax.servlet-api</artifactId>
 20             <version>3.1-b09</version>
 21             <scope>provided</scope>
 22         </dependency>
 23         <!-- MySQL驱动 -->
 24         <dependency>
 25             <groupId>mysql</groupId>
 26             <artifactId>mysql-connector-java</artifactId>
 27             <version>5.1.24</version>
 28         </dependency>
 29         <!-- mchange C3P0 数据源 -->
 30         <dependency>
 31             <groupId>com.mchange</groupId>
 32             <artifactId>c3p0</artifactId>
 33             <version>0.9.5-pre2</version>
 34         </dependency>
 35         <!-- junit -->
 36         <dependency>
 37             <groupId>junit</groupId>
 38             <artifactId>junit</artifactId>
 39             <version>4.11</version>
 40             <scope>test</scope>
 41         </dependency>
 42         <!-- fastjson -->
 43         <dependency>
 44             <groupId>com.alibaba</groupId>
 45             <artifactId>fastjson</artifactId>
 46             <version>1.1.29</version>
 47         </dependency>
 48         <!-- sf.json -->
 49         <dependency>
 50             <groupId>net.sf.json-lib</groupId>
 51             <artifactId>json-lib</artifactId>
 52             <version>2.4</version>
 53             <classifier>jdk15</classifier><!--指定jdk版本 -->
 54         </dependency>
 55         <!-- struts2 -->
 56         <dependency>
 57             <groupId>org.apache.struts</groupId>
 58             <artifactId>struts2-core</artifactId>
 59             <version>2.3.14</version>
 60             <exclusions>
 61                 <exclusion>
 62                     <groupId>javassist</groupId>
 63                     <artifactId>javassist</artifactId>
 64                 </exclusion>
 65             </exclusions>
 66         </dependency>
 67         <dependency>
 68             <groupId>org.apache.struts</groupId>
 69             <artifactId>struts2-spring-plugin</artifactId>
 70             <version>2.3.14</version>
 71         </dependency>
 72         <dependency>
 73             <groupId>org.apache.struts</groupId>
 74             <artifactId>struts2-convention-plugin</artifactId>
 75             <version>2.3.14</version>
 76         </dependency>
 77         <!-- spring -->
 78         <dependency>
 79             <groupId>org.springframework</groupId>
 80             <artifactId>spring-core</artifactId>
 81             <version>3.2.2.RELEASE</version>
 82         </dependency>
 83         <dependency>
 84             <groupId>org.springframework</groupId>
 85             <artifactId>spring-context</artifactId>
 86             <version>3.2.2.RELEASE</version>
 87         </dependency>
 88         <dependency>
 89             <groupId>org.springframework</groupId>
 90             <artifactId>spring-context-support</artifactId>
 91             <version>3.2.2.RELEASE</version>
 92         </dependency>
 93         <dependency>
 94             <groupId>org.springframework</groupId>
 95             <artifactId>spring-jdbc</artifactId>
 96             <version>3.2.2.RELEASE</version>
 97         </dependency>
 98         <dependency>
 99             <groupId>org.springframework</groupId>
100             <artifactId>spring-beans</artifactId>
101             <version>3.2.2.RELEASE</version>
102         </dependency>
103         <dependency>
104             <groupId>org.springframework</groupId>
105             <artifactId>spring-web</artifactId>
106             <version>3.2.2.RELEASE</version>
107         </dependency>
108         <dependency>
109             <groupId>org.springframework</groupId>
110             <artifactId>spring-expression</artifactId>
111             <version>3.2.2.RELEASE</version>
112         </dependency>
113         <dependency>
114             <groupId>org.springframework</groupId>
115             <artifactId>spring-orm</artifactId>
116             <version>3.2.2.RELEASE</version>
117         </dependency>
118         <!-- aspectjweaver -->
119         <dependency>
120             <groupId>org.aspectj</groupId>
121             <artifactId>aspectjweaver</artifactId>
122             <version>1.7.2</version>
123         </dependency>
124         <!-- hibernate -->
125         <dependency>
126             <groupId>org.hibernate</groupId>
127             <artifactId>hibernate-core</artifactId>
128             <version>4.2.0.Final</version>
129         </dependency>
130     </dependencies>

保存,Maven会自动联网去下载所有需要的jar包,只写jar的名字,不用记住,只要去Maven中央仓库去搜索,Maven中央仓库地址:http://search.maven.org/完成之后,多了很多jar,并且都放到了配置的本地仓库中,以后要再使用相同版本的jar时候,就不需要联网下载了。

 三、修改项目结构

因为构建的MSSH项目的结构并不是一个标准的Maven结构,我们需要手动新建几个Source Folder

这是标准的maven项目结构

src/main/java:存放java源文件

src/main/resources:存放项目配置文件,如spring.xml,hibernate.cfg.xml。。。

src/test/java:存放test的java文件

src/test/resources:存放test时候所需的配置文件

 

配置Source Folder的output folder

同步项目的jdk版本

设置web.xml的路径

further configuration available若没有出现 可以先去掉dynamic web module的勾 apply之后再打上勾 就会出现此选项 设置路径为src/main/webapp

四、编写配置文件

web.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
 3   <display-name></display-name>
 4   
 5   <!-- Spring ApplicationContext配置文件的路径,可使用通配符,多个路径用,号分隔 此参数用于后面的Spring Context 
 6         Loader -->
 7   <context-param>
 8     <param-name>contextConfigLocation</param-name>
 9     <param-value>classpath:spring.xml,classpath:spring-hibernate.xml</param-value>
10   </context-param>
11   
12   <!-- spring 监听器 -->
13   <listener>
14     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
15   </listener>
16   
17   <!-- Filter 定义 -->
18   <!-- Character Encoding filter -->
19   <filter>
20     <filter-name>encodingFilter</filter-name>
21     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
22     <init-param>
23       <param-name>encoding</param-name>
24       <param-value>UTF-8</param-value>
25     </init-param>
26   </filter>
27   <filter-mapping>
28     <filter-name>encodingFilter</filter-name>
29     <url-pattern>/*</url-pattern>
30   </filter-mapping>
31   <!--Hibernate的session丢失解决方法 -->
32   <filter>
33     <filter-name>openSessionInView</filter-name>
34     <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
35   </filter>
36   <filter-mapping>
37     <filter-name>openSessionInView</filter-name>
38     <url-pattern>/*</url-pattern>
39   </filter-mapping>
40   
41   <!-- struts2 filter -->
42   <filter>
43     <filter-name>struts2</filter-name>
44     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
45   </filter>
46   <filter-mapping>
47     <filter-name>struts2</filter-name>
48     <url-pattern>/*</url-pattern>
49   </filter-mapping>
50   
51   
52   <welcome-file-list>
53     <welcome-file>login.jsp</welcome-file>
54   </welcome-file-list>
55 </web-app>

database.properties

hibernate.dialect=org.hibernate.dialect.MySQLDialect
driverClassName=com.mysql.jdbc.Driver
validationQuery=SELECT 1
url=jdbc:mysql://localhost:3306/mssh?useUnicode=true&characterEncoding=UTF-8
username=root
password=root


hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.format_sql=false

spring.xml

扫描com.shi包下的文件

<?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:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    ">

    <!-- 引入属性文件 -->
    <context:property-placeholder location="classpath:database.properties" />

    <!-- 自动扫描dao和service包(自动注入) -->
    <context:component-scan base-package="com.shi" />
    
</beans>

spring-hibernate.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:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    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
    ">
    <!-- 使用C3P0数据源,MySQL数据库 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        <!-- MySQL5 -->
        <property name="driverClass" value="${driverClassName}"></property>
        <property name="jdbcUrl" value="${url}"></property>
        <property name="user" value="${username}"></property>
        <property name="password" value="${password}"></property>
        <property name="maxPoolSize" value="40"></property>
        <property name="minPoolSize" value="1"></property>
        <property name="initialPoolSize" value="1"></property>
        <property name="maxIdleTime" value="20"></property>
    </bean>

    <!-- session工厂 -->
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="com.shi.*.entity" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
            </props>
        </property>
    </bean>

    <!-- 配置事务 -->
    <bean name="txManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    <tx:annotation-driven transaction-manager="txManager" />


</beans>

struts.xml

使用零配置,扫描com.shi包下的文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <!-- 将Action交给spring容器管理 -->
    <constant name="struts.objectFactory" value="spring" />
    
    <!-- 零配置 -->
    <constant name="struts.convention.package.locators" value="shi" />
    <constant name="struts.convention.package.locators.basePackage" value="com" />
    
    <!-- 模式为开发模式,修改xml配置文件会自动加载,项目交付的时候设置为false,以免影响性能 -->
    <constant name="struts.devMode" value="true" />
    <constant name="struts.configuration.xml.reload" value="true" />
    <!-- 字符集编码 -->
    <constant name="struts.i18n.encoding" value="utf-8" />
    <package name="defaultPackage" namespace="/" extends="struts-default">

    </package>
</struts>

 五、使用

@Entity
@Table(name = "DAE_USER")
public class User extends ObjectEntity{
    
    private static final long serialVersionUID = 1L;
    
    private String name;
    private String password;
    private List<Role> roleList = new ArrayList<Role>();
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    // 多对多定义
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "DAE_USER_ROLE", joinColumns = { @JoinColumn(name = "USER_ID") }, inverseJoinColumns = { @JoinColumn(name = "ROLE_ID") })
    public List<Role> getRoleList() {
        return roleList;
    }

    public void setRoleList(List<Role> roleList) {
        this.roleList = roleList;
    }
    
    public void addRole(Role role){
        this.roleList.add(role);
    }

}
User
@Component
public class UserDao{

    @Autowired
    private SessionFactory sessionFactory;
    
    public Session getCurrentSession(){
        return sessionFactory.getCurrentSession();
    }
    
    public void save(User entity) {
         getCurrentSession().save(entity);
    }

    public void update(User entity) {
        getCurrentSession().update(entity);
    }

    public void delete(String id) {
        getCurrentSession().delete(this.get(id));;
    }
    
    public User get(String id) {
        String hql = "from User where id = '"+id+"'";
        return (User) getCurrentSession().createQuery(hql).uniqueResult();
    }

    @SuppressWarnings("unchecked")
    public List<User> getAll() {
        String hql = "from User";
        return getCurrentSession().createQuery(hql).list();
    }


}
UserDao
@Service
@Transactional
public class UserManager extends ServiceManager<User> {

    @Autowired
    private UserDao userDao;
    
    @Override
    public void save(User entity) throws Exception {
        if (entity != null) {
            entity.initDate();
            userDao.save(entity);
        } else {
            throw new Exception("保存出错");
        }
    }

    @Override
    public void update(User entity) throws Exception {
        if (entity != null) {
            entity.initDate();
            userDao.update(entity);
        } else {
            throw new Exception("修改出错");
        }
    }
    
    @Override
    public void delete(String id) throws Exception {
        userDao.delete(id);
    }
    
    @Override
    public User get(String id) throws Exception {
        return userDao.get(id);
    }

    @Override
    public List<User> getAll() throws Exception {
        return userDao.getAll();
    }
}
UserManager
public class UserAction extends CrudActionSupport<User> {

    private static final long serialVersionUID = 1L;

    @Autowired
    private UserManager userManager;
    @Autowired
    private RoleManager roleManager;

    private String id;
    private User entity;

    @Override
    public User getModel() {
        return entity;
    }

    @Override
    protected void prepareModel() throws Exception {
        if (!EmptyUtil.isEmpty(id)) {
            entity = userManager.get(id);
        } else {
            entity = new User();
        }
    }

    @Override
    public String list() throws Exception {
        List<User> userList = userManager.getAll();
        for(User user :userList){
            System.out.println(user.getName());
        }
        return SUCCESS;
    }

    @Override
    public String input() throws Exception {
        return "input";
    }

    @Override
    public String save() throws Exception {
        this.userManager.save(entity);
        return null;
    }

    @Override
    public String delete() throws Exception {
        return null;
    }
    
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public User getEntity() {
        return entity;
    }

    public void setEntity(User entity) {
        this.entity = entity;
    }

}
UserAction

转载于:https://www.cnblogs.com/sishishinn/p/5473720.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值