一.创建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
The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
这是由于未添加依赖servlet-api
此时在pom.xml中添加如下依赖
pom.xml上右击-》run As-》Maven build.. install命令
发现该项目上的红叉消失了。
三.简单项目代码
项目目标:从jsp网页上输入商品的名称和价格,添加到数据库中
1.包结构
2.pom.xml配置
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3.struts.xml
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
此处sturts.xml的配置 使得action对象的创建不是由struts2完成而是由spring来创建(既可通过struts2,也可通过spring)。官方推荐使用spring来创建
action对象的创建通过spring来创建时,有两点需要注意,
1.在spring的配置文件中(applicationContext.xml)需要手动注入Service对象
2. 在Struts2,action的class属性的值productAction为在spring中创建的action的id名
4.applicationContext.xml
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">
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插件,可根据实体类自动创建关系映射文件
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
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
// 模型驱动使用的类
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" %>
保存商品的页面
商品名称
商品价格