Web-第二十六天 Maven学习二【悟空教程】

Web-第二十六天 Maven学习二【悟空教程】_struts


1 maven构建ssh工程

1.1 需求

1、通过maven完成ssh工程的构建。

2、根据ID获取客户信息


1.2 准备环境

创建数据库:maven

导入sql/cst_customer.sql

Web-第二十六天 Maven学习二【悟空教程】_struts_02

导入之后:

Web-第二十六天 Maven学习二【悟空教程】_struts_03 


1.3 ssh工程构建

1.3.1 创建maven web工程

根据需求,SSH整合需要创建web工程:maven-ssh工程。

Web-第二十六天 Maven学习二【悟空教程】_spring_04 

1.3.2 pom.xml

在pom.xml添加工程依赖:

(本工程为ssh整合工程,依赖struts2.3.24、 spring4.2.4、hibernate5.0.7等),如下:


<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>cn.com.javahelp</groupId>

<artifactId>maven-ssh</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>war</packaging>

<!-- 自定义属性统一引用版本 -->

<properties>

<spring.version>4.2.4.RELEASE</spring.version>

<hibernate.version>5.0.7.Final</hibernate.version>

<struts.version>2.3.24</struts.version>

<mysql.version>5.1.6</mysql.version>

<c3p0.version>0.9.1.2</c3p0.version>

<servlet-api.version>2.5</servlet-api.version>

<jsp-api.version>2.0</jsp-api.version>

<slf4j.version>1.7.2</slf4j.version>

<jstl.version>1.2</jstl.version>

</properties>

<!-- 锁定版本 -->

<dependencyManagement>

<dependencies>

<!-- spring依赖 -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-aspects</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-orm</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-test</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-web</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-beans</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-core</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context-support</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jms</artifactId>

<version>${spring.version}</version>

</dependency>


<!-- hibernate依赖 -->

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-core</artifactId>

<version>${hibernate.version}</version>

</dependency>


<!-- 数据库驱动 -->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>${mysql.version}</version>

</dependency>

<!-- c3p0 -->

<dependency>

<groupId>c3p0</groupId>

<artifactId>c3p0</artifactId>

<version>${c3p0.version}</version>

</dependency>

<!-- struts2依赖 -->

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-core</artifactId>

<version>${struts.version}</version>

</dependency>

<!-- struts2和spring的整合依赖 -->

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-spring-plugin</artifactId>

<version>${struts.version}</version>

</dependency>

<!-- struts2和jquery整合依赖 -->

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-json-plugin</artifactId>

<version>${struts.version}</version>

</dependency>


<!-- servlet jsp -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>${servlet-api.version}</version>

</dependency>

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jsp-api</artifactId>

<version>${jsp-api.version}</version>

</dependency>

<!-- jstl -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jstl</artifactId>

<version>${jstl.version}</version>

</dependency>

<!-- 日志 -->

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

<version>${slf4j.version}</version>

</dependency>

</dependencies>

</dependencyManagement>

<dependencies>

<!-- spring -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-beans</artifactId>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

</dependency>


<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-aspects</artifactId>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context-support</artifactId>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jms</artifactId>

</dependency>


<!-- hibernate -->

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-core</artifactId>

</dependency>


<!-- 数据库驱动 -->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<scope>runtime</scope>

</dependency>

<!-- c3p0 -->


<dependency>

<groupId>c3p0</groupId>

<artifactId>c3p0</artifactId>

</dependency>

<!-- 导入 struts2 -->

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-core</artifactId>

</dependency>

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-spring-plugin</artifactId>

</dependency>

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-json-plugin</artifactId>

</dependency>


<!-- servlet jsp -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jsp-api</artifactId>

<scope>provided</scope>

</dependency>


<!-- jstl -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jstl</artifactId>

</dependency>

<!-- 日志 -->

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

</dependency>

<!-- junit -->

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.9</version>

<scope>test</scope>

</dependency>


</dependencies>

<build>

<!-- 指定打包的包名 -->

<finalName>maven-ssh</finalName>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<configuration>

<source>1.7</source>

<target>1.7</target>

<encoding>UTF-8</encoding>

</configuration>

</plugin>

</plugins>

</build>

</project>



1.3.3 Web.xml


<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

id="WebApp_ID" version="2.5">


<!-- 配置加载spring容器 -->

<listener>

<!-- 默认从/WEB-INF/applicationContext.xml加载配置文件 -->

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<context-param>

