SpringMVC运行流程

下面是整个运行流程:

  1. 发送请求
  2. springDispatcherServlet的url-pattern
  3. SpringMVC中是否存在对应映射(@RequestMapping注解映射)
    (3.1)如果没有映射,就看是否配置<mvc:default-servlet-handler/>
    (3.1.1)如果没有配置控制台返回错误没有映射,并返回404页面
    (3.1.2) 如果有配置,就查找目标资源,控制台不会返回没有映射的错误
    (3.2) 如果有映射,由HandlerMapping获取HandlerExecutionChain对象 获取HandlerAdapter对象
  4. 调用拦截器的preHandler方法
  5. 调用目标Handler的目标方法,获取ModlerAndView对象
  6. 调用拦截器的postHandler方法 看是否出现异常,如果有异常就由HandlerExceptionResolver处理异常
  7. 用视图解析器解析ModlerAndView
  8. 渲染视图

下面是一些细节的处理和使用:

配置都是在springmvc.xml中配置的

<!-- 配置DispatcherServlet -->
	<servlet>
		<servlet-name>springmvc123</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- 修改配置文件路径和名称 -->
		<!-- 配置DispatcherServlet的一个初始化参数:配置springMVC配置文件的位置和名称 -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc.xml</param-value>
		</init-param>
		<!-- 自启动 -->
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>springmvc123</servlet-name>
		<url-pattern>/</url-pattern>		<!-- 配置那些请求可以给到servlet -->
	</servlet-mapping>
<!--配置视图解析器--!>
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    	<property name="prefix" value="/"></property>
    	<property name="suffix" value=".jsp"></property>
	</bean>
	<!--可以用来处理静态资源--!>
	<mvc:default-servlet-handler/>
	<!--配置自定义拦截器--!>
	<mvc:interceptors>
		<bean>
			Interceptor
		</bean>
	</mvc:interceptors>

自定义拦截器
自定义的拦截器必须实现HandlerInterceptor接口

  • preHandler:在目标方法之前调用,若返回值是true,则继续调用后序的拦截器和目标方法;若返回值是false,则不在调用后序的拦截器和目标方法。
    可以考虑做权限,日志,事务等
  • postHandler:调用目标方法之后,渲染视图之前。
    可以对请求域中的属性或视图进行修改
  • afterCompletion:渲染视图之后。
    释放资源。

异常处理

  • @ExceptionHandler标记的方法的入参中可以加入Exception类型的参数,该参数及对应发生的异常对象
  • @ExceptionHandler标记的方法的入参中不能传入Map,若希望把异常信息传导页面中,需要使用ModleAndView作为返回值
  • @ExceptionHandler标记的方法标记的异常有优先级问题,先是最匹配的,在退其次
  • 如果当前handler中找不到@ExceptionHandler标记的方法来处理方法出现的异常,则将去@ControllerAdvice标记的类中查找@ExceptionHandler标记的方法来处理异常。
  • @ResponseStatus标记方法,正确还是会显示value和reason的值。
    Value:页面显示的状态码,reason:页面显示的错误消息。
  • @ResponseStatus标记类,错误,抛出异常显示,
    Value:页面显示的状态码,reason:页面显示的错误消息。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值