SpringMVC_01_初识

SpringMVC的实现

SpringMVC部分对应JavaWeb部分的MVC层次结构,主要负责网页层面的转发、数据传输等功能,也就是Controller层与视图层之间的调用关系,分别对其运行原理、配置文件、注解使用进行了解

一.SpringMVC的工作原理

在这里插入图片描述
---------第一阶段--------

0:客户端发起请求时,拦截指定请求,送至DispatcherServlet(前置控制器)

操作:在web.xml文件中配置servlet拦截到DispatcherServlet,并关联一个spring的xml文件

---------第二阶段--------

1:HandlerMapping为处理器映射器,被DispatcherServlet调用,根据URL寻找对应的Handler

2:HandlerExecution为具体的Handler(识别spring手动注册的bean或注解@RequestMapping)

3:HandlerExecution将解析后的结果返回给DispatcherServlet对象

操作:在spring.xml中配置处理器映射器,此处使用BeanNameUrlHandlerMapping映射器,根据bean的id进行匹配

---------第三阶段--------
4:HandlerAdapter为处理器适配器,执行DispatcherServlet传入的Handler

5:HandlerAdapter执行找到的Controller(此阶段是进行业务层调用的部分)

6:执行后给HandlerAdapter返回具体信息,如:ModelAndView对象

7:HandlerAdapter将返回信息传给DispatcherServlet

操作:建立需要执行的类,实现Controller接口,重写handleRequest()方法; 在方法中新建ModelAndView对象,在对象中封装数据,封装视图,返回此对象在spring中注册此类

---------第四阶段--------

8:DispatcherServlet调用视图解析器,解析ModelAndView

9:视图解析器解析出要跳转的视图名后,进行逻辑操作,最后将数据和视图返回给DispatcherServlet

10:根据返回的结果,调用对应的视图,映射对应的数据

最后:用户看到请求的页面

操作:在spring.xml中注册视图解析器,指定逻辑操作;

二.SpringMVC的配置

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee	
         http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
	<!--注册DispatcherServlet,拦截请求-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!--关联一个springmvc配置文件springmvc-servlet.xml-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
		<!--启动级别:1,和服务器一起启动-->
        <load-on-startup>1</load-on-startup>
    </servlet>
	<!--/*:使.jsp文件也会被拦截,去加上前后缀,导致页面找不到
	    / :只拦截请求页面-->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

spring-mvc.xml

<!--处理器映射器,用于根据URL找到对应的bean-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--处理器适配器,根据bean找到对应的类-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--视图解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<!--前缀-->
	<property name="prefix" value="/WEB-INF/jsp/"/>
	<!--后缀-->
	<property name="suffix" value=".jsp"/>
</bean>
<!--注册实体类bean-->
<bean id="/hello" class="com.xawl.wvc.HellowController"/>

实体类,实现Controller接口:

public class HellowController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        //ModelAndView视图和模型
        ModelAndView modelAndView = new ModelAndView();
        //封装对象,放在ModelAndView中
        ModelAndView modelAndView1 = modelAndView.addObject("msg", "HellowController");
        //封装要跳转的对象
        modelAndView.setViewName("hello");//WEB-INF/jsp/hello.jsp
        return modelAndView;
    }
}

至此,一个简单的具有MVC功能的后端已配置完成,在建立前端JSP页面后,即可实现页面之间的跳转、数据传输。

三、注解实现

1.注解回顾

@Controller @Service @Repository @Component
//用于spring注册类,扫描包时进行注册组件
//扫描包:<context:component-scan base-package="包路径"/>

@RestController
//不走视图解析器,不进行页面跳转,返回字符串

@RequestMapping
//用于指定映射请求,可用于类、方法上
//用于类上时,类中所有方法都需嵌套映射

@PathVariable
//接收路径中占位符的值
//   /path/{x}/{y}  @PathVariable int x,@PathVariable int y

@Param  @RequestParam 
//@RequestParam  解决前台参数名称与后台接收参数变量名称不一致的问题
//@Param  为修饰参数,使得mapper.xml中的参数与后台的参数对应上,也增强了可读性

2.注解代码实现

web.xml不变,与上述一致

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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://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
        ">
    <!--  扫描包  -->
    <context:component-scan base-package="com.xawl.controller"/>
    <!--处理器映射器,处理器适配器合二为一,被整合为:-->
    <mvc:annotation-driven/>
    <!--过滤资源,防止css.js等资源被拦截-->
    <mvc:default-servlet-handler/>
    <!--视图解析器-->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

实现类:

@Controller
public class HelloMVC {
    @RequestMapping("/test")
    public String test(Model model){
        //封装数据
        model.addAttribute("name","Hello MVC");
        //跳转页面
        return "test";
    }
}

实现了简化开发的目的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值