<param-name>contextConfigLocation</param-name>

<!-- spring配置文件 可以采用加载多个文件,中间以半角逗号分隔,也可以使用通配符号 -->

<param-value>classpath:spring/applicationContext-*.xml</param-value>

</context-param>

<!-- OpenSessionInView -->

<filter>

<filter-name>OpenSessionInView</filter-name>

<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>

</filter>


<filter-mapping>

<filter-name>OpenSessionInView</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>


<!-- 配置struts2的 前端控制器 作用:加载struts.xml中action,处理action的请求 -->

<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>

</web-app>



1.3.4 Domain(pojo)


public class CstCustomer implements Serializable {

private Long custId;

private String custName;

private String custLinkman;

private String custPhone;

private String custMobile;

private Date custCreatetime;

}



1.3.5 Dao

1.3.5.1 代码

根据用户ID查询cst_customer表

方法参数:Long custId

方法返回值:CstCustomer


public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {


@Override

public CstCustomer findCustomerById(Long custId) {

return this.getHibernateTemplate().get(CstCustomer.class, custId);

}

}




1.3.5.2 配置文件

1.3.5.2.1 log4j.properties

在src\main\resources\目录下,然后创建log4j.properties文件


### direct log messages to stdout ###

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.out

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###

log4j.appender.file=org.apache.log4j.FileAppender

log4j.appender.file.File=d:/mylog.log

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### log JDBC bind parameters ###

log4j.logger.org.hibernate.type=TRACE


### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=debug, stdout



1.3.5.2.2 db.properties

在src\main\resources\目录下,然后创建db.properties文件


jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/maven

jdbc.username=root

jdbc.password=root



1.3.5.2.3 hibernate.cfg.xml

在src\main\resources\目录下,创建hibernate目录,然后创建hibernate.cfg.xml文件


<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">


<hibernate-configuration>

<!-- 会话工厂 -->

<session-factory>

<!-- 数据库方言,根据数据库选择 -->

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>


<!--为了方便调试是否在运行hibernate时在日志中输出sql语句 -->

<property name="hibernate.show_sql">true</property>

<!-- 是否对日志中输出的sql语句进行格式化 -->

<property name="hibernate.format_sql">true</property>


<property name="hibernate.hbm2ddl.auto">none</property>


<!-- 事务管理 -->

<!-- 事务隔离级别 -->

<property name="hibernate.connection.isolation">4</property>

<!-- 配置session绑定本地线程 -->

<!-- <property name="hibernate.current_session_context_class">thread</property> -->

<!-- 使用spring与hibernate整合类SpringSessionContext -->

<property name="hibernate.current_session_context_class">org.springframework.orm.hibernate5.SpringSessionContext</property>


<!-- 加载映射文件 -->

<mapping resource="cn/com/javahelp/ssh/domain/CstCustomer.hbm.xml" />

</session-factory>

</hibernate-configuration>



1.3.5.2.4 CstCustomer.hbm.xml

在src\main\resources\目录下,此次创建cn\com\javahelp\ssh\domain目录,创建CstCustomer.hbm.xml文件


<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">


<hibernate-mapping>

<class name="cn.com.javahelp.ssh.domain.CstCustomer" table="cst_customer"

catalog="maven" optimistic-lock="version">

<id name="custId" type="java.lang.Long">

<column name="cust_id" />

<generator class="identity" />

</id>


<property name="custName" type="string">

<column name="cust_name" length="32" not-null="true"></column>

</property>

<property name="custLinkman" type="string">

<column name="cust_linkman" length="64"></column>

</property>

<property name="custPhone" type="string">

<column name="cust_phone" length="64"></column>

</property>

<property name="custMobile" type="string">

<column name="cust_mobile" length="16"></column>

</property>

<property name="custCreatetime" type="timestamp">

<column name="cust_createtime" length="19"></column>

</property>


</class>

</hibernate-mapping>



1.3.5.2.5 applicationContext-db.xml

在src\main\resources\目录下,创建spring目录,然后创建applicationContext-db.xml文件


<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"

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.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">


<!-- 将db.properties文件属性值(key/value)加载到容器中 -->

<context:property-placeholder location="classpath:db.properties" />


<!-- c3p0从属性中获取连接参数 ${jdbc.driver}表示从属性中取值,jdbc.driver就是属性中的key -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

<property name="driverClass" value="${jdbc.driver}" />

