Maven搭建SSH框架

时间:2023-03-08 16:07:36
Maven搭建SSH框架

工具:Eclipse(Maven管理工具)+Tomcat+Mysql。

1.新建一个Maven工程(maven-archetype-webapp)。

打开File ——>new——>Maven Project,直接next,选择(maven-archetype-webapp).接着输入Grouid和ArtifactId,点击finish等待生成项目即可。

Maven搭建SSH框架

2.修改pom.xml文件,我这里的依赖是网上找的。保存后会自动下载jar包在你的repository文件夹中(这里要保证连网)。

<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.gh</groupId>
<artifactId>SSH1</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>SSH1 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>4.2.4.Final</hibernate.version>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</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> <dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency> </dependencies>
<build>
<finalName>SSH1</finalName>
<!-- 统一源代码编译输出的JDK版本 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<!-- 打包时跳过单元测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<!-- 集成Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/${project.artifactId}</path>
</configuration>
</plugin>
</plugins> </build>
</project>

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"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>ssh</display-name> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 配置Struts2过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- 配置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> </web-app>

4.添加struts.xml文件和applicationcontext.xml文件在src目录下。

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd"><!-- 注意版本 -->
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<package name="user" namespace="/user" extends="struts-default">
<action name="UserAction" class="action.UserAction" method="toLogin">
<result name="success">/index2.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>

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:p="http://www.springframework.org/schema/p"
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/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd" default-autowire="byName"> <context:annotation-config />
<!-- spring 扫描路径,注意当前工程只需要扫描dao和service,srpingmvc或者struts2注解才有变化 -->
<context:component-scan base-package="dao,service" /> <bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/young">
</property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">
true
</prop>
</props>
</property>
<property name="mappingDirectoryLocations">
<list>
<value>classpath:entity/</value>
</list>
</property>
</bean>
<!-- 配置声明式事务管理(采用注解的方式) -->
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 开启注解事务 -->
<tx:annotation-driven transaction-manager="txManager"/>
</beans>

5.新建实体,动作类和接口等。结构如下图。

Maven搭建SSH框架

   UserAction.java

package action;
import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import com.opensymphony.xwork2.ActionSupport; import entity.User;
import service.UserService;
@Controller
public class UserAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
@Autowired
private UserService userService;//�Զ�ע�� public String toLogin(){
List<User>list=userService.findAll();
for (User user : list) {
System.out.println(user.getUserName());
}
return "success";
} }

 BaseDao.java

package common;

import java.util.List;

public interface BaseDao<T> {
public List<T> findAll();
public int insert(T t);
public int update (T t,int id);
public int delete(int id);
public T findById(int id);
}

BaseService.java

package common;

import java.util.List;

public interface BaseService <T>{
public List<T> findAll();
public boolean insert(T t);
public boolean update (T t,int id);
public boolean delete(int id);
public T findById(int id);
}

UserDao.java

package dao;

import common.BaseDao;
import entity.User; public interface UserDao extends BaseDao<User>{ }

UserDaoimpl.java

package dao.impl;

import java.util.List;

import org.hibernate.Query;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository; import dao.UserDao;
import entity.User;
@Repository
public class UserDaoimpl extends HibernateDaoSupport implements UserDao { public List<User> findAll() {
// TODO Auto-generated method stub
String sql="select * from user";
Query query=getSessionFactory().openSession().createSQLQuery(sql).addEntity(User.class);
List<User> list=query.list();
return list ;
} public int insert(User t) {
// TODO Auto-generated method stub
return 0;
} public int update(User t, int id) {
// TODO Auto-generated method stub
return 0;
} public int delete(int id) {
// TODO Auto-generated method stub
return 0;
} public User findById(int id) {
// TODO Auto-generated method stub
return null;
} }

UserService.java

package service;

import common.BaseDao;
import entity.User; public interface UserService extends BaseDao<User>{ }

UserServiceimpl.java

package service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import dao.UserDao;
import entity.User;
import service.UserService;
@Transactional
@Service
public class UserServiceimpl implements UserService{
@Autowired
private UserDao userdao; public List<User> findAll() {
// TODO Auto-generated method stub
return userdao.findAll();
} public int insert(User t) {
// TODO Auto-generated method stub
return 0;
} public int update(User t, int id) {
// TODO Auto-generated method stub
return 0;
} public int delete(int id) {
// TODO Auto-generated method stub
return 0;
} public User findById(int id) {
// TODO Auto-generated method stub
return null;
} }

User.java

package entity;
// Generated 2018-3-29 10:41:32 by Hibernate Tools 3.4.0.CR1 /**
* User generated by hbm2java
*/
public class User implements java.io.Serializable { /**
*
*/
private static final long serialVersionUID = 1L;
private Integer userid;
private String userName;
private String pwd; public User() {
} public User(String userName, String pwd) {
this.userName = userName;
this.pwd = pwd;
} public Integer getUserid() {
return this.userid;
} public void setUserid(Integer userid) {
this.userid = userid;
} public String getUserName() {
return this.userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getPwd() {
return this.pwd;
} public void setPwd(String pwd) {
this.pwd = pwd;
} }

User.hbm.xml

<?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-3-29 10:41:32 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="entity.User" table="user" catalog="young">
<id name="userid" type="java.lang.Integer">
<column name="userid" />
<generator class="identity" />
</id>
<property name="userName" type="string">
<column name="userName" length="10" />
</property>
<property name="pwd" type="string">
<column name="pwd" length="10" />
</property>
</class>
</hibernate-mapping>

jsp代码

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<c:set var="ctx" value="${pageContext.request.contextPath}"></c:set>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body> <form action="${ctx}/user/UserAction!toLogin.action" method="post">
用户名:<input type="text" name="username" id="username" value=""/>
密码:<input type="password" name="user.password" id="password" value=""/>
<input type="submit" value="登录">
</form> </body>
</html>

最后部署项目下tomcat中,运行console输出如下:

Maven搭建SSH框架

总结:在这过程中遇到了不少问题。一般都是包的问题和版本问题。

1.在搭建框架运行不报错后,准备去请求数据时,却一直找不到动作类。在跳转时jsp页面一直报如下错。

Maven搭建SSH框架

解决办法:参考博客:https://blog.csdn.net/axwolfer/article/details/40164151

在struts.xml中添加如下代码:

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

 2.Hibernate版本问题,Hibernate升级后有了不少变化,具体网上看。之前一直用Hibernate3,在搭建开始时我用的是Hibernate5,后来改成了Hibernate4。

使用5时请求数据库时报如下错:

Could not open Hibernate Session for transaction; nested exception is java.lang.NoClassDefFoundError: org/hibernate/engine/transaction/spi/TransactionContext。

解决办法:将Hibernate中的依赖改成Hibernate4版本的即可。