2.搭建SSH

1.创建项目
在Eclipse中创建项目,右键解决报错即可导入MyEclipse中,防止Myeclipse中总是报错问题(注意jdk版本问题)
2.导包:

org.springframework
spring-webmvc
3.2.8.RELEASE

org.springframework
spring-jdbc
3.2.8.RELEASE

org.springframework
spring-orm
3.2.8.RELEASE

org.apache.struts
struts2-core
2.3.16

javassist
javassist

org.apache.struts
struts2-spring-plugin
2.3.16

org.apache.struts
struts2-convention-plugin
2.3.16

org.hibernate
hibernate-core
4.2.6.Final

mysql
mysql-connector-java
5.1.37

<dependency>
  <groupid>commons-dbcp</groupid>
  <artifactid>commons-dbcp</artifactid>
  <version>1.4</version>
</dependency>
<!--2.5 导入jstl测试包-->
<dependency>
  <groupid>jstl</groupid>
  <artifactid>jstl</artifactid>
  <version>1.2</version>
</dependency>
<dependency>
  <groupid>javax.servlet.jsp</groupid>
  <artifactid>jsp-api</artifactid>
  <version>2.2</version>
  <scope>provided</scope>
</dependency>
<!--2.6 导入junit相关的jar包-->
<dependency>
  <groupid>junit</groupid>
  <artifactid>junit</artifactid>
  <version>4.12</version>
  <!-- <scope>test</scope>测试用,不复制到WEB-INF里面 -->
  <scope>test</scope>
</dependency>
<!--2.7导入文件上传和下载的jar包-->
<dependency>
  <groupid>commons-fileupload</groupid>
  <artifactid>commons-fileupload</artifactid>
  <version>1.3.3</version>
</dependency>
<!--2.8导入log4j相关的jar包-->
<dependency>
  <groupid>org.apache</groupid>
  <artifactid>log4j</artifactid>
  <version>1.2.15</version>
</dependency>
<!--2.9导入commons基础包-->
 <dependency>
  <groupid>commons-io</groupid>
  <artifactid>commons-io</artifactid>
  <version>2.5</version>
</dependency>
<dependency>
  <groupid>commons-lang</groupid>
  <artifactid>commons-lang</artifactid>
  <version>2.6</version>
</dependency>
<!--2.10javax/servlet/ServletContext的jar包-->
    <dependency>
    <groupid>javax.servlet</groupid>
    <artifactid>javax.servlet-api</artifactid>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<!-- 2.11 aspectj的相关jar包-->
<dependency>
  <groupid>org.aspectj</groupid>
  <artifactid>aspectjweaver</artifactid>
  <version>1.7.0</version>
</dependency>
<!--2.12 fastjson相关的jar包-->
<dependency>
  <groupid>com.alibaba</groupid>
  <artifactid>fastjson</artifactid>
  <version>1.2.46</version>
</dependency>
&#x6CE8;&#x610F;:&#x6700;&#x540E;&#x6709;&#x4E9B;&#x8BB8;&#x63D2;&#x4EF6;&#x662F;&#x5426;&#x8003;&#x8651;&#x5B89;&#x88C5;:
 <build>
<plugins>
    war&#x63D2;&#x4EF6;
    <plugin>
        <artifactid>maven-war-plugin</artifactid>
    </plugin>
    <plugin>
        <artifactid>mavan-compiler-plugin</artifactid>
        <configuration>
            <source>1.7
            <target>1.7</target>
            <encoding>utf-8</encoding>
        </configuration>
    </plugin>
    &#x6E90;&#x7801;&#x63D2;&#x4EF6;
    <plugin>
        <artifactid>maven-resource-plugin</artifactid>
        <configuration>
            <encoding>utf-8</encoding>
        </configuration>
    </plugin>
    javadoc&#x63D2;&#x4EF6;
    <plugin>
        <artifactid>maven-javadoc-plugin</artifactid>
        <configuration>
            <encoding>utf-8</encoding>
        </configuration>
    </plugin>
    <plugin>
        <artifactid>maven-surefire-plugin</artifactid>
        <version>2.7.2</version>
        <configuration>
            <forkmode>once</forkmode>
            <argline>-Dfile.encoding=UTF-8</argline>
        </configuration>
    </plugin>
