------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------
MutiActionController类,多行动处理器,简单来说,就是可以一个处理器中有多个处理方法,分支
实现的原理可以解释一波:就是因为这个类中有InternalPathMethodNameResolver这个方法名字解析器,他的作用就是通过urlpath可以访问到这个类中的path指定的方法
小Demo案例:
一,自定义一个类(我的叫MyMutiActionController),继承MutiActionController这个类,他里面没有必须要实现的方法,纯手写
package cn.dawn.day05multiActioncontroller;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.multiaction.MultiActionController;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Created by Dawn on 2018/3/23. */public class MyMultiActionController extends MultiActionController{ public String doFirst(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { ModelAndView me=new ModelAndView(); me.setViewName("first"); return "first"; } public ModelAndView doSecond(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { ModelAndView me=new ModelAndView(); me.setViewName("second"); return me; }}
此处要注意的是方法修饰符给public,我之前复制的AbstractController那个实现类的方法,它的访问修饰符是protected,结果出的错找了20分钟,据我的估计,它这儿有点low,按道理反射的写法应该连private也能读取到啊
二,在自己的配置文件中:
三,之后需要改的有web.xml,将指向的xml配置文件改成你现在用的那个
Archetype Created Web Application springmvc org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:ApplicationContext-day05MultiActionController.xml 1 springmvc / default *.js default *.css default *.jpg default *.png default *.gif
四,我在处理器的方法中不是给了一个first和second的字符串吗?
那个经过视图解析器的处理其实就是/first.jsp和/second.jsp
所以,我们写出这俩个页面供测试使用
first.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>我是first
second.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>我是second
---end---