18.5.9,SpringMVC总结

1.springMVCspring的子项目,只需要在spring的配置文件里配置Ctroller层扫描就行。

2.创建springmvc.xml文件

3.在web.xml里配置前端控制器DispatcherServlet

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配置:

org.springframework.web.servlet.view.InternalResourceViewResolver”>

<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.自定义参数绑定(日期类型)

18.5.9,SpringMVC总结_第1张图片

需要定义一个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”>可以从这个属性中拿到一些遍历的状态。

例:${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上配置图片虚拟目录,在tomcatconf/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包。

如果不使用注解驱动就得配置json转换器。

实现27的步骤:导jackson的包,注解驱动。

28.如果加上@ResponseBody注解,就不会走视图解析器,不会返回页面,目前返回的json数据。如果不加,就走视图解析器,返回页面

29.Servlet规范含有FilterServletStruts2框架基于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/**"/>

你可能感兴趣的:(springMVC,Springmvc)