SpringMVC使用的几个要点

1.使用 @RequestParam("username") 来对应参数名的时候,这个参数必须要传入,否则会报错。没加@RequestParam则可传可不传

    @RequestMapping("/index")
    public String index(@RequestParam("username") String username, String password) {
        System.out.println(username);
        System.out.println(password);
        return "test/index";
    }

2.向页面传值,可以用Map也可以用Model,通常都用Model

    @RequestMapping("/index2")
    public String index2(String username, Map<String, Object> context) {
        System.out.println(username);
        context.put("username", username);
        return "test/index";
    }

    @RequestMapping("/index3")
    public String index3(String username, Model model) {
        // System.out.println("id:" + id);
        System.out.println(username);
        model.addAttribute("username", "username");
        // 只有一个参数,默认key就是小写的对象名称
        model.addAttribute(new Article());
        return "test/index";
    }

页面:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>test ${username }
${article.id }
</body>
</html>

3. method = RequestMethod.GET 代表get方式访问

    @RequestMapping(value = "/index4", method = RequestMethod.GET)
    public String index4(String username, Model model) {
        // System.out.println("id:" + id);
        System.out.println(username);
        model.addAttribute("username", "username");
        // 只有一个参数,默认key就是小写的对象名称
        model.addAttribute(new Article());
        return "test/index";
    }

4. 通过url传值用 @PathVariable  @RequestMapping value可以直接支持多级目录的路径,不像asp.net mvc需要在global.asax中设置路由

    // www.url.com/test/p1 读取url的地址作为参数
    @RequestMapping(value = "/{username}", method = RequestMethod.GET)
    public String show(@PathVariable String username) {
        System.out.println(username);
        return "test/index";
    }

    // www.url.com/test/p1 读取url的地址作为参数
    @RequestMapping(value = "/update/{id}", method = RequestMethod.GET)
    public String show2(@PathVariable String id) {
        System.out.println("show2 " + id);
        return "test/index";
    }

    @RequestMapping(value = "/update/detail/{id}", method = RequestMethod.GET)
    public String show3(@PathVariable String id) {
        System.out.println("show3 " + id);
        return "test/index";
    }

5. (1) 可以通过 bean-validator.jar 对springMVC 做服务端校验,校验时@Validated Menu menu, BindingResult br 参数必须写在一起

    @NotEmpty(message="菜单名单不能为空")
    public String getMenuname() {
        return menuname;
    }

(2) springMVC上传文件需要使用commons-io-2.2.jar、commons-fileupload-1.3.1.jar两个jar包

配置文件中需要加入bean代码

<!-- 设置multipartResolver才能完成文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 限制文件最大值为5M -->
<property name="maxUploadSize" value="5000000"></property>
</bean>

    @RequestMapping(value = "/menuadd", method = RequestMethod.POST)
    public String menuadd(@Validated Menu menu, BindingResult br,@RequestParam("attachs") MultipartFile[] attachs, HttpServletRequest req) throws IOException {// 紧跟Validated写验证结果类
        System.out.println(menu.getMenuid() + " " + menu.getMenuname());
        if (br.hasErrors()) {
            System.out.println("验证不通过");
            return "redirect:/test/menuadd";// 客户端跳转
        }
        for (MultipartFile attach : attachs) {
            if (attach.isEmpty())
                continue;

            System.out.println(attach.getName() + "," + attach.getOriginalFilename() + "," + attach.getContentType());
            String path = req.getSession().getServletContext().getRealPath("/WEB-INF/resources/upload");
            System.out.println(path);
            File file = new File(path + "/" + attach.getOriginalFilename());
            FileUtils.copyInputStreamToFile(attach.getInputStream(), file);
        }

        return "redirect:/test/index2";// 客户端跳转
    }

页面:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
<%@taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

<sf:form method="post" modelAttribute="menu" enctype="multipart/form-data">
menuid:<input type="text" name="menuid"><br/>
menuname:<input type="text" name="menuname"><br>
<sf:errors path="menuname"></sf:errors><br/>
file1:<input type="file" name="attachs"><br/>
file2:<input type="file" name="attachs"><br/>
file3:<input type="file" name="attachs"><br/>
<input type="submit" value="提交">
</sf:form>

</body>
</html>

6.跳转页面可以使用  return "redirect:/test/index2";  // 客户端跳转

