springMVC小记

SpringMVC 中重要组件

  1. DispatcherServlet: 前端控制器,接收所有请求(如果配置/不包
    含 jsp)
  2. HandlerMapping: 解析请求格式的.判断希望要执行哪个具体
    的方法.
  3. HandlerAdapter: 负责调用具体的方法.
  4. ViewResovler:视图解析器.解析结果,准备跳转到具体的物理视

spring容器和springMVC容器的关系

  1. Spring 容器和 SpringMVC 容器是父子容器.
  2. SpringMVC 容器中能够调用 Spring 容器的所有内容.

跳转方式

  1. 默认跳转方式请求转发.
  2. 设置返回值字符串内容
    2.1 添加 redirect:资源路径 重定向
    2.2 添加 forward:资源路径 或省略 forward: 转发

在这里插入图片描述

传参

  1. 默认保证参数名称和请求中传递的参数名相同
@RequestMapping("demo") public String demo(String name,int age){ 
  1. 如果请求参数名和方法参数名不对应使用@RequestParam()赋
public String demo(@RequestParam(value="name1") String name,@RequestParam(value="age1")int age){ 
  1. 如果方法参数是基本数据类型(不是封装类)可以通过
    @RequestParam 设置默认值.
@RequestMapping("page") public String page(@RequestParam(defaultValue="2") int pageSize,@RequestParam(defaultValue="1") int pageNumber){
  1. 如果强制要求必须有某个参数
@RequestMapping("demo2") public String demo2(@RequestParam(required=true) String name){ 
  1. rest风格,获取url中的参数
@RequestMapping(value="/user/{id}",method=RequestMethod.GET)//修改
	public String edit(@PathVariable(value="id") Integer id,Model model)

自定义拦截器

  1. 跟过滤器比较像的技术.
  2. 发送请求时被拦截器拦截,在控制器的前后添加额外功能.
    2.1 跟 AOP 区分开.AOP 在特定方法前后扩充(对 ServiceImpl)
    2.2 拦截器,请求的拦截.针对点是控制器方法.(对 Controller)
  3. SpringMVC 拦截器和 Filter 的区别
    3.1 拦截器只能拦截器 Controller
    3.2 Filter 可以拦截任何请求.
  4. 实现自定义拦截器的步骤:
    4.1 新建类实现 HandlerInterceptor

demo

public class DemoInterceptor implements HandlerInterceptor {

   // 在进入控制器之前执行
   // 如果返回值为 false,阻止进入控制器
   // 控制代码 @Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { System.out.println("arg2:"+arg2); System.out.println("preHandle"); return true; }
   
   // 控制器执行完成,进入到 jsp 之前执行. 
   // 日志记录. 
   // 敏感词语过滤 
   @Override
   public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception {
       
       System.out.println("往"+arg3.getViewName()+"跳转");
      System.out.println("model 的值  "+arg3.getModel().get("model")); String word = arg3.getModel().get("model").toString();
String newWord = word.replace("祖国", "**"); arg3.getModel().put("model", newWord);
// arg3.getModel().put("model", "修改后的内容");
System.out.println("postHandle"); }

 //jsp 执行完成后执行 
 //记录执行过程中出现的异常.
 //可以把异常记录到日志中
  @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {
System.out.println("afterCompletion"+arg3.getMessag e()); } }

在 springmvc.xml 配置拦截器需要拦截哪些控制器

  1. 拦截所有控制器
<mvc:interceptors> <bean class="com.bjsxt.interceptor.DemoInterceptor"></bean>
</mvc:interceptors>
  1. 拦截特定的的 url
<mvc:interceptors> 
	<mvc:interceptor>
	   <mvc:mapping path="/demo"/> 
	   <mvc:mapping path="/demo1"/>  
	   <mvc:mapping path="/demo2"/> 
	   <bean class="com.bjsxt.interceptor.DemoInterceptor"></bean>  
	 </mvc:interceptor>
</mvc:interceptors>

拦截器栈

  1. 多个拦截器同时生效时,组成了拦截器栈
  2. 顺序:先进后出.
  3. 执行顺序和在 springmvc.xml 中配置顺序有关
  4. 设置先配置拦截器 A 在配置拦截器 B 执行顺序为
    preHandle(A)–> preHandle(B)–> 控制器方法 -->postHandle(B)
    –>postHanle(A)–>JSP–>afterCompletion(B)–>afterCompletion(A)

SpringMVC 运行原理

如果在 web.xml 中设置 DispatcherServlet 的为/时,当用户
发 起 请 求 , 请 求 一 个 控 制 器 , 首 先 会 执 行 DispatcherServlet. 由DispatcherServlet 调 用 HandlerMapping 的DefaultAnnotationHandlerMapping 解 析 URL, 解 析 后 调 用HandlerAdatper 组 件 的 AnnotationMethodHandlerAdapter 调 用Controller 中的 HandlerMethod.当 HandlerMethod 执行完成后会返回View,会被 ViewResovler 进行视图解析,解析后调用 jsp 对应的.class 文件并运行,最终把运行.class 文件的结果响应给客户端.

SpringMVC 对 Date 类型转换

  1. 在 springmvc.xml 中配置,代码中不需要做任何修改
    1.1 必须额外导入 joda-time.jar
    1.2 时间类型 java.sql.Date
<mvc:annotation-driven conversion-service="conversionService">     
</mvc:annotati on-driven>

<bean id="conversionService"
class="org.springframework.format.support.Formattin gConversionServiceFactoryBean"> 
	<property name="registerDefaultFormatters" value="false" /> 
	<property name="formatters"> 
	<set>
	 <bean
	class="org.springframework.format.number.NumberForm atAnnotationFormatterFactory" /> 
	</set> 
	</property>
	 <property name="formatterRegistrars"> 
	<set>
	 <bean
	class="org.springframework.format.datetime.joda.Jod aTimeFormatterRegistrar">
	<property name="dateFormatter"> <bean
	class="org.springframework.format.datetime.joda.Dat eTimeFormatterFactoryBean">
	 <property name="pattern" value="yyyy-MM-dd" />
	 </bean>
	 </property> 
	</bean> 
	</set> 
	</property> 
</bean>

  1. 使 用 注 解 . 在 需 要 转 换 的 参 数 或 实 体 类 属 性 上 添 加@DateTimeFormatter(pattern=”表达式”)
    2.1 使用 Date 参数接收
@RequestMapping("demo") 
public String demo(@DateTimeFormat(pattern="yyyy-MM-dd") Date time){ 
     
     System.out.println(time); return "abc.jsp";
 }

2.2 在实体类中

public class Demo1 { @DateTimeFormat(pattern="yyyy/MM/dd") private Date time;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值