学习笔记-SpringMVC(一)

SpringMVC详细教程
SpringMVC 原理图:
1. 用户访问 /index
2. 根据web.xml中的配置 所有的访问都会经过DispatcherServlet
3. 根据 根据配置文件springmvc-servlet.xml ,访问路径/index
会进入IndexController类
4. 在IndexController中指定跳转到页面index.jsp,并传递message数据
5. 在index.jsp中显示message信息

原理图

DispatcherServlet:前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。
DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:
1、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;
2、
通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器)

3、通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);
4、通过ViewResolver解析逻辑视图名到具体视图实现;
5、本地化解析;
6、渲染具体的视图等;
7、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。工作流程

1.在WEB-INF目录下创建 web.xml
—配置Spring MVC的入口 DispatcherServlet,把所有的请求都提交到该Servlet。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
<!--load-on-startup:表示启动容器时初始化该Servlet;-->
<!--url-pattern:表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的。也可以如“*.html”表示拦截所有以html为扩展名的请求。-->

2.WEB-INF目录下创建springmvc-servlet.xml
文件名与web.xml中的<servlet-name>对应,因为这是Spring MVC的 映射配置文件;表示访问路径/index会交给id=indexController的bean处理,id=indexController的bean配置为类:IndexController;

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="simpleUrlHandlerMapping"
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/index">indexController</prop>
            </props>
        </property>
    </bean>
    <bean id="indexController" class="controller.IndexController" />
</beans>

3.控制类 IndexController实现接口Controller
提供方法handleRequest处理请求,
SpringMVC通过 ModelAndView 对象把模型和视图结合在一起;

public class IndexController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

        ModelAndView mav = new ModelAndView("index.jsp");
        mav.addObject("message", "hello Spring MVC");
        // 模型数据是 message,内容是 “Hello Spring MVC”
        return mav;
    }
}

4.在WebContent目录下创建index.jsp
index.jsp,通过EL表达式显示message的内容

<h1>${message}</h1>

5.部署在Tomcat中,重启tomcat,然后访问地址。
这里写图片描述

视图定位:
如果代码写成这样,就表示跳转到页面 index.jsp
new ModelAndView(“index.jsp”);
所谓的视图定位,指的是代码还是写成这样,但是会跳转到
/WEB-INF/page/index.jsp
new ModelAndView(“index”);
作用:不是所有的视图都会使用jsp来做,还可以是JSF,html 等其他的方式。使用视图定位,如果要把视图从index.jsp改为index.html,就不需要修改代码,而只需要修改配置文件即可。
另一个便利之处在于,如果要批量修改视图文件所处于的位置,按照以前的办法,也需要对每个类逐一修改,工作量大,容易出错。 而使用这种方式,维护成本就小多了。

1.修改springmvc-servlet.xml

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/page/" />
        <property name="suffix" value=".jsp" />
    </bean>
<!--作用:把视图约定在 /WEB-INF/page/*.jsp 这个位置-->

2.修改IndexController
改这行代码

ModelAndView mav = new ModelAndView("index");

3.移动index.jsp
在WEB-INF下新建目录page
把index.jsp移动到 WEB-INF/page 目录下

4.测试,完成

猜你喜欢

转载自blog.csdn.net/qq_36653267/article/details/79371795