Spring MVC特点

  • 清晰地角色划分
  • 灵活的配置功能
  • 提供了大量的控制器接口和实现类
  • 真正的View层实现无关(JSP、Velocity、Xslt等)
  • 国际化支持
  • 面向接口编程
  • Spring提供了Web应用开发的一整套流程,不仅仅是MVC,他们之间可以很方便的结合一起

视图解析器

  • 将逻辑视图的名字与JSP等视图技术进行匹配
  • InternalResourceViewResolver
  • 在Web应用程序的WAR文件中查找视图模板,视图模板的路径根据加完前缀和后缀的逻辑视图名称来确定
  • prefix
  • suffix

REST风格

  • Representational State Transfer表述性状态转移
  • 传统的查、改、删的URL与REST风格的增删改URL对比
  1. /userview.action?id=12    VS    /user/12
  2. /userdelete.action?id=12   VS    /user/12/delete
  3. /userupdate.action?id=12  VS    /user/12/update
  • 请求方式
  1. GET
  2. POST
  3. DELETE
  4. PUT
  • 他强调的是一个资源可以对应多种视图

配置步骤:

  1.导入spring-web类库,

  2.配置web.xml:

  <servlet>

   <!--注意这里的名字会被spring.xml文件名引用(springMVC-servlet.xml)-->

  <servlet-name>springMVC</servlet-name>

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

   </servlet>

  <servlet-mapping>

  <servlet-name>springMVC</servlet-name>

  <url-pattern>/</url-pattern>

  </servlet-mapping>

  乱码处理:

    <filter>

     <filter-name>encodingFilter</filter-name>

    <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class>

     <init-param>

      <param-name>encoding</param-name>

       <param-value>UTF-8</param-value>

     </init-param>

    <!-- 响应也设为相同的编码 -->

    <init-param>

      <param-name>forceEncoding</param-name>

      <param-value>true</param-value>

    </init-param>

   </filter>

    <filter-mapping>

    <filter-name>encodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

   </filter-mapping>

  3.配置<springMVC>-servlet.xml,放在和web.xml同目录

方式一:BeanNameUrlHandlerMapping方式:

  <!-- 控制器bean,name为访问此控制器用的url,class为继承AbstractController的控制器类 -->

  <bean name="/index.html" class="com.zhp.controller.HelloController"></bean>

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

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

   <property name="prefix" value="/WEB-INF/jsp/"></property>

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

  </bean>

方式二:DefaultAnnotationHandlerMapping注解方式:

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

   <mvc:annotation-driven/>

视图解析器如上相同

4.跳转:

方式一:ModelAndView mav = new ModelAndView("hello");//hello会结合试图解析器的前缀和后缀来确定url

方式二:注解时,直接return "hello";即可

5.接收参数:

login(String uname)可以直接通过uname=zhang来传参

reg(@ModelAttribute Usertbl user)通过注解也可自动封装对象

Rest风格:

@RequestMapping("/update/{username}")

public String update(@PathVariable String username)//注意注解@PathVariable

6.转发数据:

方式一:通过方法中参数Model:

public String login(Model model){

model.addAttribute("uname","zhang");//页面通过${requestScope.uname}取出

}

方式二:session对象的获取:自动注入session对象

public String login(@ModelAttribute Usertbl user,Model model,HttpSession session){}

注意:页面传递参数:

1.Model----model.addAttribute("upass",upass);

2.Map<String,Object>---------map.put("user", user);

3.HttpSession----session.setAttribute("name", uname);

注意:如果指定了提交方式method=RequestMethod.GET/method=RequestMethod.POST时,springMVC会根据页面的提交方式判断提交的;

7.数据校验

JSR-303 是Java EE 6 中的一项子规范,叫做Bean Validation,官方参考实现是Hibernate Validator。

此实现与Hibernate ORM 没有任何关系。JSR 303 用于对Java Bean 中的字段的值进行验证。

spring MVC 3.x之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证。

8.异常处理

a.局部处理:

    //运行时异常处理

        @ExceptionHandler(value=RuntimeException.class)

    public String doException(RuntimeException e){

System.out.println("---RuntimeException---异常了-----"+e.getMessage());

return "error";

}

// 非运行时异常处理

@ExceptionHandler(value=Exception.class)

