使用maven搭建ssh环境,不可不读的入门篇(完整案例)

一.创建maven项目

        eclipse版本4以上自带maven插件

        File-》New-》MavenProject-》Next

 

 

设置groupId ArtifactId

groupId 通常为 域名反写.项目名

ArtifactId 通常为 项目名-模块名 

二.消除eclipse项目上的红叉

1.

 

右击项目名-》BuildPath-》Configure Build Path

将missing的文件夹移除(Remove) 

右击项目名,新增移除的两个文件夹

src/main/java

src/test/java

2.

The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path 

这是由于未添加依赖servlet-api

此时在pom.xml中添加如下依赖

<dependency>
	<groupId>com.hynnet</groupId>
	<artifactId>javax.servlet-api</artifactId>
	<version>3.1.0</version>
	<!-- 只在编译测试时运行 -->
	<scope>provided</scope>
</dependency>

pom.xml上右击-》run As-》Maven build..    install命令

发现该项目上的红叉消失了。

三.简单项目代码

项目目标:从jsp网页上输入商品的名称和价格,添加到数据库中

1.包结构

还有一个addProduct.jsp在webApp目录下

2.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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.byf.webDemo</groupId>
	<artifactId>webDemo</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>webDemo Maven Webapp</name>
	<url>http://maven.apache.org</url>
	
	<properties>
        <!-- 统一源码的编码方式 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- 统一各个框架版本 -->
        <struts.version>2.5.10</struts.version>
        <spring.version>4.3.8.RELEASE</spring.version>
        <hibernate.version>5.1.7.Final</hibernate.version>
    </properties>
    
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>com.hynnet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<!-- 只在编译测试时运行 -->
			<scope>provided</scope>
		</dependency>


	
		<!-- Spring 核心依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- Spring web依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        
         <!-- Spring整合ORM框架依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.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>
        <!-- Hibernate 核心依赖 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <!-- MySQL 依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.42</version>
        </dependency>
        <!-- C3P0 依赖 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5</version>
        </dependency>
        <!-- AspectJ依赖 -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.10</version>
        </dependency>
        <!-- SLF4J依赖 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>
         
	</dependencies>
	<build>
		<finalName>webDemo</finalName>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version> 
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<version>2.2</version>
				<configuration>
					<!-- <url>http://localhost:8080/manager</url> -->            <!-- tomcat6部署管理路径 -->
					<url>http://localhost:8080/manager/text</url>                <!-- tomcat7部署管理路径 -->
					<username>admin</username>                                <!-- tomcat的管理员账号 -->
					<password>admin</password>
					<port>9999</port>
					<path>/webDemo</path>                            <!-- 部署路径 -->
					<charset>UTF-8</charset>
					<encoding>UTF-8</encoding>
					<!-- 运行redeploy命令前,要能正常访问http://localhost:8080/manager -->
				</configuration>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>run</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

 

3.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>
	<package name="webDemo" extends="struts-default" namespace="/">
		<!-- productAction为在spring中创建的action的id名 spring创建需要手动注入 -->
		<action name="product_*" class="productAction" method="{1}">
		</action>
	</package>
</struts>	

此处sturts.xml的配置 使得action对象的创建不是由struts2完成而是由spring来创建(既可通过struts2,也可通过spring)。官方推荐使用spring来创建

action对象的创建通过spring来创建时,有两点需要注意,

1.在spring的配置文件中(applicationContext.xml)需要手动注入Service对象

<!– 配置Action的类 –>
        <bean id=”productAction” class=”com.byf.webDemo.action.ProductAction”>
            <property name=”productService” ref=”productService”></property>
        </bean>

2. 在Struts2,action的class属性的值productAction为在spring中创建的action的id名

