配置版
- 新建一个module,springmvc-02-hello , 添加web的支持!
- 确定导入SpringMVC的依赖
- 配置web.xml ,注册DispatcherServlet 中心控制器
```java
<?xml version=”1.0” encoding=”UTF-8”?>
- 编写SpringMVC 的配置文件 名称 springmvc-servlet.xml
- 说明,这里的名称要求是按照官方来的
java
<?xml version=”1.0” encoding=”UTF-8”?>
- 添加处理 映射器
java
- 添加处理器适配器
java
- 添加 视图解析器
java
- 编写业务 Controller 要么实现Controller接口,要么增加注解,需要返回一个ModelAndView 装数据,封视图
java
package com.kuang.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//注意:这里我们先导入Controller接口
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
//ModelAndView 模型和视图
ModelAndView mv = new ModelAndView();
//封装对象,放在ModelAndView中。Model
mv.addObject(“msg”,”HelloSpringMVC!”);
//封装要跳转的视图,放在ModelAndView中
mv.setViewName(“hello”); //: /WEB-INF/jsp/hello.jsp
return mv;
}
}
- 将自己的类交给SpringIOC容器,注册bean
java
- 编写跳转的jsp页面,显示ModelandView存放的数据,以及正常页面
java
<%@ page contentType=”text/html;charset=UTF-8” language=”java” %>
${msg}
- 进行测试
- 可能出现的问题,排查步骤, 404
- 查看控制台输出,确认是否是jar包缺少
- 就啊日报存在,显示无法输出,就在idea的项目发布中,添加lib依赖
- 重启tomcat
- 一般不会采用配置开发,而是注解开发,看下文
<a name="dlGxU"></a>
# 注解版
- 新建一个项目,添加web支持
- 由于maven可能存在资源过滤问题,配置完善
java
- 在pom.xml文件引入相关的依赖:主要有Spring框架核心库、Spring MVC、servlet , JSTL等。
- 配置web.xml
java
<?xml version=”1.0” encoding=”UTF-8”?>
<a name="pMXCx"></a>
## 注意点
- / 和 /* 的区别
- < url-pattern > / </ url-pattern > 不会匹配到.jsp, 只针对我们编写的请求;即:.jsp 不会进入spring的 DispatcherServlet类 。
- < url-pattern > /* </ url-pattern > 会匹配 *.jsp,会出现返回 jsp视图 时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以报404错。
- 注意web.xml版本问题,要最新版!<br />
- 注册DispatcherServlet<br />
- 关联SpringMVC的配置文件<br />
- 启动级别为1<br />
- 映射路径为 / 【不要用/*,会404】
<a name="hWDVR"></a>
## 添加Spring MVC配置文件
- 在resource目录下添加 springmvc-servlet.xml 配置文件,配置形式与spring容器配置基本类似,为了支持基于注解的ioc,设置自动扫描包,具体
```java
<?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: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/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
<context:component-scan base-package="com.kuang.controller"/>
<!-- 让Spring MVC不处理静态资源 -->
<mvc:default-servlet-handler />
<!--
支持mvc注解驱动
在spring中一般采用@RequestMapping注解来完成映射关系
要想使@RequestMapping注解生效
必须向上下文中注册DefaultAnnotationHandlerMapping
和一个AnnotationMethodHandlerAdapter实例
这两个实例分别在类级别和方法级别处理。
而annotation-driven配置帮助我们自动完成上述两个实例的注入。
-->
<mvc:annotation-driven />
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
</bean>
</beans>
- 在视图解析器中我们吧所有的视图都存放在 /WEB-INF/ 目录下,可以保证视图安全,这个目录下的文件,客户端不能直接访问
import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping;
@Controller @RequestMapping(“/HelloController”) public class HelloController {
//真实访问地址 : 项目名/HelloController/hello @RequestMapping(“/hello”) public String sayHello(Model model){ //向模型中添加属性msg与值,可以在JSP页面中取出并渲染 model.addAttribute(“msg”,”hello,SpringMVC”); //web-inf/jsp/hello.jsp return “hello”; } }
- Controller 为了让spring ioc 容器初始化的时候自动扫描到
- RequestMapping 为了映射请求路径,因为类与方法上都有映射所以访问时路径为拼接撑的 /HelloController/hello
- 方法中声明Model类型的参数是为了吧Action中的数据带到视图中
- 方法返回的结果是视图的名称hello,加上配置文件中的前后缀变成 WEB-INF/jsp/hell.jsp
<a name="KOpKh"></a>
## 创建视图层
- 在 WEB-INF/jsp 目录中创建 hello.jsp 视图可以直接取出并展示从 Controller带回的信息。可以通过EL表示取出Model中存放的值,或者对象。
```java
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>SpringMVC</title>
</head>
<body>
${msg}
</body>
</html>
-
小结
实现步骤
新建项目
- 导入jar包
- 编写web.xml 注册DispatcherServlet
- 编写springmvc配置文件
- 创建对应的控制类,controller
- 完善前端视图和controller之间的对应
-
使用springMVC必须配置的三大件:
处理器映射器
- 处理器适配器
- 视图解析器
通常需要手动配置视图解析器,处理器映射器和处理器适配器只需要开启注解驱动即可,省掉打断的xml配置