(Idea中如何搭建SSH框架以及导入对应的jar包)
- 步骤一:创建SSH项目
- 步骤二:测试Spring
- 步骤三:测试hibernate
- 步骤四:测试struts
- 出现的问题和解决办法
SSH框架-搭建步骤
在学习搭建SSH,网上看了很多资料,找到一个不错的,然后参考网上的那个博主写的,大概过程基本和他一样,个别不一样是根据我的实际情况做出改变的,链接,和感谢作者,文章最后我写了一些我在其过程中遇到的问题和解决方法,希望对你有所帮助。
步骤一:创建SSH项目
打开idea,点击file -> new -> project,出现如下界面:
在Additional Libraries and Frameworks的栏目中,找到spring,struts和Hibernate(web application在勾选struts后会自动勾选),如下:
可以直接next,让idea自己下载所需要的配置文件,如果自己有下载的话,可以选择Download上面的Userlibrary,点击create,找到自己下载配置文件的目录,然后next。修改项目名称,点击finish就可以完成项目的创建了。注意下载依赖包的时间可能会有点长,耐心等待就好了。
创建好的项目目录是这样的:
步骤二:测试spring
我们先在src目录下建立包和类名如下,内容先不写,之后我会讲到:
OK,那我们现在来测试spring能否正常使用,往TestService.java中写入代码:
package com.dt.test;
public class TestService {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void hello(){
System.out.println("hello " + getName());
}
}
再往SpringTest.java里写入以下代码:
package com.dt.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class SpringTest {
public static void main(String[] args) {
ApplicationContext ac = new FileSystemXmlApplicationContext("web/WEB-INF/applicationContext.xml");
TestService ts = (TestService) ac.getBean("testService");
ts.hello();
}
}
接着我们再web/WEB-INF目录下建立applicationContext.xml文件,并在里面写入bean(这个文件如果在创建项目时,spring下勾选了默认创建会自动创建,没有勾选就手动创建就好了,内容如下:
<?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.xsd">
<bean class="com.dt.test.TestService" id="testService">
<property name="name" value="spring"></property>
</bean>
</beans>
然后我们点开SpringTest.java文件运行里面内容,控制台输出hello spring,测试成功:
步骤三:测试hibernate
这里我们要写一个JavaBean,命名为User,之前建好的,写入内容:
package com.dt.bean;
public class User {
private int id;
private int userId;
private String name;
private String phone;
public User(){
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
再对应地往它的配置文件User.hbm.xml写入内容:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.dt.bean.User" table="user">
<id name="id" type="java.lang.Integer">
<generator class="native"/>
</id>
<property name="userId" type="java.lang.Integer">
</property>
<property name="name" type="java.lang.String">
</property>
<property name="phone" type="java.lang.String">
</property>
</class>
</hibernate-mapping>
然后就是引入hibernate所需要的包mysql-connector-java-5.1.47(这里数据库的连接时myqsl5,如果是mysql8,要换对应的连接jar包)还有commons-dbcp2-2.1和commons-pool2-2.4.1;可以通过点击file->project structure->libraries,点击靠左边的加号,如果自己下载有选择Java,然后找到包的目录点击ok,也可以通过点击fromMaven来下载
在搜索框中输入要下载的包,然后勾选Download to,点击ok即可
下载完后目录差不多是这样的,我的数据库mysql8连接是自己导入的:
然后把我们的数据库打开,并建立表(其实可以不用建,因为配置文件中可以通过配置让它自动生成,不过这里为了方面理解我先建好)
然后我们让applicationContext.xml里写入配置,其接管hibernate的配置
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=UTF-8"></property>
<property name="username" value="root"></property>
<property name="password" value="123456dj"></property>
</bean>
<!-- session factory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.connection.url">jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=UTF-8</prop>
<prop key="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
</props>
</property>
<property name="mappingLocations" value="classpath:com/dt/bean/User.hbm.xml"></property>
</bean>
接着我们开始写service,写一个UserService的接口,之前已经建立好,可以直接写入内容:
package com.dt.sevice;
import com.yan.bean.User;
public interface UserService {
public void add(User user);
}
然后往UserServiceImpl.java中写入以下内容:
package com.dt.service.serviceimpl;
import com.dt.bean.User;
import com.dt.service.UserService;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
public class UserServiceImpl implements UserService {
@Qualifier("sessionFactory")
@Autowired
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory){
this.sessionFactory = sessionFactory;
}
@Override
public void add(User user) {
Session s = sessionFactory.openSession();
Transaction tx = s.beginTransaction();
s.save(user);
tx.commit();
}
}
接着让Spring接管hibernate的配置文件时建立一个bean,往applicationContext.xml里添加:
<bean id="user" class="com.dt.service.serviceimpl.UserServiceImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
接着我们在test包下建立一个HibernateTest的Java文件,进行测试,写入代码:
package com.dj.test;
import com.dj.bean.User;
import com.dj.service.UserService;
import com.dj.service.impl.UserServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class HibernateTest {
public static void main(String[] args) {
ApplicationContext ac = new FileSystemXmlApplicationContext("web/WEB-INF/applicationContext.xml");
UserService userService = (UserServiceImpl)ac.getBean("user");
User user = new User();
user.setUserId(1);
user.setName("yan");
user.setPhone("23123123");
userService.add(user);
}
}
然后运行在控制台上看到sql语句,数据库中也成功插入信息,就表示测试成功啦:
步骤四:struts测试
要先引入两个依赖,一个是struts2-spring-plugin-2.3.24, spring-web-3.0.5和log4j-1.2.14.jar; 对应前两个可以使用IDEA的maven功能进行下载,但是不要直接入我们的lib目录下,因为它会下载比较多的依赖;先下载好,"Download to "不要打勾,然后我们在将之复制到lib目录下
然后我们修改web/WEB-INF/web.xml文件,加入struts2的配置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/applicationContext.xml</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:resource/log4j2.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
接着我们建一个Action,这里我用的时模型驱动
向UserAction.java里写入代码:
package com.dt.action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.dt.bean.User;
import com.dt.service.serviceimpl.UserServiceImpl;
public class UserAction extends ActionSupport implements ModelDriven {
private User user = new User();
private UserServiceImpl userService;
@Override
public User getModel() {
return user;
}
public UserAction(){
getModel().setUserId(1111);
getModel().setName("dt");
getModel().setPhone("4785");
}
@Override
public String execute(){
return SUCCESS;
}
public String actionAdd(){
getModel().setUserId(1111);
getModel().setName("dt");
getModel().setPhone("4785");
userService.add(user);
return SUCCESS;
}
public UserServiceImpl getUserService() {
return userService;
}
public void setUserService(UserServiceImpl userService) {
this.userService = userService;
}
}
然后我们在applicationContext.xml文件里添加一个新的bean,来表示这个Action,写入代码:
<bean id="userAction" class="com.dt.action.UserAction">
<property name="userService" ref="user"></property>
</bean>
然后配置struts.xml文件,添加内容:
<constant name="struts.ui.theme" value="simple"></constant>
<constant name="struts.objectFactory" value="spring"></constant>
<package name="user" namespace="/user" extends="struts-default">
<action name="actionadd" class="userAction" method="actionAdd">
<result name="success">/success.jsp</result>
</action>
</package>
然后我们在web目录下建立一个success.jsp文件内容为:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
success
</body>
</html>
在index.jsp中的body标签里添加一个表单:
<form action="/MySSHTest/user/actionadd" method="post">
<input type="submit" value="turn up"/>
</form>
最后就是自己把tomcat给配置好,然后就,运行就可以了,怎么配置tomcat相信大家都懂,我就不写了,运行后的界面会出现一个按钮,点击跳转到success界面
同时数据库中也新插入了一条信息
恭喜你,成功完成!
出现的问题和解决办法
最后我讲一下整个过程中可能会出现的问题:
1 hibernate测试时报错说找不到user实体,那就请检查自己的applicatinContext.xml中的,下有没有写入,要不然它找不到user表
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="mappingLocations" value="classpath:com/dt/bean/User.hbm.xml"></property>
</bean>
2 log4j巴拉巴拉等等错误,这个我也没解决,不过不影响运行
3 测试struts时,无法启动项目等类似的错误,可以进入project structure 的libraries下,把sturts的libraries删掉,然后自己重新从本地导入,建议用struts2.3,因为idea自己下载的struts2.5可能会有依赖冲突,本人就是卡在这想了一天,难受,自己导入本地的就好了。
4 我用的是mysql8所以文档配置的是MySQL8的加载驱动和url,如果你用的5,自己改一下就好了,相信你也知道在哪改,就是在applicatinContext.xml里的bean 中dataSource 和sessionFactory里面改。
大概就这四个问题的解决方法吧,希望对你有所帮助。我也是参考网上的博主写的,大概过程基本和他一样,个别不一样是根据我的实际情况做出改变的,