</plugins>
</build>

–>
3.整合Spring
添加Spring-MVC.xml的配置文件夹
见复制 F:\个人资料\总结\保存的文件\配置文件\SSH相关\spring-mvc.xml
(1)注意扫描接口包的位置base-package=”com.git.user”

4.新建业务层接口UserService.java(位置com.git.user.service.UserService.java),定义一个测试接口方法:例如:
public interface UserService {
void test();
}
5.新建业务层接口实现类UserServiceImpl.java(位置com.git.user.serviceImpl.UserServiceImpl.java).实现接口方法,输出打印
@Service(“userService”)
public class UserServiceImpl implements UserService{

    public void test() {
        // TODO Auto-generated method stub
        System.out.println("&#x6D4B;&#x8BD5;&#x6210;&#x529F;");
    }

}
&#x6CE8;&#x610F;&#x6CE8;&#x89E3;@Service("userService"),&#x88AB;Spring&#x7BA1;&#x7406;

6.新建测试类,测试Spring配置是否成功:
public class TestCase {
AbstractApplicationContext ctx;
UserService userService;
@Before
public void init(){
ctx=new ClassPathXmlApplicationContext(“spring-mvc.xml”);
userService=ctx.getBean(“userService”, UserService.class);
}
@After
public void destory(){
ctx.close();
}
@Test
public void testSpring(){
userService.test();
}
}
注意扫描文件:ctx=new ClassPathXmlApplicationContext(“spring-mvc.xml”);
测试是否能正常输出,如能正常输出,则spring配置成功.

7.配置web.xml并启动Tomcat.看是否报错
配置web.xml,配置了一个转发器和编码过滤器

contextConfigLocation
classpath:spring- .xml _

org.springframework.web.context.ContextLoaderListener

openSessionInViewFilter
org.springframework.orm.hibernate4.support.OpenSessionInViewFilter

singleSession
true

openSessionInViewFilter
_.action

struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2
*.action

8.配置Struts2的配置文件
见复制 F:\个人资料\总结\保存的文件\配置文件\SSH相关\struts.xml
9.新建UserAction.java控制器类,(位置:com.git.user.Action.UserAction.java))
测试代码如下:
(1)访问方式为/user/userAction!test.action
//ParentPackage(“basePackage”)被管理的包空间,对应于struts.xml中的
//
//中的name=”basePackage”
@ParentPackage(“basePackage”)
//Namespace(“/user”)类似于RequestMapping(“/user”)
@Namespace(“/user”)
//Action(“userAction”)类似于Controller.

//其中userAction表示对整个UserAction类进行了注解,已经在struts.xml中配置了动态请求
//所以可以请求格式如/user/userAction!test.action的方式,对这个类下的test方法进行请求
@Action(“userAction”)
//这儿将由spring管理,是因为加载了一个插件struts2-spring-plugin
public class UserAction {
private static final Logger logger=Logger.getLogger(UserAction.class);