时间: 2024-10-10 18:04:18

SpringMVC使用的几个要点的相关文章

SpringMvc要点总结

一.介绍 SpringMvc属于SpringFrameWork的后续产品,应用了MVC设计模式的一个显示层框架. 二.特点 1.MVC 三.使用步骤 在核心配置文件中添加以下前三条: 1.添加@Controller注解扫描 2.添加mvc注解驱动 3.配置视图解析器 4.在web.xml中添加SpringMvc前端控制器.[编码过滤器] 原文地址:https://www.cnblogs.com/yhj-notes/p/9743346.html

SpringMVC源码分析(3)DispatcherServlet的请求处理流程

<SpringMVC源码分析(1)标签解析>:介绍了解析过程中,初始化若干组件. <SpringMVC源码分析(2)DispatcherServlet的初始化>:初始化DispatcherServlet的多个组件. 本文继续分析DispatcherServlet解析请求的过程. 概览 ①:DispatcherServlet是springmvc中的前端控制器(front controller),负责接收request并将request转发给对应的处理组件. ②:HanlerMappi

【SpringMVC学习07】SpringMVC中的统一异常处理

我们知道,系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手段减少运行时异常的发生.在开发中,不管是dao层.service层还是controller层,都有可能抛出异常,在springmvc中,能将所有类型的异常处理从各处理过程解耦出来,既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护.这篇博文主要总结一下SpringMVC中如何统一处理异常. 1. 异常处理思路 首先来看一下在spr

springMVC原理

1.springmvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作. 2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller. 3.DispatcherServlet请请求提交到目标Controller 4.Controller进行业务逻辑处理后,会返回一个ModelAndView 5.Dispathcher查询一个或多个ViewResolver视图解析器,找到Mo

SpringMVC源码剖析(四)- DispatcherServlet请求转发的实现

SpringMVC完成初始化流程之后,就进入Servlet标准生命周期的第二个阶段,即“service”阶段.在“service”阶段中,每一次Http请求到来,容器都会启动一个请求线程,通过service()方法,委派到doGet()或者doPost()这些方法,完成Http请求的处理. 在初始化流程中,SpringMVC巧妙的运用依赖注入读取参数,并最终建立一个与容器上下文相关联的spring子上下文.这个子上下文,就像Struts2中xwork容器一样,为接下来的Http处理流程中各种编程

蓝缘管理系统第二个版本开源了。springMVC+springSecurity3.x+Mybaits3.x 系统

蓝缘管理系统第二个版本开源了 继于 http://blog.csdn.net/mmm333zzz/article/details/16863543 版本一.版本二 对springMVC+springSecurity3.x+Mybaits3.x的权限系统 进行很多优化方面,继续进行开源,. 预览地址:http://www.lanoss.com      多谢群友们的支持,该网站是用到啊里云服务+香港主机,希望大家继续支持捐 助!群主支付账号 [email protected] 捐助时,记得备注!谢

SpringMVC学习资料

一.SpringMVC 1.helloworld 1.导包 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.spr

SSM(springmvc+spring+mybatis)整合过程

问题?SSM(springmvc+spring+mybatis)整合过程 一.SSM框架比较S2SH框架的优缺点比较 站在个人使用这两个框架的观点儿上来说的话,我觉得这个不能定死的说,常用的S2SH,SpringMVC等,还可以考虑jFinal. 首先说S2SH,这个是用的比较多的,特别是在中小型项目中,针对大型项目就不行了,是Struts和hibernate过于庞大,过于重量级,项目大了之后配置文件多的也是麻烦事,配置文件多了之后一方面不好操作,另外比较蛋疼的是没法断点调试,特别是对底层数据库

SpringMVC深度探险(三) —— DispatcherServlet与初始化主线

本文是专栏文章(SpringMVC深度探险)系列的文章之一,博客地址为:http://downpour.iteye.com/blog/1341459. 在上一篇文章中,我们给出了构成SpringMVC应用程序的三要素以及三要素的设计过程.让我们来归纳一下整个设计过程中的一些要点: SpringMVC将Http处理流程抽象为一个又一个处理单元 SpringMVC定义了一系列组件(接口)与所有的处理单元对应起来 SpringMVC由DispatcherServlet贯穿始终,并将所有的组件串联起来