springmcv
springmcv创建springmvc的动态项目1在动态的web工程中配置springmvc的前端控制器配置在web.xml中dispatcherServletorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:springmvc.xml1dispatcherServlet/2创建spri
springmcv
创建springmvc的动态项目
1在动态的web工程中配置springmvc的前端控制器
配置在web.xml中
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
2创建springmvc.xml文件 配置基础扫描和视图解析器
<context:component-scan base-package=“com.hd.cyz.web” ></context:component-scan>
简单系统就能运行 但是开发中还需要很多
对静态资源文件的访问
<mvc:default-servlet-handler />
静态资源映射
<mvc:resources mapping="/static/**" location="/static/" cache-period=“31536000”/>
定义无Controller的path<->view直接映射
<mvc:view-controller path="/" view-name=“redirect:${web.view.index}”/>
<mvc:annotation-driven />
<mvc:annotation-driven /> 会自动注册RequestMappingHandlerMapping
、RequestMappingHandlerAdapter 与 ExceptionHandlerExceptionResolver 三个bean。
• 还将提供以下支持:
– 支持使用 ConversionService 实例对表单参数进行类型转换
– 支持使用 @NumberFormat annotation、@DateTimeFormat
注解完成数据类型的格式化
– 支持使用 @Valid 注解对 JavaBean 实例进行 JSR 303 验证
– 支持使用 @RequestBody 和 @ResponseBody 注解
常用注解
@Controller
@RequestMapping
@RequestMapping 除了可以使用请求 URL 映射请求外,
还可以使用请求方法、请求参数及请求头映射请求
• @RequestMapping 的 value、method、params 及 heads
分别表示请求 URL、请求方法、请求参数及请求头的映射条
件,他们之间是与的关系,联合使用多个条件可让请求映射
更加精确化。
• params 和 headers支持简单的表达式:
– param1: 表示请求必须包含名为 param1 的请求参数
– !param1: 表示请求不能包含名为 param1 的请求参数
– param1 != value1: 表示请求包含名为 param1 的请求参数,但其值
不能为 value1
– {“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2
的两个请求参数,且 param1 参数的值必须为 value1
@RequestMapping(value = “testParamsAndHeaders”, params = { “username”,
“age!=10” }, headers = { “Accept-Language=en-US,zh;q=0.8” })
public String testParamsAndHeaders() {
return “”;
}
@RequestParam
在处理方法入参处使用 @RequestParam 可以把请求参
数传递给请求方法
– value:参数名
– required:是否必须。默认为 true, 表示请求参数中必须包含对应
的参数,若不存在,将抛出异常
@RequestMapping(value = “/testRequestParam”)
public String testRequestParam(
@RequestParam(value = “username”) String un,
@RequestParam(value = “age”, required = false, defaultValue = “0”) int age) {
return “”;
}
@RequestHeader
请求头包含了若干个属性,服务器可据此获知客户端的信息,通过 @RequestHeader 即可将 请求头中的属性值绑定到处理方法的入参中
@RequestMapping("/testRequestHeader")
public String testRequestHeader(
@RequestHeader(value = “Accept-Language”) String al) {
return “”;
}
如果返回的字符串中带 forward: 或 redirect: 前缀时,SpringMVC 会对他们进行特殊处理:将 forward: 和redirect: 当成指示符,其后的字符串作为 URL 来处理
– redirect:success.jsp:会完成一个success.jsp 的重定向的操作
– forward:success.jsp:会完成一个到 success.jsp 的转发操作
@InitBinder
• 由 @InitBinder 标识的方法,可以对 WebDataBinder 对象进行初始化。WebDataBinder 是 DataBinder 的子类,用于完成由表单字段到 JavaBean 属性的绑定
• @InitBinder方法不能有返回值,它必须声明为void。
• @InitBinder方法的参数通常是是 WebDataBinder
用法如下 作用是单独处理JavaBean的某个属性
@InitBinder
public void initBinder(WebDataBinder binder){
// binder.setDisallowedFields("lastName");
}
rest运用
web.xml中配置
HiddenHttpMethodFilter
org.springframework.web.filter.HiddenHttpMethodFilter
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
HiddenHttpMethodFilter的作用:浏览器 form 表单只支持 GET与 POST 请求,而DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器,可以将这些请求转换为标准的 http 方法,使得支持 GET、POST、PUT 与DELETE 请求
@RequestMapping(value = “/restname/{id}”, method = RequestMethod.GET)
public String restname(@PathVariable int id) {
return"";
}
@RequestMapping(value = “/testRest/{id}”, method = RequestMethod.DELETE)
public String testRestDelete(@PathVariable Integer id) {
System.out.println("testRest Delete: " + id);
return “”;
}
DELETE PUT 前端需要注意
<form action="springmvc/testRest/1" method="post">
<input type="hidden" name="_method" value="DELETE"/>
<input type="submit" value="TestRest DELETE"/>
</form>
处理模型数据
ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据
– Map 及 Model: 入参为org.springframework.ui.Model、org.springframework.ui.ModelMap 或 java.uti.Map 时,处理方法返回时,Map中的数据会自动添加到模型中。
– @SessionAttributes: 将模型中的某个属性暂存到HttpSession 中,以便多个请求之间可以共享这个属性
– @ModelAttribute: 方法入参标注该注解后, 入参的对象就会放到数据模型中
springmvc提供的一些view标签
taglib prefix=“form” uri=“http://www.springframework.org/tags/form”
form:form
form:input
form:hidden
注意以上标签没有name属性 有path属性 这里有几个需要注意点 path会自动回传值 如果找不到对应属性会报错 所以需要传入ModelAttribute
<form:select path=“department.id” items="${departments }" itemLabel=“departmentName” itemValue=“id”></form:select>
<form:radiobuttons />
Excel 视图
• 若希望使用 Excel 展示数据列表,仅需要扩展SpringMVC 提供的 AbstractExcelView 或 AbstractJExcel View 即可。实现 buildExcelDocument()
方法,在方法中使用模型数据对象构建 Excel 文档就可以了。
• AbstractExcelView 基于 POI API,而 AbstractJExcelView 是基于 JExcelAPI 的。
• 视图对象需要配置 IOC 容器中的一个 Bean,使用BeanNameViewResolver 作为视图解析器即可
• 若希望直接在浏览器中直接下载 Excel 文档,则可以设置响应头 Content-Disposition 的值为
attachment;filename=xxx.xls
springmvc的数据校验
提供的注解
代码中用法
public String save(@Valid Employee employee, Errors result)
1 这里需要注意两点 必须用 @Valid 这个注解修饰入参的bean
2 错误信息入参可以用Errors或者BindingResule
3 用错误信息入参来判断是否有错 有错之后返回页面
比如:if(result.getErrorCount() > 0){
return “”;
}
4 页面接收错误信息
比如 <form:input path=“email”/>
<form:errors path=“email”></form:errors>
5 加入需要jar包
6 在 SpringMVC 配置文件中添加 <mvc:annotation-driven /> 这个配置上面有提到 作用中提到校验
文件的上传和下载
springmvc中配置multipartResolver
代码中用@RequestParam(“file”) MultipartFile file接收MultipartFile提供很多属性方法可以实现上传
下载用 ResponseEntity<byte[]>
拦截器
第一种配置 在mvc:interceptors标签中加入mvc:interceptor标签 mvc:interceptor标签提供<mvc:exclude-mapping和<mvc:mapping属性标签 作用是提供拦截的路劲<bean配置拦截器路劲
mvc:interceptors
mvc:interceptor
<mvc:exclude-mapping path="${adminPath}/login"/>
<mvc:mapping path="/*"/>
</mvc:interceptor>
</mvc:interceptors>
第二种配置 全局拦截器
mvc:interceptors
</mvc:interceptors>
拦截器写法
自定义拦截器并实现 implements HandlerInterceptor 提供三个需要实现的方法
/**
* 该方法在目标方法之前被调用.
* 若返回值为 true, 则继续调用后续的拦截器和目标方法.
* 若返回值为 false, 则不会再调用后续的拦截器和目标方法.
*/
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
/***
要实现的功能
**/
return true;
}
/**
* 调用目标方法之后, 但渲染视图之前.
* 可以对请求域中的属性或视图做出修改.
/
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
/**
要实现的功能
/
}
/
* 渲染视图之后被调用. 释放资源
/
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
/**
要实现的功能
**/
}
更多推荐
所有评论(0)