    public void test(){
        logger.info("&#x8FDB;&#x5165;aciton");
    }
}
&#x6CE8;&#x610F;&#x4E09;&#x4E2A;&#x6CE8;&#x89E3;
(2)&#x8BBF;&#x95EE;&#x65B9;&#x5F0F;&#x4E3A;:/user/userAction.action
&#x4E5F;&#x53EF;&#x4EE5;&#x8FD9;&#x6837;&#x6CE8;&#x89E3;:
//ParentPackage("basePackage")&#x88AB;&#x7BA1;&#x7406;&#x7684;&#x5305;&#x7A7A;&#x95F4;,&#x5BF9;&#x5E94;&#x4E8E;struts.xml&#x4E2D;&#x7684;
//<package name="basePackage" extends="struts-default"></package>
//&#x4E2D;&#x7684;name="basePackage"
@ParentPackage("basePackage")
//Namespace("/user")&#x7C7B;&#x4F3C;&#x4E8E;RequestMapping("/user")
@Namespace("/user")
public class UserAction {
    private static final Logger logger=Logger.getLogger(UserAction.class);
    //Action("userAction")&#x8FD9;&#x6837;&#x6CE8;&#x89E3;&#x5C31;&#x7C7B;&#x4F3C;&#x4E8E;RequestMapping("/userAction")
    //&#x8BF7;&#x6C42;&#x5C31;&#x53EF;&#x4EE5;&#x5199;&#x6210;/user/userAction.action
    //&#x4EE5;&#x540E;&#x7684;&#x65B9;&#x6CD5;&#x91CD;&#x65B0;&#x6CE8;&#x89E3;&#x5373;&#x53EF;
    @Action("userAction")
    public void test(){
        logger.info("&#x8FDB;&#x5165;aciton");
    }
}
(3)&#x5B8C;&#x5168;&#x57FA;&#x4E8E;spring&#x7684;&#x6CE8;&#x89E3;
(&#x6709;&#x5F85;&#x9A8C;&#x8BC1;&#x5B8C;&#x5584;))
&#x5982;&#x679C;&#x8981;&#x6D4B;&#x8BD5;&#x5B8C;&#x6574;&#x7684;&#x4E0A;&#x4E0B;&#x6587;&#x4FE1;&#x606F;:
//ParentPackage("basePackage")&#x88AB;&#x7BA1;&#x7406;&#x7684;&#x5305;&#x7A7A;&#x95F4;,&#x5BF9;&#x5E94;&#x4E8E;struts.xml&#x4E2D;&#x7684;
//<package name="basePackage" extends="struts-default"></package>
//&#x4E2D;&#x7684;name="basePackage"
@ParentPackage("basePackage")
//Namespace("/user")&#x7C7B;&#x4F3C;&#x4E8E;RequestMapping("/user")
@Namespace("/user")
//Action("userAction")&#x7C7B;&#x4F3C;&#x4E8E;Controller.

//&#x5176;&#x4E2D;userAction&#x8868;&#x793A;&#x5BF9;&#x6574;&#x4E2A;UserAction&#x7C7B;&#x8FDB;&#x884C;&#x4E86;&#x6CE8;&#x89E3;,&#x5DF2;&#x7ECF;&#x5728;struts.xml&#x4E2D;&#x914D;&#x7F6E;&#x4E86;&#x52A8;&#x6001;&#x8BF7;&#x6C42;
//&#x6240;&#x4EE5;&#x53EF;&#x4EE5;&#x8BF7;&#x6C42;&#x683C;&#x5F0F;&#x5982;/user/userAction!test.action&#x7684;&#x65B9;&#x5F0F;,&#x5BF9;&#x8FD9;&#x4E2A;&#x7C7B;&#x4E0B;&#x7684;test&#x65B9;&#x6CD5;&#x8FDB;&#x884C;&#x8BF7;&#x6C42;
@Action("/userAction")
//&#x8FD9;&#x513F;&#x5C06;&#x7531;spring&#x7BA1;&#x7406;,&#x662F;&#x56E0;&#x4E3A;&#x52A0;&#x8F7D;&#x4E86;&#x4E00;&#x4E2A;&#x63D2;&#x4EF6;struts2-spring-plugin
public class UserAction {
    private static final Logger logger=Logger.getLogger(UserAction.class);

    @Resource(name="userService")
    private UserService userService;

    public void test(){
        logger.info("&#x8FDB;&#x5165;aciton");
        //&#x5982;&#x679C;&#x5229;&#x7528;&#x4E0A;&#x4E0B;&#x6587;&#x8FDB;&#x884C;&#x6D4B;&#x8BD5;&#x7684;&#x8BDD;,&#x5C31;&#x9700;&#x8981;&#x4EE5;&#x4E0B;&#x4EE3;&#x7801;&#x83B7;&#x53D6;&#x5230;&#x5BF9;&#x8C61;
//      ApplicationContext ac=WebApplicationContextUtils.getWebApplicationContext(ServletActionContext.getServletContext());
//      UserService userService=ac.getBean("userService", UserService.class);
        userService.test();

    }
}

10.发布到Tomcat,启动Tomcat,进行action的访问localhost:8080/sshDemo/user/userAction!test.action的访问,若没有报错,则表示spring-struts整合成功
11.整合Hibernate4
11.1复制数据库连接配置文件db.properties
见复制 F:\个人资料\总结\保存的文件\配置文件\SSH相关\db.properties
11.2新建复制spring-db.xml配置文件,配置spring管理Hibernate
见复制 F:\个人资料\总结\保存的文件\配置文件\SSH相关\spring-db.xml
(1)注意中的location=”classpath:db.properties”
(2)注意扫描位置com.git.user.model
注意:此配置文件尚未完善需要完善,主要是读取配置文件XML中的值需要完善
11.3新建dao接口,位置com.git.user.dao.UserDao.java.编写一个接口方法如下:
public interface UserDao {
public Serializable save(User user);
}
11.4新建dao接口的实现类UserDaoImpl.位置com.git.user.dao.impl.UserDaoImpl.java,实现接口方法如下:
@Service(“userDao”)//注解Service和注解@Repository一样
@Transactional//注解事务,必须
public class UserDaoImpl implements UserDao{
@Resource(name=”sessionFactory”)
private SessionFactory sessionFactory;
public Serializable save(User user) {
// TODO Auto-generated method stub
return this.sessionFactory.getCurrentSession().save(user);
}

}
(1)&#x6CE8;&#x610F;&#x6CE8;&#x89E3;Service("userDao").&#x4E14;&#x8FD9;&#x4E2A;&#x5305;&#x5FC5;&#x987B;&#x88AB;spring&#x7BA1;&#x7406;
(2)&#x6CE8;&#x610F;&#x6CE8;&#x89E3;&#x4E8B;&#x52A1;Transactional
(3)&#x6CE8;&#x610F;&#x8C03;&#x7528;hibernate&#x4E2D;&#x7684;sessionFactory&#x65B9;&#x6CD5;&#x4FDD;&#x5B58;&#x6570;&#x636E;&#x5230;&#x6570;&#x636E;&#x5E93;this.sessionFactory.getCurrentSession().save(user);
11.5test&#x6D4B;&#x8BD5;,&#x91CD;&#x65B0;&#x6DFB;&#x52A0;&#x6D4B;&#x8BD5;&#x65B9;&#x6CD5;&#x5982;&#x4E0B;:
public class TestCase {
AbstractApplicationContext ctx;
UserService userService;
UserDao userDao;
@Before
public void init(){
    ctx=new ClassPathXmlApplicationContext("spring-mvc.xml","spring-db.xml");
    userService=ctx.getBean("userService", UserService.class);
    userDao=ctx.getBean("userDao", UserDao.class);
}
@After
public void destory(){
    ctx.close();
}
@Test
public void testSpring(){
    userService.test();
}
@Test
public void testHibernate(){
    User user=new User();
    user.setId(UUID.randomUUID().toString());
    user.setName("&#x5C0F;xiaoliud");
    user.setPwd("123456");
    user.setCeatedatetime(new Date());
    user.setModifydatetime(new Date());
    userDao.save(user);
}
11.6&#x53EF;&#x80FD;&#x51FA;&#x73B0;&#x7684;&#x62A5;&#x9519;&#x6709;:
 (1)Error creating bean with name 'transactionManager' defined in class path resource [spring-db.xml]......

 &#x89E3;&#x51B3;&#x65B9;&#x6CD5;&#x662F;:&#x68C0;&#x67E5;web.xml&#x91CC;&#x9762;&#x662F;&#x5426;&#x914D;&#x7F6E;&#x8FD9;&#x4E2A;:
  <!-- 配置openSessionInViewFilter Hibernate4需要-->
  <filter>
    <filter-name>openSessionInViewFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
    <init-param>
        <param-name>singleSession</param-name>
        <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>openSessionInViewFilter</filter-name>
    <url-pattern>*.action</url-pattern>
  </filter-mapping>
  &#x8FD8;&#x6709;&#x53EF;&#x80FD;jar&#x5305;&#x4E0D;&#x5339;&#x914D;,&#x6CE8;&#x610F;&#x5BFC;&#x5165;hibernate&#x7684;jar&#x5305;&#x7248;&#x672C;&#x4E3A;4.2.6&#x53EF;&#x4EE5;&#x4F7F;&#x7528;
  (2) No Session found for current thread..............

  &#x89E3;&#x51B3;&#x65B9;&#x6CD5;:&#x5728;spring-db.xml&#x4E2D;&#x7684;
  &#x89E3;&#x653E;&#x65B9;&#x6CD5;1:&#x8981;&#x4E48;&#x542F;&#x52A8;&#x76D1;&#x542C;&#x5668;&#x914D;&#x7F6E;&#x4E8B;&#x52A1;
  &#x89E3;&#x51B3;&#x65B9;&#x6CD5;2:&#x5982;&#x679C;&#x542F;&#x52A8;&#x6CE8;&#x89E3;&#x914D;&#x7F6E;&#x4E8B;&#x52A1;,&#x90A3;&#x4E48;&#x5C31;&#x8981;&#x5728;UserDaoImpl&#x4E0A;&#x6DFB;&#x52A0;&#x4E0A;&#x6CE8;&#x89E3;@Transactionaler&#x800C;&#x4E0D;&#x662F;serviceImpl&#x4E0A;&#x6DFB;&#x52A0;

12.最后的Action测试,添加一个action类,模拟前端访问并注册功能,添加如下方法:
public void test2(){
User user=new User();
user.setId(UUID.randomUUID().toString());
user.setName(“小xiaoliudf”);
user.setPwd(“123456”);
user.setCeatedatetime(new Date());
user.setModifydatetime(new Date());
userService.save(user);
}
删除Tomcat中的项目,重新部署进Tomcat,否则会报错,前端访问,查看数据库是否正常插入数据,如果插入了数据,则表示全部整合完成
13.配置log4j
见复制 F:\个人资料\总结\保存的文件\配置文件\log4j.properties
log4j的使用:
在类里添加:private static final Logger logger=Logger.getLogger(UserServiceImpl.class);
14.测试前端传递数据到服务器,服务器返回json数据给前端的ajax请求:代码如下:
public void test2(){
String name=ServletActionContext.getRequest().getParameter(“name”);
String pwd=ServletActionContext.getRequest().getParameter(“pwd”);
logger.info(name+”;”+pwd);
User user=new User();
user.setId(UUID.randomUUID().toString());
user.setName(name);
user.setPwd(pwd);
user.setCeatedatetime(new Date());
user.setModifydatetime(new Date());
userService.save(user);
try {
Map

public User getUser() {
    return user;
}
public void setUser(User user) {
    this.user = user;
}
logger.info("name="+user.getName());
user.setId(UUID.randomUUID().toString());
user.setCeatedatetime(new Date());
user.setModifydatetime(new Date());
logger.info("user"+user.toString());
userService.save(user);
jsp&#x524D;&#x7AEF;AJAX&#x4F20;&#x8F93;&#x9700;&#x8981;&#x8FD9;&#x6837;&#x4F20;&#x8F93;,&#x5BF9;&#x8C61;&#x7684;&#x5C5E;&#x6027;:
data:{
    "user.name":$("#name").val(),
    "user.pwd":$("#pwd").val()
},
&#x65B9;&#x6CD5;&#x4E2D;,&#x5C31;&#x81EA;&#x52A8;&#x63A5;&#x6536;&#x5230;&#x4E86;
&#x7B2C;&#x4E09;&#x79CD;:&#x901A;&#x8FC7;request&#x8BF7;&#x6C42;&#x7684;&#x5230;:
String name=ServletActionContext.getRequest().getParameter("name");
String pwd=ServletActionContext.getRequest().getParameter("pwd");

Original: https://www.cnblogs.com/NIAN2011/p/16663666.html
Author: NIANER2011
Title: 2.搭建SSH

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/609058/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • SpringBoot集成thymeleaf增删改查示例

    有小伙伴找我要个 thymeleaf 的 demo,说自己集成的总是报错,所以就有了这篇… 关于什么是 thymeleaf 我就不赘述了,相信搜到这篇的大部分是奔着如何…

    Java 2023年5月30日
    054
  • Java调用C++动态链接库——Jni

    最近项目需要,将C++的算法工程编译成动态链接库,交给 Java后台当作函数库调用。就去了解了下Jni。使用起来还是比较方便的。 首先编写Java的调用类。例如: public c…

    Java 2023年6月16日
    089
  • [javaweb]重点总结大全

    javaweb web:网页静态web:html,css 数据不会发生变化动态web:servlet/jsp,asp,php每个人在不同的时间看到数据都不同 web应用程序编写完毕…

    Java 2023年6月6日
    064
  • JVM基础学习(一):JVM内存模型

    在Java进阶知识的学习中,JVM都是避不过去的一关,我个人对于JVM的理解其实就是相当于在操作系统的外层再加了一层中间层,从来屏蔽了具体硬件之间的不同实现,使得Java实现了最重…

    Java 2023年6月7日
    079
  • 13.zookeeper、springboot、mybatis、dubbo的整合步骤

    4.构建数据库【数据随意】 5.创建provider(微服的提供者) 1.创建服务接口 2.创建服务接口的实现类 3.创建实体(注意必须要序列化) 4.创建mapper 接口 5….

    Java 2023年6月13日
    078
  • VMware虚拟机中安装Linux操作系统(ubuntu)

    一、准备工作: 1、下载VMware虚拟机 下载地址:https://www.vmware.com/cn/products/workstation-pro/workstation-…

    Java 2023年6月9日
    061
  • nginx实现虚拟主机

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/chrdai/p/11324388.htmlAuthor…

    Java 2023年5月30日
    069
  • Java 如何逆向遍历一个 List

    概述 在这篇文章中,我们对 Java 如何逆向遍历一个 List 进行了一些简单的描述。 主要的思路就是从正向遍历使用的 i++ 变成 i–如果使用了迭代器 Iterator 的话…

    Java 2023年5月29日
    072
  • Spring Cloud Feign+Hystrix自定义异常处理

    开启Hystrix spring-cloud-dependencies Dalston版本之后,默认Feign对Hystrix的支持默认是关闭的,需要手动开启。 feign.hys…

    Java 2023年6月6日
    092
  • Java开发笔记(一百四十四)实现FXML对应的控制器

    前面介绍了如何通过fxml文件编排界面布局,可是光有静态界面根本没法处理业务,必须另外书写业务逻辑的代码,方能响应各按钮的单击事件,并将业务结果即使呈现到界面上。显然,fxml内部…

    Java 2023年6月6日
    073
  • 保姆教程系列三、Nacos Config–服务配置

    前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 上篇我们介绍到 保姆教程系列二、Nacos实现注册中心 配置中心原理 一、 服务配置中心介绍 首先我们来看一下,微…

    Java 2023年6月5日
    077
  • vmware虚拟机备忘录

    虚拟机拷贝自其他服务器,有时候IP,网络都配置正确就是没法ping 通网络,重启虚拟机也没用 此时将网卡删除,重新添加 systemctl restart network 即可 O…

    Java 2023年5月30日
    067
  • 【Java中的线程】java.lang.Thread 类分析

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月9日
    081
  • pom.xml成了普通xml文件

    最近公司老有新同事由于各种原因,差点导致整个项目崩溃,其中有一个问题就是idea没有识别出来mavn中的pom.xml文件,不能自动下载依赖包。问题现状:pom.xml成了普通黄色…

    Java 2023年6月8日
    084
  • SpringBoot 上下文获取注入的Bean

    import org.springframework.beans.BeansException; import org.springframework.context.Applic…

    Java 2023年5月30日
    082
  • 简单说说Runnable和Callable

    Runnable和Callable这两个接口,是并发编程不可避免要谈的话题,而且总要被放到一起比较一番。太多的人写这两者之间的对比和差异了,在这里就只是随手记录一下自己的理解和想法…

    Java 2023年6月5日
    060
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球