springMVC 获取本地项目路径 以及上传文件的方法整理

本贴最后更新于 2681 天前,其中的信息可能已经斗转星移

SpringMVC 是一个基于 DispatcherServlet 的 MVC 框架,每一个请求最先访问的都是 DispatcherServlet,DispatcherServlet 负责转发每一个 Request 请求给相应的 Handler,Handler 处理 以后再返回相应的视图(View)和模型(Model),返回的视图和模型都可以不指定,即可以只返回 Model 或只返回 View 或都不返回。在使用注解 的 SpringMVC 中,处理器 Handler 是基于 @Controller 和 @RequestMapping 这两个注解的,@Controller 声明 一个处理器类,@RequestMapping 声明对应请求的映射关系,这样就可以提供一个非常灵活的匹配和处理方式。

DispatcherServlet 是继承自 HttpServlet 的,既然 SpringMVC 是基于 DispatcherServlet 的,那么 我们先来配置一下 DispatcherServlet,好让它能够管理我们希望它管理的内容。HttpServlet 是在 web.xml 文件中声明的。

一、从视图向 controller 传递值, controller <— 视图

1、通过 @PathVariabl 注解获取路径中传递参数

1 @RequestMapping(value = "/{id}/{str}")
2 public ModelAndView helloWorld(@PathVariable String id,
3 @PathVariable String str) {
4 System.out.println(id);
5 System.out.println(str);
6 return new ModelAndView("/helloWorld");
7 }

2、

1)简单类型,如 int, String, 应在变量名前加 @RequestParam 注解,
例如:

   @RequestMapping("hello3")
   public String hello3( @RequestParam("name" ) String name,
                           @RequestParam("hobby" ) String hobby){
        System. out.println("name=" +name);
        System. out.println("hobby=" +hobby);      
         return "hello" ;
  }

但这样就要求输入里面必须有这两个参数了,可以用 required=false 来取消,例如:
@RequestParam(value=”name”,required=false) String name
但经测试也可以完全不写这些注解,即方法的参数写 String name,效果与上面相同。

2)对象类型:

   @RequestMapping("/hello4" )
   public String hello4(User user){
        System.out.println("user.getName()=" +user.getName());
        System.out.println("user.getHobby()=" +user.getHobby());
        return "hello";
  }

Spring MVC 会按:
“HTTP 请求参数名= 命令/表单对象的属性名”
的规则自动绑定请求数据,支持“级联属性名”,自动进行基本类型数据转换。
此外,还可以限定提交方法为 POST,即修改方法的 @RequestMapping 注解为
@RequestMapping(value=”/hello4″,method=RequestMethod.POST)

最后,注意,如果这里提交过来的字符出现乱码,应该在 web.xml 里加入如下 filter:

encodingFilter
org.springframework.web.filter.CharacterEncodingFilter

  encoding
  utf8

encodingFilter
/*

返回数据到页面几种方式:

  1.  //返回页面参数的第二种方式,在形参中放入一个Model  
     @RequestMapping(value = "/hello2.htm")  
     public String hello2(int id,Model model){  
         System.out.println("hello2 action:"+id);  
         model.addAttribute("name", "huangjie");  
         //这个只有值没有键的情况下,使用Object的类型作为key,String-->string  
         model.addAttribute("ok");  
         return "hello";  
     }
    
  2. //返回页面参数的第一种方式,在形参中放入一个map  
     @RequestMapping(value = "/hello1.htm")  
     public String hello(int id,Map map){  
         System.out.println("hello1 action:"+id);  
         map.put("name", "huangjie");  
         return "hello";  
     } 
    
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    941 引用 • 1458 回帖 • 153 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 627 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    6537 引用 • 29395 回帖 • 246 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    85 引用 • 895 回帖
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 2 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 38 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1083 引用 • 3461 回帖 • 286 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    21 引用 • 37 回帖 • 513 关注
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 590 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    76 引用 • 390 回帖
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 641 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    57 引用 • 22 回帖 • 4 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    123 引用 • 168 回帖
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    10 引用 • 85 回帖
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    75 引用 • 145 回帖
  • 分享

    有什么新发现就分享给大家吧!

    242 引用 • 1747 回帖 • 1 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    82 引用 • 122 回帖 • 617 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 399 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    122 引用 • 73 回帖
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 23 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 2 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 177 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 522 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 346 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    84 引用 • 139 回帖