4.
springmvc-first
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
springmvc-first
*.action
一定记得配置springmvc.xml的位置
5.ModelAndView.setViewName(“/WEB-INF/jsp/itemList.jsp”);返回视图的物理地址。
6.SpringMVC的三大控件:处理器适配器,处理器映射器,视图解析器。
7.在spring的webmvc包里默认加载这些组件了。
8.处理器映射器:@ResquestMapping
注解式处理器映射器对类中标记了@requestMapping的方法进行映射。
需要在springmvc.xml文件配置处理器映射器和处理器适配器。配置这两个比较麻烦,可以在springmvc.xml中配置注解驱动
视图解析器:
使用mvc默认的InternalResourceViewResolver,支持jsp的视图解析。
在springmvc.xml配置:
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
9.ssm框架整合思路
SqlMapConfig.xml只需要有文件头即可。
10.对于ModelAndView可以被Model替代,对于返回的路径由String代替。ModelMap和Model效果一样。
11.Mvc层的方法的形参最好使用包装类,因为基本数据类型不可以为null。对于Boolean,请求的参数可以为1或0,或true或false。
12.@RequestParam(value=””,required=,defaultValue=””)AA a
required:默认是true,表示请求中必须有相应的参数,否则报错。
Defalutvalue:表示默认值。
对于表单数据而言,可使用pojo来接收参数,形参和提交的名子相同。
13.解决post乱码问题
在web.xml里配置filer
encoding
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
encoding
/*
14.filter过滤器
/*表示拦截客户端所有请求
从j2ee1.3开始,servlet规范加入了对应的过滤器的支持。
实现过滤器:写一个类继承Filter类:该类必须含有init(),doFilter(),destroy()方法。
在doFilter()对request和reqsponse进行处理,通过chain.doFilter()交给下一个控制器;
Web.xml中的filter的调用顺序从上到下。
上述解决post乱码问题:filter创建由容器提供,会调用其的init()方法,从web.xml里读取配置。(filter只会创建一次,init方法只会执行一次)。
对于get请求:String userName new
String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
Filter的声明周期:
和Servlet一样,Filter的创建和销毁由web容器负责。在容器启动时,它filter即被创建,init方法只执行一次,此后每捕捉到一个请求,便走一次doFilter方法。当应用服务被停止或重新装载了,会执行doFilter()方法。
15.自定义参数绑定(日期类型)
需要定义一个Convert原类型-目标类型。
//Converter
//S:source,需要转换的源的类型
//T:target,需要转换的目标类型
public class DateConverter implements Converter {
@Override
public Date convert(String source) {
try {
// 把字符串转换为日期类型
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
Date date = simpleDateFormat.parse(source);
return date;
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 如果转换异常则返回空
return null;
}
}
原理:前端控制器收到请求后,找到注解形式的处理器适配器@requestMapping。对requestMapping的方法进行适配。并对方法中的形参进行参数绑定。可在处理器适配器上自定义转换器Convert进行参数绑定。一般使用
16.SpringMVC的入口是一个servlet即前端控制器。
SpringMVC是基于方法开发,一个url对应一个方法。struts的类为多例。
Springmvc通过参数解析器将request请求内容解析。jip视图解析器默认使用jstl。
17.springmvc在web.xml里配置/*是真的拦截所有。
18.mvc方法的形参如果是QueryVo,那么数据提交到:属性对象.属性。
19.Ctroller绑定数组:
可以使用String[]或者QueryVo内的属性数组来接收。属性名要和提交的name相同。
接收List集合,在QueryVo的属性(List<> list)为集合对象来接收。页面例:list[0].name...name属性必须是list属性名+下标+元素属性。
20.可以从
例:${status.count} 输出行号,从1开始。
21.在接收集合时,必须用包装类来接收,不能像数组那样直接形参写集合。
22.可以限制类内所有方法的请求url前缀:在类上加注解@requestMapping(“url”)
23springmvc指定响应可以使用request来指向web-inf下的资源;
Request.getrequestDispatcher(“web-inf/jsp/....”).forword(request,response);
使用response.sendredirect(“/...”);重定向到其它ctroller
24.在方法的返回值是string的前提下,可以return重定向或者转发。
25.SpringMVC的异常处理器:
写一个类实现HandlerExceptionResolver ,在spingmvc.xml配置文件配置全局异常处理器
<bean
id="" class="该异常处理器类"/>
在异常处理器类里直接作出判断,是否为自定义异常。
26.
在tomcat上配置图片虚拟目录,在tomcat下conf/server.xml中添加:
访问http://localhost:8080/pic即可访问D:\develop\upload\temp下的图片。
文件上传配置解析器:
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5000000" />
bean>
27.@requestBody接收http请求的json数据绑定到java对象。
@responseBody使用springmvc提供的HttpMessageConvert接口转换为指定的数据格式并返回给客户端。要使用这两个注解需要导入jackson的3个jar包。
如果不使用注解驱动
实现27的步骤:导jackson的包,注解驱动。
28.如果加上@ResponseBody注解,就不会走视图解析器,不会返回页面,目前返回的json数据。如果不加,就走视图解析器,返回页面
29.Servlet规范含有Filter和Servlet,Struts2框架基于Filter过滤器实现,Springmvc基于Servlet实现,interceptor是框架自己造的。Filter只能对url进行配置,拦截器更方便,但能做的事差不多。
30.Springmvc的拦截器类似于servlet开发过程中的filter:
HandlerInterceptor接口,例:
public class HandlerInterceptor1 implements HandlerInterceptor {
// controller执行后且视图返回后调用此方法
// 这里可得到执行controller时的异常信息
// 这里可记录操作日志
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("HandlerInterceptor1....afterCompletion");
}
// controller执行后但未返回视图前调用此方法
// 这里可在返回用户前对模型数据进行加工处理,比如这里加入公用信息以便页面显示
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("HandlerInterceptor1....postHandle");
}
// Controller执行前调用此方法
// 返回true表示继续执行,返回false中止执行
// 这里可以加入登录校验、权限拦截等
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("HandlerInterceptor1....preHandle");
// 设置为true,测试使用
return true;
}
}
在springmvc.xml中配置拦截器
总结:用于登录校验!!
preHandle按拦截器定义顺序调用
postHandler按拦截器定义逆序调用
afterCompletion按拦截器定义逆序调用
postHandler在拦截器链内所有拦截器返成功调用
afterCompletion只有preHandle返回true才调用
拦截器的方法里return true是放行。
31.springmvc的资源映射:
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>