Web-第二十六天 Maven学习二【悟空教程】
1 maven构建ssh工程
1.1 需求
1、通过maven完成ssh工程的构建。
2、根据ID获取客户信息
1.2 准备环境
创建数据库:maven
导入sql/cst_customer.sql
导入之后:
1.3 ssh工程构建
1.3.1 创建maven web工程
根据需求,SSH整合需要创建web工程:maven-ssh工程。
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插件
访问: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”方式启动,并且需要引入源码才可源码跟踪:
引入源码:
添加,选择本工程:
重启,以debug方式运行:
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提供聚合工程来实现此功能。
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 创建父工程
这里选择“跳过骨架选择”
定义坐标:
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
2.2.1.3.1 代码
2.2.1.4 Ssh-dao工程创建
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工程中
2.2.1.5 Ssh-service
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工程中
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工程中
2.3 运行聚合工程
方式1(推荐):右键点击maven-parent工程,然后执行tomcat7::run
方式2:右键点击ssh-web工程,然后执行tomcat7::run
长按指纹,识别二维码,一键关注Java,大数据
长按指纹,识别二维码,一键关注Python
长按指纹,识别二维码,一键关注产品经理