4.applicationContext.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:context="http://www.springframework.org/schema/context"
    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-4.3.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">
        <!-- 引入外部的属性文件 -->
        <context:property-placeholder location="classpath:jdbc.properties"/>
        <!-- 配置Hibernate的相关属性 -->
        <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        	<!-- 注入连接池 -->
        	<property name="dataSource" ref="dataSource"></property>
        	<!-- 配置Hibernate的属性 -->
        	<property name="hibernateProperties">
        		<props>
        			<prop key="hibernate.fomat_sql">true</prop><!-- 是否格式化SQL -->
	        		<prop key="hibernate.show_sql">true</prop><!-- 是否展示SQL -->
	                <prop key="hibernate.hbm2ddl.auto">update</prop><!-- 是否自动创建表结构 -->
	                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
        		</props>
        	</property>
        		
        	<!-- 加载Hibernate中的映射文件 -->
        	<property name="mappingResources">
        		<list>
        			<value>Product.hbm.xml</value>
        		</list>
        	</property>
        </bean>
        	
        <!-- 配置连接池 -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        	<property name="driverClass" value="${jdbc.driverClass}" />
        	<property name="jdbcUrl" value="${jdbc.url}" />
        	<property name="user" value="${jdbc.username}" />
        	<property name="password" value="${jdbc.password}" />
        </bean>
        
        <!-- 配置Action的类 -->
        <bean id="productAction" class="com.byf.webDemo.action.ProductAction">
        	<property name="productService" ref="productService"></property>
        </bean>
        
        <!-- 配置业务层的类 -->
        <bean id="productService" class="com.byf.webDemo.service.ProductService">
        	<property name="productDao" ref="productDao"></property>
        </bean>
        
        <!-- 配置Dao的类 -->
        <bean id="productDao" class="com.byf.webDemo.dao.ProductDao">
        	<property name="sessionFactory" ref="sessionFactory"></property>
        </bean>
        
        <!-- 配置事务管理器 -->
        <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        	<property name="sessionFactory" ref="sessionFactory"></property>
        </bean>
        
        <!-- 开启注解事务 -->
        <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

5.jdbc.properties

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/数据库名字
jdbc.username=数据库用户名
jdbc.password=密码

根据自己的实际情况更改对应的数据库信息

hibernate会自动建表,库一定要存在,在cmd中使用  “create database 数据库名字;”建表 或者 使用数据库管理软件直接建表例如Navicat

6.log4j.properties

#定义LOG输出级别  
log4j.rootLogger=INFO,Console,File  
#定义日志输出目的地为控制台  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.Target=System.out  
#可以灵活地指定日志输出格式,下面一行是指定具体的格式  
log4j.appender.Console.layout = org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n  

#文件大小到达指定尺寸的时候产生一个新的文件  
log4j.appender.File = org.apache.log4j.RollingFileAppender  
#指定输出目录  
log4j.appender.File.File = logs/ssm.log  
#定义文件最大大小  
log4j.appender.File.MaxFileSize = 10MB  
# 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志  
log4j.appender.File.Threshold = ALL  
log4j.appender.File.layout = org.apache.log4j.PatternLayout  
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n

7.Product.hbm.xml (Hibernate关系映射文件)

按照Hibernate插件,可根据实体类自动创建关系映射文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-8-6 14:45:17 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="com.byf.webDemo.domain.Product" table="PRODUCT">
        <id name="pid" type="java.lang.Integer">
            <column name="PID" />
            <generator class="native" />
        </id>
        <property name="pname" type="java.lang.String">
            <column name="PNAME" />
        </property>
        <property name="pprice" type="java.lang.Double">
            <column name="PRICE" />
        </property>
    </class>
</hibernate-mapping>

 8. 创建实体类 Product.java

package com.byf.webDemo.domain;
/**
 * 商品实体
 */
