您的位置:首页 > 其它

interlij idea创建给Web项目添加SS2H

2017-06-13 21:53 274 查看

1、系统环境

IDE:InterliJ IDEA 2017.1.4

jdk版本:1.8

Maven版本:3.5

hibernate版本:5.2.x

spring版本:4.2

struts版本:2.3

数据库:MySQL 5.7 包含user表的sql脚本

其他两个环境搭建请参考: interlij idea创建给Web项目添加Hibernateinterlij idea创建给Web项目添加struts2,熟悉熟悉

2、spring环境搭建

添加如下依赖:

<!-- ********************** Java Servlet API 4.0.0-b01 ********************** -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0-b01</version>
</dependency>

<!-- 添加jstl(JSP Standard Tag Library)支持 -->
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>apache-jstl</artifactId>
<version>9.4.6.v20170531</version>
</dependency>

<!-- ********************** Spring 4.2.4.RELEASE ********************** -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>


在resources文件右键,新建xml的spring配置文件,名字是:spring-config (当然你喜欢其他名字也行)







在web.xml的web-app节点下添加如下:

<!--加载spring配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-config.xml</param-value>
</context-param>
<!--用于初始化Spring容器的Listener-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>




3、Spring整合Hibernate

追加如下依赖:

<!-- ********************** Hibernate 5.0.6.Final ********************** -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.6.Final</version>
</dependency>
<!-- ********************** MySQL 5.1.38 ********************** -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- ********************** Java Transaction API 1.1 ********************** -->
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>


添加Hibernate(请参考前面添加Hibernate,记得去project structure添加),添加完成的效果如下:



其中url:jdbc:mysql://localhost:3306/networkalbum?useSSL=false&serverTimezone=GMT%2B8

Hibernate的数据库映射到xml自己看前面的 interlij idea创建给Web项目添加Hibernate

其中UserDAO:

package DAO;
import POJO.UserEntity;
import java.util.List;
/**
* Created by hui on 2017/6/12.
*/
public interface UserDao {
public UserEntity checkUser(UserEntity user);
public void addUser(UserEntity user);
public List<UserEntity> queryAllUser();
}


ImpUserDAO如下:

package DAO.imp;
import DAO.UserDao;
import POJO.UserEntity;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import java.util.List;
/**
* Created by hui on 2017/6/12.
*/
public class ImpUserDAO extends HibernateDaoSupport implements UserDao {
public UserEntity checkUser(UserEntity user) {
String hql="from UserEntity u where u.name=? and u.pwd=?";
List<UserEntity> list = (List<UserEntity>) this.getHibernateTemplate().find(hql,new String[]{user.getName(),user.getPwd()});
if(list!=null&&!list.isEmpty()&&list.size()==1){
return list.get(0);
}
return null;
}

public void addUser(UserEntity user) {
this.getHibernateTemplate().save(user);
}

public List<UserEntity> queryAllUser() {
return (List<UserEntity>) getHibernateTemplate().find("from UserEntity ");
}
}


两个框架大起来了,接写来整合:

spring配置文件,添加如下:

<!--配置sessionFactory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>

<bean id="userDAO" class="DAO.imp.ImpUserDAO">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>




配置完成,接着看看整合成功与否

index.jsp改成这样子,直接将下面代码覆盖进去就行了:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="org.springframework.context.support.ClassPathXmlApplicationContext" %>
<%@ page import="org.springframework.beans.factory.BeanFactory" %>
<%@ page import="DAO.UserDao" %>
<%@ page import="POJO.UserEntity" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<%
BeanFactory beanFactory = new ClassPathXmlApplicationContext("spring-config.xml");
UserDao userDao=(UserDao)beanFactory.getBean("userDAO");
UserEntity userEntity = userDao.queryAllUser().get(0);
session.setAttribute("user",userEntity);
%>
<h2>Hello World!</h2>
${user.name}
</body>
</html>


运行结果



spring是面向接口编程的,你看到要写一个接口UserDAO,而不是直接写代码

Spring整合Hibernate也很简单就是,把sessionFactory的创建交给Spring的IOC容器创建,其实简单可见的就是,在spring配置文件的beans下加多一个id为sessionFactory的bean节点,这就是操作重点了。

3、Spring整合Struts2

追加如下依赖:

<!-- ********************** Spring和Struts2的支持插件 ********************** -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.24.1</version>
</dependency>

<!-- ********************** Struts 2.3.24.1 ********************** -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.24.1</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.3.24.1</version>
</dependency>


添加Struts2(请参考前面添加Struts2,记得去project structure添加,详情请去看系统环境处的文章),添加完成的效果如下:



在web.xml的web-app节点下,添加如下:

<!--添加Struts2的支持-->
<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>


Login.jsp若想要的,请去Struct2搭建的项目里面找到(login.jsp太长了,不贴出来

其中LoginAction如下:

package action;
import DAO.UserDao;
import com.opensymphony.xwork2.ActionSupport;
/**
* Created by hui on 2017/6/12.
*/
public class LoginAction extends ActionSupport {
//两个属性名跟Login.jsp的form属性的name一样
//这样struts2框架会自动复制,每个属性需要getter和setter
private String username;
private String pwd;
private UserDao userDao;

public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}

public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String execute() throws Exception {
String forword = null;
if (username.equals("Hitvz") && pwd.equals("123456")) {
forword = ActionSupport.SUCCESS;
} else {
forword = ActionSupport.INPUT;
}
return forword;
}
}


添加完Struct2,接下来Spring整合Struts2,

在Spring配置文件添加如下:

<bean id="loginActionBySpring" class="action.LoginAction">
<property name="userDao" ref="userDAO"></property>
</bean>


在strut.xml添加如下:

<constant name="struts.objectFactory" value="spring"/>
<!--必须继承自struts-default-->
<package name="SSHDemo" extends="struts-default" namespace="/">
<action name="login" class="loginActionBySpring" >
<result name="success">index.jsp</result>
<result name="input">Login.jsp</result>
</action>
</package>


这里是整合重点:struct2可以管理对象,而spring也可以管理对象,那么问题来了,到底最后谁来管理生成的对象呢?这里选用Spring来管理对象,应该在spring配置文件配置bean标签,在struts配置文件里的class标签,引用一个spring的实例,如上所示。

4、Struts2与Hibernate整合

spring整合Strut2的操作我并没有查询数据库验证用户

下面改一下LoginAction代码:

@Override
public String execute() throws Exception {
String forword = null;
UserEntity userEntity =new UserEntity();
userEntity.setName(username);
userEntity.setPwd(pwd);
UserEntity entity = userDao.checkUser(userEntity);
System.out.println(entity.toString());
if (entity!=null) {
ActionContext.getContext().put("user",entity);
forword = ActionSupport.SUCCESS;
} else {
forword = ActionSupport.INPUT;
}
return forword;
}


讲固定的验证,变为数据库操作,整合完成

5、SSH的一两个过滤器

放在web.xml的web-app下:

<!--配置字符编码过滤器(解决乱码问题)-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!--解决session关闭而导致的延迟加载例外的问题-->
<filter>
<filter-name>lazyLoadingFilter</filter-name>
<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>lazyLoadingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>


码云SS2HDemo案例源码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: