SpringMvc高级配置详解

来源:互联网 发布:sql case when 嵌套 编辑:程序博客网 时间:2024/05/11 21:07

1. @RequestMapping的使用
定义:@RequestMapping可以定义处理器的映射规则
理解:url路径到请求方法的映射
扩展:@RequestMapping可以定义在在类上,这样可以窄化请求路径,通俗理解就是在请求路径上增加一层目录,这样做也是必须的,在做开发的时候你不会预料到同一个项目中会有重复定义的url路径,所以在请求路径上增加一层目录是必须的。

@Controller//窄化请求映射:为防止你和你的队友在conroller方法起名的时候重名,所以相当于在url中多加了一层目录,防止重名@RequestMapping("/items")public class ItemsController {<!--查询商品列表的方法-->    @RequestMapping("/list")    public ModelAndView itemsList() throws Exception{    }}//例如:当前list的访问路径   localhost:8081/ssm0523-1/items/list.action

@ReqeustMapping使用方法二:可以限定用户请求的方式,例如post或者仅仅Get

    //@RequestMapping(value="/list", method=RequestMethod.GET)

2、controller方法的返回值(指定返回到那个页面,返回什么数据)
1)ModelAndView
modelAndView.addObject(“itemList”, list); 指定返回页面的数据
modelAndView.setViewName(“itemList”); 指定返回的页面
2)String(推荐使用)
返回普通字符串,就是页面去掉扩展名的名称, 返回给页面数据通过Model来完成
返回的字符串以forward:开头为请求转发
返回的字符串以redirect:开头为重定向
无论使用forward还是redirect都建议使用model来进行传递数据,虽然model底层使用的是request来进行实现的,但是model进行了加强,无论在forward还是redirect都能向页面传递数据。
3)返回void(使用它破坏了springMvc的结构,所以不建议使用)
可以使用request.setAttribut 来给页面返回数据
可以使用request.getRquestDispatcher().forward()来指定返回的页面
如果controller返回值为void则不走springMvc的组件,所以要写页面的完整路径名称
4)补充
相对路径:相对于当前目录,也就是在当前类的目录下,这时候可以使用相对路径跳转
绝对路径:从项目名后开始.
在springMvc中不管是forward还是redirect后面凡是以/开头的为绝对路径,不以/开头的为相对路径
例如:forward:/items/itemEdit.action 为绝对路径
forward:itemEdit.action为相对路径
3、异常处理器(未完成)
springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。
springmvc中自带了一个异常处理器叫SimpleMappingExceptionResolver,该处理器实现了HandlerExceptionResolver 接口,全局异常处理器都需要实现该接口。我们要使用这个自带的异常处理器,首先得在springmvc.xml文件中配置该处理器:
4、SpringMvc上传图片
4.1配置虚拟目录

在tomcat上配置图片虚拟目录,在tomcat下conf/server.xml中添加:<Context docBase="F:\develop\upload\temp" path="/pic" reloadable="false"/>访问http://localhost:8080/pic即可访问F:\develop\upload\temp下的图片。

4.2导入jar包

CommonsMultipartResolver解析器依赖commons-fileupload和commons-io,加入如下jar

4.3配置解析器(在SpringMvc的核心配置文件中)

    <!-- 文件上传 -->    <bean id="multipartResolver"        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">        <!-- 设置上传文件的最大尺寸为5MB -->        <property name="maxUploadSize">            <value>5242880</value>        </property>    </bean>

4.4controller方法接收并操作

//商品修改提交    @RequestMapping("/editItemSubmit")    public String editItemSubmit(Items items, MultipartFile pictureFile)throws Exception{        //原始文件名称        String pictureFile_name =  pictureFile.getOriginalFilename();        //新文件名称        String newFileName = UUID.randomUUID().toString()+pictureFile_name.substring(pictureFile_name.lastIndexOf("."));        //上传图片        File uploadPic = new java.io.File("F:/develop/upload/temp/"+newFileName);        if(!uploadPic.exists()){            uploadPic.mkdirs();        }        //向磁盘写文件        pictureFile.transferTo(uploadPic);.....

4.5页面(form添加enctype=”multipart/form-data”)

<form id="itemForm"action="${pageContext.request.contextPath }/item/editItemSubmit.action"        method="post" enctype="multipart/form-data">        <input type="hidden" name="pic" value="${item.pic }" />file的name与controller形参一致:<tr>    <td>商品图片</td>    <td><c:if test="${item.pic !=null}">            <img src="/pic/${item.pic}" width=100 height=100 />            <br />        </c:if> <input type="file" name="pictureFile" /></td></tr></form>

5,json数据交互