public class Product {
	private Integer pid;
	private String pname;
	private Double pprice;
	public Integer getPid() {
		return pid;
	}
	public void setPid(Integer pid) {
		this.pid = pid;
	}
	public String getPname() {
		return pname;
	}
	public void setPname(String pname) {
		this.pname = pname;
	}
	public Double getPprice() {
		return pprice;
	}
	public void setPrice(Double pprice) {
		this.pprice = pprice;
	}
	
}

 9. 创建DAO类 ProductDao.java

package com.byf.webDemo.dao;

import org.springframework.orm.hibernate5.support.HibernateDaoSupport;

import com.byf.webDemo.domain.Product;

/**
 * 商品管理Dao
 * @author hp
 *
 */
public class ProductDao extends HibernateDaoSupport{
	public void save(Product product) {
		// TODO Auto-generated method stub
		System.out.println("DAO中的save方法调用了...");
		this.getHibernateTemplate().save(product);
	}
	
}

 

spring为hibernate的DAO提供工具类:HibernateDaoSupport。该类主要提供如下两个方法,方便DAO的实现:   

 public final HibernateTemplate getHibernateTemplate()

 public final void setSessionFactory(SessionFactory sessionFactory)

其中,setSessionFactory方法用来接收Spring的ApplicationContext的依赖注入,可接收配置在Spring的SessionFactory实例,

getHibernateTemplate方法则用来根据刚才的SessionFactory产生Session,最后生成HibernateTemplate来完成数据库访问。

10. 创建Service类 ProductService.java

package com.byf.webDemo.service;
/**
 * 商品管理的业务层类
 */

import org.springframework.transaction.annotation.Transactional;

import com.byf.webDemo.dao.ProductDao;
import com.byf.webDemo.domain.Product;
@Transactional
public class ProductService {
	// 业务层注入Dao的类
	private ProductDao productDao;
	
	public void setProductDao(ProductDao productDao) {
		this.productDao = productDao;
	}
	
	public void save(Product product) {
		System.out.println("Service方法中的 save方法执行了...");
		productDao.save(product);
	}
}

 11. 创建Action类 ProductAction.java

package com.byf.webDemo.action;

import com.byf.webDemo.domain.Product;
import com.byf.webDemo.service.ProductService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class ProductAction extends ActionSupport implements ModelDriven<Product>{
	// 模型驱动使用的类
	private Product product = new Product();
	@Override
	public Product getModel() {
		// TODO Auto-generated method stub
		return product;
	}
	
	// Struts和Spring整合过程中按名称自动注入的业务层类
	private ProductService productService;
	
	public void setProductService(ProductService productService) {
		this.productService = productService;
	}
	
	/**
	 * 保存商品的执行方法:save
	 */
	public String save() {
		System.out.println("Action中的save 方法执行了...");
		productService.save(product);
		return NONE;
	}
}

12. addProduct.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!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>Insert title here</title>
</head>
<body>
<h1>保存商品的页面</h1>
<s:form action="product_save" method="post" namespace="/" theme="simple">
<table border="1" width="400">
	<tr>
		<td>商品名称</td>
		<td><s:textfield name="pname"/> 
	</tr>
	<tr>
		<td>商品价格</td>
		<td><s:textfield name="pprice"/> 
	</tr>
	<tr>
		<td colspan="2"><input type="submit" value="添加"/></td>
	</tr>
</table>
</s:form>
</body>
</html>

13. 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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <filter>
  	<filter-name>struts2</filter-name>
  	<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <!-- Spring框架的核心监听器 -->
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- 指定Spring配置文件所在路径 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
  <!--  Struts2的框架的核心过滤器的配置 -->
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <welcome-file-list>
    <welcome-file>addProduct.jsp</welcome-file>
  </welcome-file-list> 
</web-app>

 四.运行项目

在pom.xml配置过插件,当运行package命令时,同时运行tomcat:run

运行前:数据库

在网页上输入数据: 

点击添加按钮后,控制台输出 :

数据库更新后:

 终于大功告成啦!!

« »

发表评论

电子邮件地址不会被公开。 必填项已用*标注

昵称 *