SpringMVC自定义处理器里的那些事
来源:互联网 发布:qq飞车暗风暴数据 编辑:程序博客网 时间:2024/04/29 16:09
一、如何让一个普通类成为Controller?
①:实现接口Controller
解析:handleRequest(request,response)
②:继承AbstractController
解析:handleRequestInternal(request,response)
若处理器继承自AbstractController类,那么该控制器就具有了一些新功能。因为AbstractController类还继承自一个父类WebContentGenerator,WebContentGenerator具有supportMethods属性
部分源码实现:
原理:
发现AbstractController类中有一个handleRequest()方法,用到了模板方法设计模式。
保证该方法中去调度了一个抽象方法。抽象方法在子类中根据业务需求被重写。
applicationContext.xml:
还可以设置支持的HTTP数据提交方式。默认支持GET/POST/HEAD,限定请求提交方式。
地址栏默认的是GET请求,输入的Post请求则报405。(高大上的405)
二、如果想在一个Controller中定义N个方法,让他们分别执行,如何实现?[继承自MultiActionController]
其次该如何去匹配这些方法?在这里引出一个方法名称解析器[MethodNameResolver]。
作用:将url地址中的资源路径和方法名称做一一对应
在MultiActionController中有一个成员变量
private MethodNameResolver methodNameResolver = new InternalPathMethodNameResolver();
MethodNameResolver接口:
两大实现类:
①InternalPathMethodNameResolver---在请求地址中指定方法名称
②PropertyMethodNameResolver
第一种方案关键代码:[InternalPathMethodNameResolver]
<bean
class
=
"org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"
>
<property name=
"mappings"
>
<props>
<prop key=
"/*.do"
>firstController</prop>
</props>
</property>
</bean>
<!-- 默认方法名称解析器-->
<bean id=
"nameResolver"
class
=
"org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver"
></bean>
<bean id=
"firstController"
class
=
"cn.happy.controller.MyMultiController"
>
<property name=
"methodNameResolver"
ref=
"nameResolver"
></property>
</bean>
第二种方案关键代码:[PropertyMethodNameResolver]
<bean
class
=
"org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"
>
<property name=
"mappings"
>
<props>
<prop key=
"/*.do"
>firstController</prop>
</props>
</property>
</bean>
<!-- 方法名称解析器http://www.44wa.com/html/4/4843/-->
<bean id=
"nameResolver"
class
=
"org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver"
>
<property name=
"mappings"
>
<props>
<prop key=
"/h1.do"
>list</prop>
<prop key=
"/h2.do"
>add</prop>
</props>
</property>
</bean>
<bean id=
"firstController"
class
=
"cn.happy.controller.MyMultiController"
>
<property name=
"methodNameResolver"
ref=
"nameResolver"
></property>
</bean>
实现效果:
三、参数方法名称解析器 [ParameterMethodNameResolver]
关键代码:
<bean
class
=
"org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"
>
<property name=
"mappings"
>
<props>
<prop key=
"/hello.do"
>firstController</prop>
</props>
</property>
</bean>
<!-- 参数方法名称解析器 默认的是action-->
<bean id=
"nameResolver"
class
=
"org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"
>
<property name=
"paramName"
value=
"actionName"
></property>
</bean>
<bean id=
"firstController"
class
=
"cn.happy.controller.MyMultiController"
>
<property name=
"methodNameResolver"
ref=
"nameResolver"
></property>
</bean>
注:不指定paramName,默认是action。
四、通过视图解析器引入外部或内部资源对象
<!-- 内部资源对象 -->
<bean id=
"internal"
class
=
"org.springframework.web.servlet.view.JstlView"
>
<property name=
"url"
value=
"/WEB-INF/jsp/index.jsp"
></property>
</bean>
<!-- 外部资源对象 -->
<bean id=
"jd"
class
=
"org.springframework.web.servlet.view.RedirectView"
>
<property name=
"url"
value=
"http://www.jd.com"
></property>
</bean>
<!-- 视图解析器 -->
<bean
class
=
"org.springframework.web.servlet.view.BeanNameViewResolver"
></bean>
<!-- 处理器配置 -->
<bean id=
"/hello.do"
class
=
"cn.happy.controller.MyController"
></bean>
外部资源对象实现效果:跳转到京东首页:
内部资源对象实现效果:
- SpringMVC自定义处理器里的那些事
- springmvc自定义异常处理器
- SpringMVC那些事-请求映射匹配-处理器匹配
- SpringMVC自定义处理器拦截器
- SpringMVC自定义参数返回处理器
- springMVC的处理器配置
- 工厂里的那些事
- 在springMVC+mybatis+Ajax+JSON+jQuery easyui的项目中,自定义全局异常处理器
- springmvc和jsp之间的那些事
- 关于SpringMVC content-type的那些事
- 大学里的那些事……
- c#SQL里的那些事
- js里运算符的那些事
- 团队里那些事
- 团队里那些事
- 创建自定义的错误处理器
- springmvc里的Aop
- springmvc中自定义异常处理器输出异常信息
- AB4-AM4解法
- 斐波那契数列
- 数据结构(十一)
- Java中的位运算
- 修正的AB4-AM4解法
- SpringMVC自定义处理器里的那些事
- javaSE周总结2
- Axure实现弹框周围遮罩效果
- 微服务实战(三):深入微服务架构的进程间通信
- JavaScrip循环语句
- mvc-加载控制器
- Linux系统查找文件命令find
- linux共享内存
- 掌握VS2010调试 -- 入门指南