<property name="jdbcUrl" value="${jdbc.url}" />

<property name="user" value="${jdbc.username}" />

<property name="password" value="${jdbc.password}" />

</bean>


<!-- sesionFactory 注入数据源 -->

<bean id="sessionFactory"

class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">

<!-- 数据源 -->

<property name="dataSource" ref="dataSource" />

<!-- 加载hibernate的全局配置文件 -->

<property name="configLocations" value="classpath:hibernate/hibernate.cfg.xml" />

</bean>


</beans>



1.3.5.2.6 applicationContext-dao.xml

在src\main\resources\spring目录下,然后创建applicationContext-dao.xml文件


<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"

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.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">


<!-- dao -->

<bean id="customerDao" class="cn.com.javahelp.ssh.dao.impl.CustomerDaoImpl">

<!-- 依赖HibernateTemplate或SessionFactory -->

<property name="sessionFactory" ref="sessionFactory" />

</bean>


</beans>



1.3.6 Service

1.3.6.1 代码

 方法参数:Long custId

方法返回值:CstCustomer


@Service

public class CustomerServiceImpl implements CustomerService {


@Autowired

private CustomerDao customerDao;


public CstCustomer findCustomerById(Long custId) {

return customerDao.findCustomerById(custId);

}


}



1.3.6.2 配置

1.3.6.2.1 applicationContext-service.xml

在src\main\resources\spring目录下,然后创建applicationContext-service.xml文件


<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"

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.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">


<!-- 组件扫描 -->

<context:component-scan base-package="cn.com.javahelp.ssh.service" />

<!-- 事务管理器 -->

<bean id="transactionManager"

class="org.springframework.orm.hibernate5.HibernateTransactionManager">

<!-- 注入sessionFactory -->

<property name="sessionFactory" ref="sessionFactory" />

</bean>


<!-- 事务增强,配置事务属性信息 -->

<tx:advice id="txAdvice" transaction-manager="transactionManager">

<tx:attributes>

<tx:method name="save*" propagation="REQUIRED" />

<tx:method name="insert*" propagation="REQUIRED" />

<tx:method name="delete*" propagation="REQUIRED" />

<tx:method name="update*" propagation="REQUIRED" />

<tx:method name="find*" read-only="true" />

<tx:method name="get*" read-only="true" />

                 <tx:method name="update*" propagation="REQUIRED" />

</tx:attributes>

</tx:advice>

 <!-- aop代理配置 proxy-target-class="true"表示 使用cglib代理,为false使用jdk -->

<aop:config>

<aop:advisor advice-ref="txAdvice"

pointcut="execution(* cn.com.javahelp.ssh.service.impl.*.*(..))" />

</aop:config>

</beans>



1.3.7 Action

1.3.7.1 代码

请求参数:Long custId

响应数据:CstCustomer

返回值:SUCCESS


public class CustomerAction extends ActionSupport {

private Long custId;

private CstCustomer customer;

public CustomerService getCustomerService() {

return customerService;

}


public void setCustomerService(CustomerService customerService) {

this.customerService = customerService;

}


public Long getCustId() {

return custId;

}


public void setCustId(Long custId) {

this.custId = custId;

}


public CstCustomer getCustomer() {

return customer;

}


public void setCustomer(CstCustomer customer) {

this.customer = customer;

}


@Autowired

private CustomerService customerService;

public String findCustomerById() {

customer = customerService.findCustomerById(custId);

return SUCCESS;

}

} 



1.3.7.2 配置

1.3.7.2.1 applicationContext-action.xml

在src\main\resources\spring目录下,然后创建applicationContext-action.xml文件


<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"

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.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">


<bean id="customerAction" class="cn.com.javahelp.ssh.action.CustomerAction">

</bean>

</beans>




1.3.7.2.2 struts.xml

在src\main\resources\目录下,然后创建struts.xml文件


<?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>

<include file="struts/struts-common.xml"></include>

<include file="struts/struts-customer.xml"></include>

</struts>



1.3.7.2.3 struts-common.xml

在src\main\resources\struts目录下,然后创建struts-common.xml文件


<?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>


<!-- 配置常量 -->

<!-- 字符集 -->

<constant name="struts.i18n.encoding" value="UTF-8"></constant>

<!-- 开发模式 -->

<constant name="struts.devMode" value="true"></constant>

<!-- 主题 -->

