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

一.创建maven项目
        eclipse版本4以上自带maven插件

        File-》New-》MavenProject-》Next

 

设置groupId ArtifactId

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

ArtifactId 通常为 项目名-模块名 

二.消除eclipse项目上的红叉
1.

 

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

将Source里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 setPprice(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>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值