1.从路径中取变量值
<a href="${ pageContext.request.contextPath }/user/user001/order001">pathVarible</a></br>
java代码
@RequestMapping(value="user/{name}/{orderId}",method=RequestMethod.GET)
public String pathVariable(@PathVariable("name") String userName,@PathVariable("orderId") String orderId){
System.out.println("userId"+userName);
System.out.println("orderId"+orderId);
return "ok";
}
2.requestParam参数绑定
前台:
<a href="${ pageContext.request.contextPath }/user/requestParm?id=9">requestParm1</a></br>
后台:
@RequestMapping(value="/user/requestParm")
public String requestParm(@RequestParam(value="id",defaultValue="defaultValue",required=true) String id){
System.out.println(id);
return "ok";
}
required:参数是否必须填写.为true时不填会报错
defaultValue=xxx 不填默认值为xxx
3,requestHeader,cookieValue.接收请求头里的参数值
@RequestMapping(value="/user/requestHeader")
public String requestHeader(@RequestHeader("Host")String Host,@RequestHeader("Connection")String Connection){
System.out.println(Host);
System.out.println(Connection);
return "ok";
}
@RequestMapping(value="/user/cookieValue")
public String cookieValue(@CookieValue("JSESSIONID")String sessionId){
System.out.println(sessionId);
return "ok";
}
4.@ModelAttribute
@ModelAttribute用在方法上无返回值时,在执行controller里的其他的每个方法之前会先调用此方法
@ModelAttribute
public void modelAttribute(){
System.out.println("modeAttribute执行le-----");
}
@ModelAttribute用在方法上有返回值时,在执行controller里的其他的每个方法之前会先调用此方法,且可以在前台取到返回的值.
@ModelAttribute
public String modelAttribute(){
System.out.println("modeAttribute执行le-----");
return "index";
}
前台取值:${ string }
@ModelAttribute
public User modelAttribute(){
User user=new User("zhnagsan",23);
System.out.println("modeAttribute执行le-----");
return user;
}
前台取值:${ user
}@ModelAttribute若指定了value,则取值时名字为value
@ModelAttribute(value="modelName")
public String modelAttribute(){
System.out.println("modeAttribute执行le-----");
return "index";
}
前台取值${
modelName}
注释在方法内部参数上
@ModelAttribute("user")
public User addUser() {
return new User("张三","123");
}
@RequestMapping(value = "/helloWorld")
public String helloWorld(@ModelAttribute("user") User user) {
return "helloWorld";
}
下面方法的user是从上面的是从上面addUser方法中获取的
- public class MyInterceptor1 extends HandlerInterceptorAdapter {
5.springMVC拦截器
拦截器参考文章:http://blog.csdn.net/eson_15/article/details/51749880
http://jinnianshilongnian.iteye.com/blog/1670856
springmvc.xml中配置
<!-- 配置拦截器 -->
<mvc:interceptors>
<!-- 针对所有的路径配置拦截器 -->
<bean class="interceptor.allInterCeprtor"/>
<mvc:interceptor>
<!-- 针对特定路径配置的拦截器 -->
<mvc:mapping path="/helloWorld"/>
<bean class="interceptor.myInterCeprtor"/>
</mvc:interceptor>
</mvc:interceptors>
自定义拦截器实现interceptorHandler接口
public class MyInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handle) throws Exception {
//访问登录页面放行
if(request.getServletPath().startsWith(myContanst.LOGINURL)){
return true;
}
//已经登录放行
if(request.getSession().getAttribute("user")!=null){
return true;
}
//未登录,访问其他页面,非法url跳转到登录页面
response.sendRedirect(request.getContextPath()+"/"+myContanst.LOGINURL);
return false;
}
}
有时候我们可能只需要实现三个回调方法中的某一个,如果实现
HandlerInterceptor接口的话,三个方法必须实现,不管你需不需要,此处一般继承HandlerInterceptorAdapter适配器即可 ,允许我们只实现需要的回调方法。
- public class MyInterceptor1 extends HandlerInterceptorAdapter {
6.springmvc异常处理
http://blog.csdn.net/eson_15/article/details/51731567
public class MyExecption implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("err.jsp");
modelAndView.setViewName("err");
return modelAndView;
}
}
springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 扫描controller -->
<context:component-scan base-package="com.test.controller" />
<context:component-scan base-package="interceptor" />
<context:component-scan base-package="exception" />
<!-- 配置注解驱动,如果配置此标签可以不用配置处理器映射器和适配器 -->
<mvc:annotation-driven />
<!-- 配置通用的视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
</bean>
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 针对特定路径配置的拦截器 -->
<mvc:mapping path="/helloWorld"/>
<bean class="interceptor.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
<!-- 异常处理 -->
<bean id="" class="exception.MyExecption"></bean>
</beans>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
7.文件上传
<form action="${ pageContext.request.contextPath }/user/upload" method="post" enctype="multipart/form-data">
<input type="file" name="partFile" value="上传">
<input type="submit" value="提交">
</form>
@RequestMapping("/user/upload")
public String upload(HttpServletRequest requese,MultipartFile partFile) throws IllegalStateException, IOException{
String originalFilename = partFile.getOriginalFilename();
if(originalFilename.endsWith(".txt")||originalFilename.endsWith(".jpg")){
File file = new File("D:\\a\\"+originalFilename);
partFile.transferTo(file);
return "ok";
}
return "ok";
}
springmvc.xml
<!-- 文件上传 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为5MB -->
<property name="maxUploadSize">
<value>5242880</value>
</property>
</bean>
=================================================================
SpringMVC日期处理
前台:
<form action="${pageContext.request.contextPath }/user/testUser">
姓名:<input type="text" name="userName" ><br>
密码:<input type="password" name="passWord"></br>
生日:<input type="date" name="birth"></br>
<input type="submit" value="提交">
</form>
java:
@RequestMapping("/user/testUser")
public String testUser(User user){
System.out.println(user.getBirth());
return "ok";
}
1.可以在实体类上加上注解@DateTimeFormat(pattern = "yyyy-MM-dd")
private String userName;
private String passWord;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birth;
2.可在controller中加上方法
@InitBinder
public void initBinder(WebDataBinder binder){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 严格限制日期转换
sdf.setLenient(false);
//true:允许输入空值,false:不能为空值
binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true));
}
3.配置converter
import org.springframework.core.convert.converter.Converter;
public class DateConvert implements Converter<String, Date> {
@Override
public Date convert(String source) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
return simpleDateFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
springmvc.xml
<!-- 配置注解驱动,如果配置此标签可以不用配置处理器映射器和适配器 -->
<mvc:annotation-driven conversion-service="conversionService" />
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="convert.DateConvert"/>
</set>
</property>
</bean>