<constant name="struts.ui.theme" value="simple"></constant>

<!-- 扩展名 -->

<constant name="struts.action.extension" value="action"></constant>

<!-- 动态方法访问 -->

<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>


<!-- 上传文件大小最大为4M -->

<constant name="struts.multipart.maxSize" value="4194304"></constant>


<!-- 通用package -->

<package name="common" extends="struts-default"></package>


</struts>



1.3.7.2.4 struts-customer.xml

在src\main\resources\struts目录下,然后创建struts-customer.xml文件


<?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>

<package name="customer" extends="common" namespace="/customer">

<action name="findCustomerById" class="customerAction" method="findCustomerById">

<result>/jsp/customer/findCustomerById.jsp </result>

</action>

</package>

</struts>



1.3.8 Jsp

/src/main/webapp/jsp/customer/findCustomerById.jsp如下:


<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>测试</title>

</head>

<body>

<!-- 从模型对象中获取属性值 -->

${customer.custName}

</body>

</html>



1.3.9 运行与调试

1.3.9.1 tomcat:run

执行tomcat:run命令maven默认使用org.codehaus.mojo. tomcat-maven-plugin插件

Web-第二十六天 Maven学习二【悟空教程】_spring_05

访问:http://localhost:8080/工程名/...

修改访问路径及端口:

<plugin>

                <groupId>org.codehaus.mojo</groupId>

                <artifactId>tomcat-maven-plugin</artifactId>

                <version>1.1</version>

                <configuration>

                    <path>/ssh</path>

                    <port>8080</port>

                </configuration>

            </plugin>


1.1.1.1 tomcat6:run

org.apache.tomcat.maven提供了tomcat6插件,在pom.xml中通过配置tomcat6插件,可以灵活设置服务端口及访问路径:

<build>

<plugins>

<!-- 配置Tomcat6插件-->

<plugin>

<groupId>org.apache.tomcat.maven</groupId>

<artifactId>tomcat6-maven-plugin</artifactId>

<version>2.2</version>

<configuration>

<!-- 指定端口 -->

<port>8088</port>

<!-- 指定Context Path

如果不指定则Context Path为build标签中finalName指定的名称,若没指定,则为artifactId的值

-->

<path>/ssh</path>

</configuration>

</plugin>

</plugins>

</build>


执行如下命令: 

mvn tomcat6:run

访问:http://localhost:8088/ssh


1.3.9.2 tomcat7:run推荐使用 

org.apache.tomcat.maven提供了tomcat7插件,在pom.xml中配置:

<!-- 配置Tomcat7插件 -->

<plugin>

<groupId>org.apache.tomcat.maven</groupId>

<artifactId>tomcat7-maven-plugin</artifactId>

<version>2.2</version>

<configuration>

<!-- 指定端口 -->

<port>8081</port>

<!-- 请求路径 -->

<path>/</path>

</configuration>

</plugin>


执行命令: 

mvn tomcat7:run

访问:http://localhost:8081/


1.3.9.3 端口占用

重新执行tomcat:run命令重启工程,重启之前需手动停止 tomcat,否则报下边的错误:

Caused by: java.net.BindException: Address already in use: JVM_Bind


1.3.9.4 断点调试

maven工程断点调试必须采用“Debug As”方式启动,并且需要引入源码才可源码跟踪:

Web-第二十六天 Maven学习二【悟空教程】_spring_06

Web-第二十六天 Maven学习二【悟空教程】_spring_07

引入源码:

Web-第二十六天 Maven学习二【悟空教程】_xml_08

添加,选择本工程:

Web-第二十六天 Maven学习二【悟空教程】_xml_09

Web-第二十六天 Maven学习二【悟空教程】_struts_10

重启,以debug方式运行:

Web-第二十六天 Maven学习二【悟空教程】_struts_11


2 分模块构建工程

2.1 需求

2.1.1 需求描述

将maven-ssh工程,按照工程的三层结构进行拆分,拆分为ssh-domain、ssh-dao、ssh-service、ssh-web工程。


2.1.2 需求分析

1.拆分之后的工程,可以分别被打成jar包或者war包,这样可以提升domain、dao和Service层的可重用性。

2.拆分之后,有很多相同的pom文件配置,此时为了解决可重复性,需要提取出一个父工程:maven-parent

3.拆分之后的工程,在运行时,需要合并到一起再进行启动,此时,需要将他们聚合到一起,而maven提供聚合工程来实现此功能。

