No.1 Spring MVC 从hello开始

No.1 Spring MVC 从hello开始


在以往的开发中,我们对MVC编程模式,也许并不陌生,M:model模型,V:view视图,C:control控制层。Model主要指Java bean,包括处理业务的业务bean,承载数据的实体bean。View主要指用户浏览网页的内容,诸如JSP,HTML等。而像我们之前所用到的servlet,既调用了java类,又实现了向jsp页面跳转,可以称之为控制层。


简单介绍了MVC编程模式,下面从最基础的谈一谈Spring MVC,仅是个人观点,如有意见,还请多多包涵。


Spring Web MVC使用了MVC架构模式的思想,将web层进行职责解耦,是一种基于Web MVC设计模式的请求驱动类型的轻量级Web框架,所谓的基于请求驱动指的是使用请求-响应模型,该框架的目的是帮助我们简化开发。

Spring Web MVC具有以下几个主要特点:

1.Web层干净轻薄,

通俗来讲就是代码少

2.提供强大的约定大于配置的契约式编程支持(讲真小编也不怎么懂,可能类似于以往编程中的2-8原则)

3.支持灵活的本地化,主题等解析

本地化亦为国际化(i18n),打个比方,类似于将手机显示字体设置为中或英文时,再去浏览某些国际化网页,页面显示可能会有所不同

4.简单的异常处理

5.支持Restful风格(一个接口操作多个功能)

个人理解是,类似于开发一个学校的网站,该网站可能包含多个功能模块:学生信息管理,校园卡管理,图书馆管理。而两两之间必然要进行信息的交互,将其放置在一个系统中,可方便事务的管理,倘若由多个系统承担,则不能实现数据的同步。

在这里,有点类似分布式吧,倘若一个网页的浏览量过大,将业务分配到不同的服务器,可减小每个服务器承载的压力。

除此之外,特点还包括支持灵活的URL到页面控制器的映射,灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API,因理解有限,就不一一解释了。

原理:

Spring MVC是通过用户向前端控制器发送请求,前端控制器将用户的请求分发给页面控制器,控制器针对于不同模型或数据将其封装成ModelAndView,前端控制器将返回的ModelAndView与视图结合,进行视图的渲染,渲染完成后再返回给用户。

细致的讲,前端处理器DispatcherServlet将请求发送给映射处理器HandlerMapping,HandlerMapping通过反射调用方法(下文中的sayHello等方法),再将url地址交个前端控制器,DispatcherServlet又将url交给HandlerAdapter处理适配器,HandlerAdapter要去执行处理器,处理器返回ModelAndView给HandlerAdapter,HandlerAdapter将其交给前端控制器,前端控制器又根据ModelAndView,查找视图解析器ViewResolver,解析成一个view对象返回给前端控制器,控制器再将视图交给用户渲染。

开发过程:

1.将依赖的jar包引入pom.xml

2.在工程web.xml里面配置前端控制器

所有的访问都必须先访问一个servlet,这个servlet就是前端控制器。

DispatcherServlet前端控制器,是一个servlet,需采用servlet标签将其配置到工程中,是在spring基础上开发的,也是一个java bean,需将其放到ioc容器中,加载配置文件。

可对前端控制器的拦截进行设置:

(1) / 拦截所有的请求 包括 .jsp , .css ,.js ,图片,不包含jsp,一般用于开发网站

(2) *.action  *为通配符,匹配所有以.action作为结尾的链接 一般用于开发后台管理系统(用于约束)OA,ERP,CRM,类似于数据库模糊查询中的%

(3)/*表示拦截所有请求URL,包含静态资源文件,及jsp 但不推荐使用

配置好的web.xml如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

 

<display-name>Archetype Created Web Application</display-name>

<servlet>

      <servlet-name>DispatcherServlet</servlet-name>

      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

      <init-param>

          <param-name>contextConfigLocation</param-name>

          <param-value>classpath:spring/springmvc.xml</param-value>

      </init-param>

</servlet>

  

  <servlet-mapping>

        <servlet-name>DispatcherServlet</servlet-name>

        <url-pattern>*.action</url-pattern>

  </servlet-mapping>

</web-app>

3.配置spring 上下文

<?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"

xsi:schemaLocation="http://www.springframework.org/schema/beans

               http://www.springframework.org/schema/beans/spring-beans.xsd

               http://www.springframework.org/schema/context

               http://www.springframework.org/schema/context/spring-context.xsd ">

           

    <context:component-scan base-package="com.xt.mvc.helloworld.action"></context:component-scan>  

    

    <!-- 配置视图解析器 -->

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

    <property name="prefix" value="/views/"></property>

    <property name="suffix" value=".jsp"></property>

    </bean>  

</beans>

4.编写Controller文件

package com.xt.mvc.helloworld.action;

import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloController {

    @RequestMapping("/sayHello.action")  //对方法的注解,表明请求路径
    public ModelAndView sayHello(){
        //sayhello就是一个页面控制器
        ModelAndView mav = new ModelAndView();
        mav.addObject("data", "spring MVC");//添加渲染,类似数据结构map.put
        mav.setViewName("hello");//设置视图
        return mav;
    }
    //后台系统可以自动的将其封装成一个ModelAndView,自动将map封装成model
    
    @RequestMapping("/simpleWay.action")
    public String simpleWay(Model model){
        
        model.addAttribute("data"," simple spring MVC");
        return "hello";
    }
    
    @RequestMapping("/simpleWay.action")
    public String simpleWay(Map<String,Object> map){
        
        map.put("data"," simple spring MVC1");
        return "hello";
    }
    
}

倘若方法中有如下方法,若访问路径为hello.action,即使方法的注解为@RequestMapping("/hello"),也能访问到

@RequestMapping("/hello")
    public String hello(){
        System.out.println("-------hello----------");
        return "success";
    }

若还有一方法注解为@RequestMapping("/hello.action"),访问路径hello.action,则调用的是方法hello1()  
    @RequestMapping("/hello.action")
    public String hello1(){
        System.out.println("-------hello1----------");
        return "success";
    }

以上便是简单的介绍了spring MVC,谢谢阅读。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值