SpringMVC入门

我们先来说一下什么事SpringMVC?有什么作用?

  • springMVC是一种web层mvc框架,用于替代servlet(处理|响应请求,获取表单参数,表单校验等)

springmvc和strus2的区别?

我们可以从两点看出区别,一个是入口一个是生命周期。

  • SpringMVC的入口是servlet,而strus2则是filter
  • 从什么周期来看:spring mvc Controller是单例的,所以不能使用成员变量获取参数,效率高。struts action则是多例的,可以使用成员变量获取参数,效率低。

spring mvc中常用注解

(本文章用到的@Controller,@RequestMapping)
  • @Controller:标识这个类是一个控制器
  • @RequestMapping:给控制器方法绑定一个uri
  • @ResponseBody:将java对象转成json,并且发送给客户端
  • @RequestBody:将客户端请求过来的json转成java对象
  • @RequestParam:当表单参数和方法形参名字不一致时,做一个名字映射
  • @SessionAttribute:声明将什么模型数据存入session
  • @CookieValue:获取cookie值
  • @ModelAttribute:将方法返回值存入model中
  • @HeaderValue:获取请求头中的值

了解SpringMVC的核心组件

  • DispatcherServlet:前置控制器
  • HandlerMaper:请求映射到Mapper
  • handler:自定义完成具体业务逻辑,后端控制器
  • HandlerInterceptor:处理器拦截器
  • HandlerExcutionChain:处理器执行链
  • HandlerAdapter:处理器适配器
  • ModelAndView:装载模型数据和视图信息
  • ViewResolver:视图解析器

SpringMVC的执行实现流程

  1. 客户端请求被DispatcherServlet接收。
  2. DispatcherServlet将请求映射到Handler。
  3. 生成Handler以及HandlerInterceptor
  4. 返回HandlerExecutionChain ( Handler+ HandlerInterceptor )
  5. DispatcherServlet通过HandlerAdapter执行Handler
  6. 返回一个Mod## 标题elAndView
  7. DispatcherServlet通过ViewResolver进行解析
  8. 返回填充了模型数据的View ,响应给客户端

不要看着SpringMVC组件太多,执行过程复杂,其实大部分组件由框架提供,我们只需要通过配置进行关联即可,只需手动编写Handler , View。

通过案例说明SpringMVC的注解 方式和XML方式

web.xml

   <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

XML方式

springmvc.xml

<bean id="handlerMapper" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/test">myfristHandler</prop>
            </props>
        </property>
    </bean>
    <bean id="myfristHandler" class="com.java.MyHandler"></bean>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
 <bean 

MyHandler类我们需要继承Controller

public class MyHandler implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView modelAndView=new ModelAndView();
        modelAndView.addObject("name","hello SpringMVC");
        modelAndView.setViewName("show");
        return modelAndView;
    }
}

show.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${name}
</body>
</html>

接下来配置Tomcat,启动,访问/test这个路径(springmvc.xml中配置)
启动成功显示Hello SpringMVC

注解方式

springmvc.xml

  <context:component-scan base-package="com.java"/>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

MyHandler2类我们不需要继承Controller(@Controller,@RequestMapping)


@Controller
public class MyHandler2 {
    @RequestMapping("/modelAndViewTest")
    public ModelAndView modelAndView(Model model){
        ModelAndView modelAndView=new ModelAndView();
        modelAndView.addObject("name","hello SpringMVC");
        modelAndView.setViewName("show");
        return modelAndView;
    }
}

show.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${name}
</body>
</html>

接下来配置Tomcat,启动,访问/test这个路径(springmvc.xml中配置)
启动成功显示Hello SpringMVC

当然我们传值的方式还有其他的方式:(调用的方式一模一样,可以用下面两种方式代替MyHandler2中的modelAndView方法)

  • model传值
 	@RequestMapping("/modelTest")
    public String ModelTest(Model model){
        model.addAttribute("name","SpringTom2");
        return "show";
    }
  • Map传值
    @RequestMapping("/mapTest")
    public String MapTest(Map<String,String>map){
        map.put("name","MapTOM");
        return "show";
    }

原创文章,梳理不足的地方,评论区评论一起解决

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值