Web-第二十六天 Maven学习二【悟空教程】_xml_12


2.1.3 理解继承和聚合

通常继承和聚合同时使用。 

  • 何为聚合? 

项目开发通常是分组分模块开发,每个模块开发完成需要将模块聚合在一起运行

  • 何为继承? 

继承为了消除重复,我们把很多相同的配置提取出来,子模块继承父模块。 

注意:父工程和聚合工程的打包方式都必须为POM方式


2.1.4 拆分后的工程结构

Maven-parent(锁定版本,pom)

|--ssh-domain(jar)

|--ssh-dao(jar)

|--ssh-service(jar)

|--ssh-web(war)


2.2 案例实现

2.2.1 maven-parent父模块

2.2.1.1 创建父工程

Web-第二十六天 Maven学习二【悟空教程】_xml_13

这里选择“跳过骨架选择”

Web-第二十六天 Maven学习二【悟空教程】_xml_14

定义坐标:

Web-第二十六天 Maven学习二【悟空教程】_struts_15


2.2.1.2 POM文件


<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>cn.com.javahelp.ssh</groupId>

<artifactId>maven-parent</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>pom</packaging>


<!-- 自定义属性统一引用版本 -->

<properties>

<spring.version>4.2.4.RELEASE</spring.version>

<hibernate.version>5.0.7.Final</hibernate.version>

<struts.version>2.3.24</struts.version>

<mysql.version>5.1.6</mysql.version>

<c3p0.version>0.9.1.2</c3p0.version>

<servlet-api.version>2.5</servlet-api.version>

<jsp-api.version>2.0</jsp-api.version>

<slf4j.version>1.7.2</slf4j.version>

<jstl.version>1.2</jstl.version>

</properties>

<!-- 锁定版本 -->

<dependencyManagement>

<dependencies>

<!-- spring依赖 -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-aspects</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-orm</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-test</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-web</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-beans</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

   <artifactId>spring-core</artifactId>

   <version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-asm</artifactId>

<version>${spring.version}</version>

</dependency>

<!-- hibernate依赖 -->

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-core</artifactId>

<version>${hibernate.version}</version>

</dependency>


<!-- 数据库驱动 -->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>${mysql.version}</version>

</dependency>

<!-- c3p0 -->

<dependency>

<groupId>c3p0</groupId>

<artifactId>c3p0</artifactId>

<version>${c3p0.version}</version>

</dependency>

<!-- struts2依赖 -->

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-core</artifactId>

<version>${struts.version}</version>

</dependency>

<!-- struts2和spring的整合依赖 -->

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-spring-plugin</artifactId>

<version>${struts.version}</version>

</dependency>

<!-- struts2和jquery整合依赖 -->

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-json-plugin</artifactId>

<version>${struts.version}</version>

</dependency>


<!-- servlet jsp -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>${servlet-api.version}</version>

</dependency>

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jsp-api</artifactId>

<version>${jsp-api.version}</version>

</dependency>

<!-- jstl -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jstl</artifactId>

<version>${jstl.version}</version>

</dependency>

<!-- 日志 -->

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

<version>${slf4j.version}</version>

</dependency>

</dependencies>

</dependencyManagement>


<build>

<!-- 指定打包的包名,默认是GAV坐标的一个组合 -->

<finalName>maven-ssh</finalName>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<configuration>

<source>1.7</source>

<target>1.7</target>

<encoding>UTF-8</encoding>

</configuration>

</plugin>


<!-- 配置Tomcat7插件 -->

<plugin>

<groupId>org.apache.tomcat.maven</groupId>

<artifactId>tomcat7-maven-plugin</artifactId>

<version>2.2</version>

<configuration>

<!-- 指定端口 -->

<port>80</port>

<!-- 请求路径,默认是工程名称 -->

<path>/</path>

</configuration>

</plugin>

</plugins>

</build>

</project>



2.2.1.3 Ssh-domain工程创建

选中maven-parent工程,然后右键,new project ,然后选中maven module

Web-第二十六天 Maven学习二【悟空教程】_spring_16

Web-第二十六天 Maven学习二【悟空教程】_xml_17 

2.2.1.3.1 代码

Web-第二十六天 Maven学习二【悟空教程】_spring_18 


2.2.1.4 Ssh-dao工程创建

Web-第二十六天 Maven学习二【悟空教程】_spring_19 