public String doException(Exception e){

System.out.println("---Exception---异常了-----"+e.getMessage());

return "error";

}

b.全局处理:

<!-- 异常解析器 -->

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

<property name="exceptionMappings">

<props>

<prop key="java.lang.Exception">error</prop>

</props>

</property>

</bean>

9.静态资源处理:

将静态文件指定到某个特殊的文件夹中统一处理

<mvc:resources mapping="/resources/**" location="/resources/" />

注意:mapping="/resources/**":表示映射路径,在页面应用resources映射名

location="/resources/":表示文件存放的真实路径

10.文件上传

a.导入文件上传夹包:commons-fileupload-1.2.2.jar、commons-io-2.4.jar

b.配置文件:<!-- 配置MultipartResolver,用于上传文件,使用spring的CommonsMultipartResolver -->

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<property name="maxUploadSize" value="5000000"/>

<property name="defaultEncoding" value="UTF-8"/>

</bean>

c.编写页面:<form action="upload" method="post" enctype="multipart/form-data">

<input type="submit" value="上传">

d.编写控制器类:

@Controller

public class ProductAction {

@RequestMapping("/upload")

public String upload(Product product,@RequestParam MultipartFile pic,HttpSession session){

System.out.println(pic.getOriginalFilename()+"------upload-----"+product);

//获取工程路径

String savePath=session.getServletContext().getRealPath("resources/upload");

//获取上传文件名称

String fileName=pic.getOriginalFilename();

File saveFile=new File(savePath, fileName);

//封装到对象

product.setImgSrc(fileName);

try {//实现上传,以拷贝输入流的方式实现

FileUtils.copyInputStreamToFile(pic.getInputStream(), saveFile);

} catch (IOException e) {  e.printStackTrace(); }

return "index";

}

// 多文件上传

@RequestMapping("/uploads")

public String uploads(Product product,@RequestParam MultipartFile[] pic,HttpSession session){

    //获取工程路径

    String savePath=session.getServletContext().getRealPath("resources/upload");

    for (int i = 0; i < pic.length; i++) {

      //获取上传文件名称

      String fileName=pic[i].getOriginalFilename();

      File saveFile=new File(savePath, fileName);

       try { //springMVC提供文件拷贝

      pic[i].transferTo(saveFile);

       } catch (IOException e) { e.printStackTrace();}

         }

         return "index";

   }

  }

11.SpringMVC中的JSON

@Controller

      public class ProductController {

    @Resource(name="service")

     private ProductService service;

    @RequestMapping(value="/query/{id}",method=RequestMethod.GET)

    @ResponseBody

    public Product query(@PathVariable int id){

    Product prod=service.getProductById(id);

         return prod;

       }

     }

     对应前台js:

      <script type="text/javascript" src="resources/js/jquery-1.9.1.js"></script>

      <script type="text/javascript">

     $(document).ready(function(){

     $(":button").click(function(){

    var id=$("[name=pid]").val();

    $.getJSON("query/"+id,"",function(data){

         if(data!=null && data!=""){

         $("#show").html("商品编号:"+data.pid+"<br>商品名称:"+data.pname+"<br>商品价格:"+data.price);

           }

       });

      });

      });

       </script>

 

