maven+Intelij搭建SSH框架
来源:互联网 发布:刀塔传奇 源码 编辑:程序博客网 时间:2024/06/06 02:07
前言: 最近在学习SSH框架,发现网络上大部分教程都是针对Eclipse的,依赖管理也是用传统的方法来管理,而SSH框架经常会出现各种兼容性的问题,要反复的删除和替换依赖包,这些工作极大地耗费时间,难怪大神们发明了maven工具来管理依赖,确实方便了很多。好了,闲话少说,进入正题。
1. 创建maven工程
2.填写GroupID
3.确定存储jar包的maven库
图中是我自己的maven仓库的路径,如果对maven的设置有不清楚的同学可以参照maven的设置
4.完成创建
5.最终完成以后的项目结构
注意其中的struts.xml、applicationContext.xml和web.xml的放置路径,如果路径放置不正确,会导致项目报错
6.创建package
在src/main文件下新建java文件夹,然后右击,选择“Mark Directory as“->”Sources Root”, 此时java文件夹应该变成蓝色,否则只能创建directory而不是Package。然后再右击java文件夹,创建package,取名为ssh.action,类似的方法创建其余的包。
7.最重要的pom.xml
请注意其中的注释,尤其是build部分!
<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</groupId> <artifactId>SSH_P</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>SSH_P Maven Webapp</name> <url>http://maven.apache.org</url> <!--可以将spring、struts、hibernate的版本号写在property中,方便后面改动--> <properties> <spring.version>4.2.4.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <!-- 添加SSH依赖 --> <!-- Struts2 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.24</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.24.1</version> </dependency> <!-- 添加Hibernate依赖 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.6.10.Final</version> </dependency> <!-- spring框架依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!-- 包含了大量注解@Autowired等。 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <!-- 包含SessionFactory org.springframework.orm.hibernate4.LocalSessionFactoryBean --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <!-- 包含ContextLoaderListener 监听器 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <!-- ApplicationContextInitializer --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.26</version> </dependency> <!-- c3p0数据源 --> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <!-- 添加Log4J依赖 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-nop</artifactId> <version>1.6.4</version> </dependency> <!-- 添加javassist --> <dependency> <groupId>javassist</groupId> <artifactId>javassist</artifactId> <version>3.11.0.GA</version> </dependency> </dependencies> <build> <finalName>SSH_P</finalName> <resources> <resource> <directory>src/main/java</directory> <includes> <!--如果不加这行代码,在ssh.beans文件夹下的User.hbm.xml文件就不会被maven拷贝到target下的classes文件夹,就会出现classNotFound的错误;并且必须写成"**/*.xml",写成"*/*.xml"也一样报错--> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build></project>
8.创建ssh.action.Register类
Register.java通过struts.xml中的action来连接Register.jsp, 用来响应用户输入,并将接收到的内容传递给UserManagerImpl来处理,代码如下所示:
package ssh.action;import com.opensymphony.xwork2.ActionSupport;import ssh.serviceImpl.UserManagerImpl;import ssh.vo.UserForm;public class Register extends ActionSupport {//这里userForm的名字必须与Register.jsp中的对应 private UserForm userForm; private UserManagerImpl userManager; public UserForm getUserForm() { return userForm; } public void setUserForm(UserForm userForm) { this.userForm = userForm; } public void setUserManager(UserManagerImpl userManager) { this.userManager = userManager; } public String execute() { try { userManager.regUser(userForm); return SUCCESS; } catch (Exception e) { e.printStackTrace(); return ERROR; } }}
9.创建ssh.beans.User类
User.java对应数据库的表格,代码如下所示:
package ssh.beans;public class User { private String userName; private String password; private int gender; private int userId; public void setUserId(int userId) { this.userId = userId; } public int getUserId() { return userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getGender() { return gender; } public void setGender(int gender) { this.gender = gender; }}
10. 创建ssh/beans/User.hbm.xml文件
User.hbm.xml文件将User类与数据库字段一一对应,代码如下:
<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="ssh.beans"> <class name="User" table="user"> <id name="userId" column="userId"> <generator class="native"/> </id> <property name="userName" type="java.lang.String" column="userName" length="16" not-null="true"/> <property name="gender" type="java.lang.Integer" column="gender" length="1" not-null="true"/> <property name="password" type="java.lang.String" length="16" not-null="true"/> </class></hibernate-mapping>
11. 创建ssh.dao.BaseDao接口
BaseDao接口定义了与数据库的交互方法
package ssh.dao;public interface BaseDao { void save(Object obj);}
12. 创建ssh.daoImpl.UserDao类
UserDao类定义交互方法的具体实现,其中的getHibernateTemplate方法只适用于hibernate3,对于hibernate4,需要用其他方法实现,请自行查阅。
package ssh.daoImpl;import ssh.dao.BaseDao;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class UserDao extends HibernateDaoSupport implements BaseDao { public void save(Object obj) { getHibernateTemplate().save(obj); }}
13. 创建ssh.service.UserManager接口
UserManager接口指明了业务层需要进行的操作
package ssh.service;import ssh.vo.UserForm;public interface UserManager { void regUser(UserForm userForm);}
14. 创建ssh.serviceImpl.UserManagerImpl类
UserManagerImpl类详细定义了业务层的实现方法
package ssh.serviceImpl;import ssh.beans.User;import ssh.daoImpl.UserDao;import ssh.service.UserManager;import ssh.vo.UserForm;import org.springframework.beans.BeanUtils;public class UserManagerImpl implements UserManager { private UserDao baseDao; public void regUser(UserForm userForm) { User user=new User(); BeanUtils.copyProperties(userForm,user); baseDao.save(user); } public void setBaseDao(UserDao baseDao) { this.baseDao=baseDao; }}
15. 创建ssh.vo.UserForm类
UserForm类通过Register.java与Register.jsp产生关联,接收用户输入,它与User类的区别在于User类多了UserId字段
package ssh.vo;public class UserForm { private String userName; private String password; private int gender; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getGender() { return gender; } public void setGender(int gender) { this.gender = gender; }}
16. 编写applicationContext.xml文件
applicationContext.xml文件放置在webapp\WEB-INF文件夹下,是spring框架的配置文件,在其中定义了数据库的连接,以及各个bean的创建和装配细节
<?xml version="1.0" encoding="utf-8" ?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass"> <value>com.mysql.jdbc.Driver</value> </property> <property name="jdbcUrl"> <value>jdbc:mysql://localhost/test</value> </property> <property name="user"> <value>root</value> </property> <property name="password"> <value>123Abcde</value> </property> <property name="maxPoolSize"> <value>80</value> </property> <property name="minPoolSize"> <value>1</value> </property> <property name="initialPoolSize"> <value>1</value> </property> <property name="maxIdleTime"> <value>20</value> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref local="dataSource" /> </property> <property name="mappingResources"> <list> <value>ssh/beans/User.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="show_sql">true</prop> <prop key="hibernate.jdbc.batch_size">20</prop> </props> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="dao" class="ssh.daoImpl.UserDao"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="userManager" class="ssh.serviceImpl.UserManagerImpl"> <property name="baseDao"> <ref bean="dao"/> </property> </bean> <bean id="regAction" class="ssh.action.Register"> <property name="userManager"> <ref bean="userManager" /> </property> </bean></beans>
创建完成以后,打开project Structure,为spring模块添加文件,如下图所示:
17. 创建struts.xml文件
struts.xml是连接jsp文件和java文件的配置文件,放置在resources文件夹下,其中“register”连接的是Register.jsp,“regAction”连接的是ssh.action.Regtister.java
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <!--namespace="/"--> <!--当把struts.xml放在src文件夹下而不是resources文件夹中的时候,会出现以下报错(即便在name="ssh"之后加上namespace="/"也不行)--> <!--“There is no Action mapped for namespace [/] and action name [register] associated with context path [/SSH].”--> <include file="struts-default.xml"/> <package name="ssh" extends="struts-default"> <action name="register" class="regAction"> <!--既可以写成"/Register.jsp",也可以写成"Register.jsp"--> <result name="input">/Register.jsp</result> <result name="success">/Success.jsp</result> <result name="error">/Fail.jsp</result> </action> </package></struts>
编写完成以后,打开project Structure,为struts2模块添加文件,如下图所示:
18. 修改web.xml文件
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app> <filter> <filter-name>SSH</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>SSH</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
19. 创建Register.jsp
注意其中的注释!
另外,Success.jsp 和Fail.jsp也是和Register.jsp一样,放置在webapp路径下,内容比较简单,就是输出一句话,代码就不放出来了。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%><!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>User Register Page</title></head><body><s:form action="register"> <%--注意:这里的"userForm.userName"是与Register.java中的userForm挂起来的,通过Register.jsp,将用户输入传递给userForm,然后再通过userManagerImpl将userForm的内容拷贝给user,再由baseDao进行存储--%> <s:textfield name="userForm.userName" label="用户名"></s:textfield> <s:password name="userForm.password" label="密码"></s:password> <s:select list="#{'1':'男','0':'女'}" listKey="key" listValue="value" name="userForm.gender" label="性别" value="1"></s:select> <s:submit value="注册"></s:submit></s:form></body></html>
20. 配置tomcat
打开配置界面
添加Tomcat
配置启动端口
注意:之前碰到过一个问题,就是讲项目热部署以后,改动jsp文件并不会动态更新页面,后来发现需要在下图中“on Update action”的选项中选择“Update classes and resources”!
完成以后,就可以启动测试了。当然不要忘了添加数据库test和数据表user,本项目中用的是mysql,创建user表的sql语句如下:
create table user( userId int auto_increment, userName varchar(16) not null, password varchar(16) not null, gender int not null, primary key(userId) );
总结:
首先申明,本项目也是参照网络上的教程来的,但是我使用的是intellij,原文用的是eclipse,依赖管理也没有使用maven,费时费力,搞得头晕脑胀,有时候还会碰到一些依赖包的版本不兼容的问题,又得更换jar包,非常麻烦,所以我决定用maven来实现这个项目,才有了这样一篇文章。在此也对原文作者表示感谢!(使用eclipse的同学请点击这里)
另外,由于我也是新手,也是踩了很多坑才把这个项目搭建成功,在Project structrue的设置过程中,有一些步骤可能没有截图截得那么详细,请见谅!不过我自己的项目是可以成功运行的,需要的同学请前往这里 下载!
这个学习过程的最大感受:纸上得来终觉浅,绝知此事要躬行!一定要自己动手才能了解其中的细节~
- maven+Intelij搭建SSH框架
- InteliJ IDEA用Maven搭建Mybatis框架
- Maven搭建SSH框架
- 基于maven的ssh框架一步一步搭建
- 基于maven的ssh框架一步一步搭建
- 基于maven的ssh框架搭建
- 基于maven管理的SSH框架搭建
- 基于maven的ssh框架一步一步搭建
- 基于maven的ssh框架一步一步搭建
- 使用MAVEN搭建SSH框架一 搭建struts2一
- 使用MAVEN搭建SSH框架一 搭建struts2 二
- SSH框架之一详解maven搭建多模块项目
- 使用maven搭建ssh框架静态资源路径
- 一步步教你使用maven搭建ssh框架
- 基于maven的ssh框架一步一步搭建(一)
- 基于maven的ssh框架一步一步搭建(二)
- 使用Intellij IDEA、Maven、Tomcat、MySQL搭建SSH框架
- 基于maven的ssh框架一步一步搭建(一)
- golang 开源项目
- android日历控件的使用
- css设置字体大小中的斜杠是什么意思?
- myBatis mapper.xml 自动返回主键
- RCNN论文笔记(1)
- maven+Intelij搭建SSH框架
- JSP指令
- Kafka spring 集成
- C++第五次实验--作业报告
- 嵌入式linux驱动-nor flash笔记
- Android AOP之字节码插桩
- UVa 320
- PHP输入流php://input实例讲解
- 如何申请mfi认证