2.2.1.4.1 POM文件


<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>

<parent>

<groupId>cn.com.javahelp.ssh</groupId>

<artifactId>maven-parent</artifactId>

<version>0.0.1-SNAPSHOT</version>

</parent>

<artifactId>ssh-dao</artifactId>


<dependencies>

<dependency>

<groupId>cn.com.javahelp.ssh</groupId>

<artifactId>ssh-domain</artifactId>

<version>0.0.1-SNAPSHOT</version>

</dependency>

<!-- spring -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-aspects</artifactId>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-orm</artifactId>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-test</artifactId>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-web</artifactId>

</dependency>

<!-- hibernate -->

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-core</artifactId>

</dependency>


<!-- 数据库驱动 -->

<dependency>

<groupId>mysql</groupId>

  <artifactId>mysql-connector-java</artifactId>

<scope>runtime</scope>

</dependency>

<!-- c3p0 -->


<dependency>

<groupId>c3p0</groupId>

<artifactId>c3p0</artifactId>

</dependency>

</dependencies>

</project>



2.2.1.4.2 代码和配置文件

将maven-ssh中的dao包下的类和src/main/resource目录下dao的配置文件,拷贝到ssh-dao工程中

Web-第二十六天 Maven学习二【悟空教程】_spring_20 


2.2.1.5 Ssh-service

Web-第二十六天 Maven学习二【悟空教程】_spring_21 

2.2.1.5.1 POM文件


<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>

<parent>

<groupId>cn.com.javahelp.ssh</groupId>

<artifactId>maven-parent</artifactId>

<version>0.0.1-SNAPSHOT</version>

</parent>

<artifactId>ssh-service</artifactId>

<dependencies>

<dependency>

<groupId>cn.com.javahelp.ssh</groupId>

<artifactId>ssh-dao</artifactId>

<version>0.0.1-SNAPSHOT</version>

</dependency>

</dependencies>

</project>



2.2.1.5.2 代码和配置文件

将maven-ssh中的service包下的类和src/main/resource目录下service的配置文件,拷贝到ssh-service工程中

Web-第二十六天 Maven学习二【悟空教程】_struts_22 


2.2.1.6 Ssh-web

2.2.1.6.1 POM文件


<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>

<parent>

<groupId>cn.com.javahelp.ssh</groupId>

<artifactId>maven-parent</artifactId>

<version>0.0.1-SNAPSHOT</version>

</parent>

<artifactId>ssh-web</artifactId>

<packaging>war</packaging>


<dependencies>

<dependency>

<groupId>cn.com.javahelp.ssh</groupId>

<artifactId>ssh-service</artifactId>

<version>0.0.1-SNAPSHOT</version>

</dependency>


<!-- struts2依赖 -->

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-core</artifactId>

</dependency>

<!-- struts2和spring的整合依赖 -->

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-spring-plugin</artifactId>

</dependency>

<!-- struts2和jquery整合依赖 -->

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-json-plugin</artifactId>

</dependency>


<!-- servlet jsp -->

<!-- servlet jsp -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jsp-api</artifactId>

<scope>provided</scope>

</dependency>

<!-- jstl -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jstl</artifactId>

</dependency>

</dependencies>

</project>



2.2.1.6.2 Web.xml和jsp

从maven-ssh工程中,将src/main/webapp包下的文件,拷贝到ssh-action工程中


2.2.1.6.3 代码和配置

将maven-ssh中的action包下的类和src/main/resources目录下action的配置文件,拷贝到ssh-action工程中

Web-第二十六天 Maven学习二【悟空教程】_struts_23 


2.3 运行聚合工程

方式1(推荐):右键点击maven-parent工程,然后执行tomcat7::run

方式2:右键点击ssh-web工程,然后执行tomcat7::run


Web-第二十六天 Maven学习二【悟空教程】_spring_24

Web-第二十六天 Maven学习二【悟空教程】_xml_25Web-第二十六天 Maven学习二【悟空教程】_xml_26

长按指纹,识别二维码,一键关注Java,大数据

Web-第二十六天 Maven学习二【悟空教程】_struts_27Web-第二十六天 Maven学习二【悟空教程】_xml_26

长按指纹,识别二维码,一键关注Python

Web-第二十六天 Maven学习二【悟空教程】_struts_29Web-第二十六天 Maven学习二【悟空教程】_xml_26

长按指纹,识别二维码,一键关注产品经理