讲述,springmvc概述,原理,环境的搭建,controller(请求转发/重定向)跳转到页面,controller跳到另外一个controller,配置核心的DispatcherServlet,配置默认的核心配置文件,jsp请求转发的视图解析器。
源码获取github
1.SpringMvc概述
SpringMVC 是隶属于Spring框架中的一个模块而已
让控制层更加的简单
SpringMVC是WEB层框架
SpringMVC的概述(官方文档页面搜索the web)
Introduction to Spring Web MVC framework
The Spring Web model-view-controller (MVC) framework is
designed
around
aDispatcherServlet
(翻译:设计围绕着DispatcherServlet,意思是我需要配置一个Servlet)that dispatches requests to handlers, with configurable handlermappings
(可以设置一个映射), view resolution, locale, time zone and theme resolution as well assupport for uploading files
(支持上传文件).The default handler is based on the
@Controller
and@RequestMapping
annotations(默认情况下支持了@Controller和@RequestMapping两个注解),对比我之前学的servlet:之前的:@WebServlet(“/sys/user”)通过我们设置的映射路径/sys/user会访问到Servlet
@Controller 就相当于告知你的这个类为控制器
@RequestMapping是用来设置映射的路径
offering a wide range of flexible handling methods. With the introduction of Spring 3.0, the
@Controller
mechanism also allows you to createRESTful [百度,这是一个风格,豆瓣就是用的这种风格]
Web sites and applications, through the
@PathVariable
annotation and other features.
所有的请求都要经过前端控制器处理,然后由它决定找到下一个controller是谁,然后这个controller又响应回去DispatcherServlet,视图解析器决定使用哪个模板,最终响应成HTML。
2.程序结构
在idea中新建一个javaee项目,其中需要jar包,可以在maven仓库中下载
3.idea配置tomcat
添加tomcat
找到你自己的tomcat路径,然后点ok添加好你的tomcat,然后点ok,把你需要部署到tomcat的web服务,添加进去,旁边那个Application context 是你访问这个项目的名字,比如/mvc,访问路径就是localhost:8080/mvc,下面http port是访问的端口号,然后有个是设置打开的浏览器,然后就ok了,最后点运行键,就可以运行
4.配置核心的DispatcherServlet
在web.xml中加入
<servlet>
<!--默认的核心配置文件-->
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 服务器启动的时候就对DispatcherServlet进行实例化操作 -->
<!-- 值越小,越被越优先实例化 -->
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- /
所有的资源访问都需要经过 DispatcherServlet处理
路径
href
src.....
区分 /* 和 /
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
5.配置默认的核心配置文件的所在位置和名称
Upon (init初始化)
init
ialization of aDispatcherServlet
, Spring MVClooks
for a file named*[servlet-name]-servlet.xml*
(DispatcherServlet初始化的时候,会找一个这个格式的文件)在DispatcherServlet中,我们写了这个springmvc,就会找springmvc-servlet.xml这个文件,在WEB-INF下
in the
WEB-INF
directory of your web application and creates the beans defined there, overriding the definitions of any beans defined with the same name in the global scope.
springmvc-servlet.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!--1.启动SpringMvc注解-->
<mvc:annotation-driven/>
<!--2.扫描controller-->
<!--可以使用通配符 *
com.*.web 可以识别:com.hs.web com.sd.web com.sdsa.web 但是不能识别com.hs.sd.web
访问任意一层
com.**.web 可以识别com.web com.hs.web com.sad.asd.asd.web
-->
<context:component-scan base-package="com.hs.**.web"/>
</beans>
6.Controller文件
SkipDemoController.java
package com.hs.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.UrlBasedViewResolver;
/**
* 跳转专题:请求转发,重定向,一个controller跳到另外一个controller
*/
@Controller
public class SkipDemoController {
//设置映射的路径
//当我在浏览器中输入 http://127.0.0.1:8080/mvc/hs01
@RequestMapping("/hs01")
/*从Controller跳转到jsp_默认是请求转发
请求转发,页面不跳转,可以访问WEB-INF路径下的东西*/
public ModelAndView test01(){
ModelAndView nav = new ModelAndView();
nav.setViewName("/WEB-INF/jsp/result01.jsp");
return nav;
}
/*从Controller跳转到jsp_默认是请求转发
请求转发,页面不跳转,可以访问WEB-INF路径下的东西*/
@RequestMapping("/hs011")
public ModelAndView test011(){
ModelAndView nav = new ModelAndView();
nav.setViewName("jsp/result01"); //如果设置了jsp请求转发的视图解析器
return nav;
}
@RequestMapping("/hs02")
/*从Controller跳转到jsp_重定向
但是官方不推荐直接重定向到jsp页面
重定向,页面跳转,不可以访问WEB-INF路径下的东西*/
public ModelAndView test02(){
ModelAndView nav = new ModelAndView();
nav.setViewName("redirect:/test01.jsp");
return nav;
}
/**从Controller跳转到Controller_请求转发
* 当配置了JSP的请求转发视图解析器后从Controller跳转到另外一个Controller,
* 必须指明前缀:forward/redirect
* @return
*/
@RequestMapping("/hs03")
public ModelAndView test03() {
ModelAndView nav = new ModelAndView();
nav.setViewName("forward:/hs011"); //这个写forward的原因是,避免jsp请求转发视图解析器,把hs011解析成了jsp页面UrlBasedViewResolver.FORWARD_URL_PREFIX=forward
// nav.setViewName("/hs01");
return nav;
}
/*从Controller跳转到Controller_重定向*/
@RequestMapping("/hs04")
public ModelAndView test04() {
ModelAndView nav = new ModelAndView();
nav.setViewName(UrlBasedViewResolver.REDIRECT_URL_PREFIX+"/hs01"); //UrlBasedViewResolver.REDIRECT_URL_PREFIX == redirect:
return nav;
}
}
7.视图解析器
在springmvc-servlet.xml的后面加
<!--jsp请求转发视图解析器
请求转发jsp页面的时候,在路径上加入前缀和后缀
-->
<!--下面相当于 InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver()-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<!--相当于setPrefix("/WEB-INF/")-->
<property name="prefix" value="/WEB-INF/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
<!--支持JSTL-->
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
</bean>
8.页面代码
result01.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
hello word
</body>
</html>
test01.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
测试
</body>
</html>