SpringMVC的特性及应用的更多相关文章

  1. springMVC的详解

    一,springmvc注解特性 1.@Controller 控制器定义在 spring 3.0 中,通过@controller 标注即可将 class 定义为一个 controller 类.为使 sp ...

  2. ContextLoaderListener可以不写嘛?

    写了那么久的Spring,经常写这样的配置,这就是几行Spring.SpringMvc的基本配置, 但是最近也看到不写最前面的context-param以及listener的,好奇记录下. <c ...

  3. XSS攻击防御篇

    前言   上篇文章中提到了 XSS 攻击,而且,也从几个方面介绍了 XSS 攻击带来的严重影响.那么,这篇文章中,主要是针对 XSS 攻击做一个基本的防御,看看可以通过几种方式来修复这个特别常见的安全 ...

  4. Springboot注解使用总结

    使用Spring boot已经有段时间了,但是对很多注解的使用经常会遇到模糊甚至不解的地方,这次有时间便总结一下. 注解(Annotation)概念 注解是Java5开始对元数据的支持,注解与注释是有 ...

  5. Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC 配置校验器

    Spring4新特性——泛型限定式依赖注入 Spring4新特性——核心容器的其他改进 Spring4新特性——Web开发的增强 Spring4新特性——集成Bean Validation 1.1(J ...

  6. Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC

    在之前的<跟我学SpringMVC>中的<第七章 注解式控制器的数据验证.类型转换及格式化>中已经介绍过SpringMVC集成Bean Validation 1.0(JSR-3 ...

  7. springMVC第二天——高级参数绑定与其它特性

    大纲摘要: 1.高级参数绑定 a) 数组类型的参数绑定 b) List类型的绑定 2.@RequestMapping注解的使用 3.Controller方法返回值 4.Springmvc中异常处理 5 ...

  8. 转:SpringMVC 4.1 新特性(二)内容协商视图

    SpingMVC的内容协商支持三种方式: 使用后缀,如json.xml后缀和处理类型的关系可以自己定义 前面说的使用Accept头 在访问时request请求的参数,比如每次请求request都会加f ...

  9. SpringMVC视图解析器

    SpringMVC视图解析器 前言 在前一篇博客中讲了SpringMVC的Controller控制器,在这篇博客中将接着介绍一下SpringMVC视 图解析器.当我们对SpringMVC控制的资源发起 ...

  10. springmvc<一>一种资源返回多种形式【ContentNegotiatingViewResolver】

    restful服务中一个重要的特性就是一种资源可以有多种表现形式,在springmvc中可以使用ContentNegotiatingViewResolver这个视图解析器来实现这种方式. 描述资源的三 ...

随机推荐

  1. dubbo优化

    dubbo 的优化配置 在spring整合的配置文件中配置1. 超时配置在消费方调用服务方接口服务时,会发生如下超时错误,Dubbo消费方在调用服务时,超时时间默认是1000毫秒,这个时间可能比较短, ...

  2. [ABC266Ex] Snuke Panic (2D)

    Problem Statement Takahashi is trying to catch many Snuke. There are some pits in a two-dimensional ...

  3. 图片Base64相互转换

    一.简介 Base64编码是一种广泛应用于网络传输和数据存储的编码方式.在实际应用中,我们将图片转换为Base64编码,可以大大减少数据量,便于传输和存储.本文将详细介绍图片Base64编码的相互转换 ...

  4. JavaScript 文件优化指南

    本文将探讨实用的 JavaScript 文件优化技术.如何处理与 JavaScript 文件相关的性能问题以及帮助优化过程的工具.你将获得提升web应用程序速度的相关知识,从而为你的用户提供无缝体验. ...

  5. 文心一言 VS 讯飞星火 VS chatgpt (161)-- 算法导论13.1 1题

    一.用go语言,按照图 13-1(a)的方式,画出在关键字集合(1,2,-,15)上高度为 3 的完全二叉搜索树.以三种不同方式向图中加入 NIL 叶结点并对各结点着色,使所得的红黑树的黑高分别为2. ...

  6. parameterType的用法

    在mybatis映射接口的配置中,有select,insert,update,delete等元素都提到了parameterType的用法,parameterType为输入参数,在配置的时候,配置相应的 ...

  7. 【JMM内存模型-4】JMM内存模型之CPU缓存策略-jmmcpu4

    title: [JMM内存模型-4]JMM内存模型之CPU缓存策略 date: 2021-11-17 13:27:48.139 updated: 2021-12-26 17:43:10.442 url ...

  8. 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 08.创建主HUD & 自定义作弊指令

    斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本篇文章对应课程Lecture 14 ,56-58节.本篇文章将会教你将之前创建的各种UMG控件统合到一个主控件 ...

  9. 宝兰德应用服务器软件与华为云GaussDB完成兼容互认证

    摘要:北京宝兰德软件股份有限公司携手华为云完成宝兰德应用服务器软件9.5与GaussDB数据库兼容性测试,并获得华为云授予的技术认证书. 本文分享自华为云社区<宝兰德应用服务器软件与华为云Gau ...

  10. 共筑数字化未来,金山办公携手华为云完成文档中心和GaussDB适配

    摘要:金山办公携手华为云完成金山办公自主研发的"WPS文档中心系统"与华为云GaussDB相互兼容性测试认证,并获得华为云授予的<技术认证书>. 本文分享自华为云社区& ...