Java web 之 Spring+Mybatis+Spring MVC框架整合(下)
来源:互联网 发布:淘宝达摩盘是什么 编辑:程序博客网 时间:2024/06/05 23:46
前两篇,我们主要讲了聚合工程Maven的创建(通过Maven本地仓库,集中管理我们项目中的jar包),子Maven Project ssm-web 继承父Maven Project ssm-parent;ssm-web聚合项目中又创建了一个Maven Modulessm-web-test,打包方式为war包;以及Mybatis逆向工程的使用和Spring+Mybatis的整合,以及最后JUnit单元的调试;SSM整合系列到现在,只剩下最后一个关键人物还没有出场,那就是我们的 Spring MVC框架。
【聚合:很多节点合到一起的一个工程,但是每个节点不能独立存在。】
Spring MVC
开始之前,我们先来看一下MVC(一种设计模式)的大致流程图:
用户发出请求给控制器,控制器决定去调用哪个模型,模型中有不同的业务逻辑,然后Model层返回相应的数据给控制器,控制器调用视图,进行视图渲染和组织数据,最后,将呈现好的界面和数据返回给我们用户。
ok,以上是讲前预热,Now,我们开始我们的Spring MVC框架之旅。
首先,我们看下,目前我们的项目目录结构:
配置spring-MVC.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:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 配置包扫描器 --> <context:component-scan base-package="com.appleyk.controller"></context:component-scan> <!-- 配置注解驱动 --> <mvc:annotation-driven/> <!-- 视图解析器 定义跳转的文件的前后缀 --> <beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/" /><property name="suffix" value=".jsp" /></bean><!-- 添加静态资源css、js映射文件 --><mvc:resources location="/WEB-INF/css/" mapping="/css/**"/><mvc:resources location="/WEB-INF/js/" mapping="/js/**"/></beans>
上面,有几个地方需要注意一下,下图均已标注:
配置好MVC后,我们需要再配置一下整个项目的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_2_5.xsd" version="2.5"> <display-name>ssm-web-test</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 初始化Spring容器 +Spring和Mybatis的配置文件--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mybatis/spring-mybatis.xml</param-value></context-param><!-- Spring监听器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener> <!-- 防止Spring内存溢出监听器 --> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <!-- Spring MVC的前端控制器 --><servlet><servlet-name>springMVC</servlet-name><!-- DispatcherServlet:中央控制器,把请求给转发到具体的控制类 --><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- contextConfigLocation不是必须的, 如果不配置contextConfigLocation, spring-MVC的配置文件默认在:WEB-INF/servlet的name+"-servlet.xml" --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springMVC/spring-MVC.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping> <!-- 解决post乱码 --><filter><filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>
上面有几个需要注意的敌法,如下图标注:
其他倒没什么,好了,到这里,我们的Spring MVC框架也整合进项目中了,我们跑一下整个项目,看下我们改动web.xml后,是否影响了我们整个web项目的走向:
小插曲(spring-MVC.xml的路径写错了):
所以,配置文件里面,涉及路径的地方,一定要检查检查再检查,这里,应该是
springMVC/spring-MVC.xml
上述的web.xml里面,我已经更改了错误。改后,我们再次运行一下我们的web项目:
Good,我们SSM框架整合后的项目正常运行,最后看一眼index.jsp页面,真的是最后一眼:
到这,先别急着兴奋,因为我们还差一个重要的环节,那就是测试我们的Spring MVC框架,怎么测,请继续往下看:
我们想实现这样一个功能,浏览器中输入一个url请求,格式为/user/username,然后,我们将这个url中的username传递到一个jsp页面进行欢迎展示:
(1)、怎么跳到这个jsp页面呢?
当然是使用@controller注解的方式,return jsp,当然我们的spring-MVC.xml中已经给我们配置好了视图解析器的路径(/WEB-INF/views/),我们这里只需要返回一个包含jsp文件的名字就行。
(2)、怎么将这个username的值传递给jsp页面呢?
这里我们使用ModelAndView类实现,一看就知道,这个类含两个部分,一个是数据部分,一个是视图,因此,我们让控制器Controller返回一个ModelAndView对象,该对象同时包含了要跳转的页面showUser和要传递的数据username
好了,我们开始,走一遍Controller-->Model-->View,测试一下Spring MVC:
1、在/WEB-INF/views/下面,新建一个jsp文件,取名,showUser.jsp:
目前,showUser.jsp还未有任何内容输出,我们放到后面
2、在com.appleyk.controller包下面添加一个java文件UserController.java:
package com.appleyk.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;@Controllerpublic class UserController { @RequestMapping("/user/{userName}")public ModelAndView Hello(@PathVariable String userName){ModelAndView mad = new ModelAndView("showUser");//将数据存入modelMapmad.addObject("message", userName);return mad;}}
上面一个"showUser",就能指向对应的jsp文件,有图有真相:
控制器的类我们写好了,现在差一个jsp前台页面展示,我们改一下我们的
showUser.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!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>appleyk的CSDN</title></head><body> 亲爱的${requestScope.userName},欢迎你!</body></html>
我们用requestScope(表示变量能在本次请求中使用)拿到mad对象中的userName
Controller我们写好了,View我们也写好了,现在就是Model,我们还没有提供,这个数据来自于url请求中的userName,因此,我们需要先运行项目:
九月 01, 2017 1:39:32 下午 org.springframework.web.servlet.DispatcherServlet initServletBean信息: FrameworkServlet 'springMVC': initialization completed in 1219 ms九月 01, 2017 1:39:32 下午 org.apache.coyote.AbstractProtocol start信息: Starting ProtocolHandler ["http-bio-8080"]
tomcat启动成功,然后我们打开浏览器,输入:http://localhost:8080/user/appleyk
我们多试几个:
我们依然使用url地址请求的方式
修改下UserController.java:
package com.appleyk.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.servlet.ModelAndView;import com.appleyk.pojo.User;import com.appleyk.service.UserService;@Controllerpublic class UserController { @RequestMapping("/user/{userName}")public ModelAndView Hello(@PathVariable String userName){ModelAndView mad = new ModelAndView("showUser");//将数据存入modelMapmad.addObject("message", userName);return mad;}@Autowiredprivate UserService userservice;@RequestMapping("/user/id/{userID}")@ResponseBodypublic User getUserById(@PathVariable int userID){User user =userservice.getUserById(userID);return user;}}
需要解释的地方下图标注:
我们运行项目后,浏览器输入http://localhost:8080/user/id/1:
我们可以找一下UserMapper.class所在的位置:
我们为ssm-web-test的pom.xml添加如下内容:
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
需要注意的地方下图标注:
注意增加解决XXXMapper.xml不自动关联的内容 在什么位置上。好了,我们重新启动一下我们的web项目:
九月 01, 2017 6:51:59 下午 org.springframework.web.servlet.DispatcherServlet initServletBean
信息: FrameworkServlet 'springMVC': initialization completed in 1095 ms
九月 01, 2017 6:51:59 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-bio-8080"]
我们验证一下,我们的UserMapper.xml有没有和我们的class放在一起:
ok,xml关联的问题算是解决了。
我们重新在浏览器中输入http://localhost:8080/user/id/2:
哈哈,有意思吧,跟闯关一样,针对上面的问题,我们给我们的项目加个jar包依赖,在哪加? 当然是在ssm-web-test的pom.xml文件里加:
增加的内容:
<!-- Jackson Json处理工具包--><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId></dependency>
图片说明如下:
好了,到这,我们好像没什么要加的了,是吗?我们再一次运行我们的项目:
信息: FrameworkServlet 'springMVC': initialization completed in 1419 ms
九月 01, 2017 7:09:19 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-bio-8080"]
九月 01, 2017 7:09:28 下午 com.alibaba.druid.pool.DruidDataSource info
信息: {dataSource-1} inited
成功,我们重复浏览器的url请求操作:http://localhost:8080/user/id/1
我们再来试一下,其他人的信息:
没问题,很好,我们的Controller很完美的为我们返回了View+Model,我们再试试另外一个Controller行为(url请求):
非常好,到这,我们的SSM整合框架就全部完了,真是几经周转,吐血之作!虽然案例有点简单,但是整合的过程却一点不能马虎,漏了哪个环节,项目即刻崩掉,你想想,如果你不熟练,一个bug都够你折腾半天了。
最后附上整个项目的下载地址:项目下载
以及整个项目的图文操作文档下载地址:我去,不等了,刷新太慢了,去我的资源里找
结束语:
不积跬步无以至千里,不积小流无以成江海,
程序人生的精彩需要坚持不懈地积累!!!
- Java web 之 Spring+Mybatis+Spring MVC框架整合(下)
- Java web 之 Spring+Mybatis+Spring MVC框架整合(上)
- Java web 之 Spring+Mybatis+Spring MVC框架整合(中)
- JAVA WEB搭建Spring mvc+Spring+MyBatis整合框架
- (spring mvc+spring+Mybatis)框架整合
- Spring MVC+Mybatis 框架整合(一)
- Spring MVC+Mybatis 框架整合(二)
- spring mvc + mybatis 整合框架
- spring mvc、spring、mybatis框架整合
- SSM(Spring mvc+Spring+Mybatis)框架整合
- spring + spring mvc + mybatis 整合框架
- Spring + Spring MVC + Mybatis 框架整合学习
- ssm框架 详细整合教程(spring+spring-mvc+mybatis)
- SSM(Spring+Spring MVC+MyBatis) 框架整合
- 一步一步完成SSM框架整合(Spring+Spring MVC + Mybatis)
- Spring MVC 框架 整合 MyBatis 框架实例
- Spring4.2 +Spring MVC+Mybatis 框架整合
- Spring Boot、Mybatis框架整合开发Java RESTful Web Service
- Maven学习笔记 -- day04 Maven分模块开发
- 25个Spring面试题
- 允许mysql远程访问 及 如何修改密码
- C#基础-039 设计一个学生类Student和它的一个子类Undergraduate,并进行测试
- 鼠标光晕设置
- Java web 之 Spring+Mybatis+Spring MVC框架整合(下)
- 在ubuntu16.04+opencv3.0环境下使用mnist手写体数据集编写相关程序
- 69 个经典 Spring 面试题和答案
- CC2530 环境搭建
- vyos
- Plsql问题及技巧汇总
- postgre数据库备份与恢复
- 利用MATLAB计算SPWM脉冲宽度与并应用STM32输出
- 《珠珠图案》教程四:文字创作要领一