SpringMVC04controller中定义多个方法

Posted 小葱拌豆腐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC04controller中定义多个方法相关的知识,希望对你有一定的参考价值。

public class MyController extends MultiActionController {

    // 新增 方法修饰符要是public
    public ModelAndView add(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        return new ModelAndView("/WEB-INF/jsp/success.jsp", "result", "add()");
    }

    // 修改
    public ModelAndView update(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        return new ModelAndView("/WEB-INF/jsp/success.jsp", "result",
                "update()");
    }

}
创建对应的controller
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">


  <!-- 配置一个处理器映射器 -->
  <bean  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="urlMap">
       <map>
       <!--  
         因为我们的controller继承了MultiActionController,
         在MultiActionController有个    
     /** Delegate that knows how to determine method names from incoming requests */
         private MethodNameResolver methodNameResolver = new InternalPathMethodNameResolver();    
           根据我们的请求中参数找到对应方法 的解析器
          *:代表的就是我们的请求参数 也是对应的方法名
       -->
          <entry key="/user/*"  value="myController"/>
       </map>
    </property>
  </bean>

  
    <!-- 处理器 -->
    <bean id="myController" class="cn.bdqn.controller.MyController">
      <property name="methodNameResolver" ref="myResolver"></property>
    </bean>
</beans>
mvc核心xml文件的配置

 

使用我们自身设置的解析器 来执行,不需要改变controller中的代码!只需要更改mvc核心xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">


  <!-- 配置一个处理器映射器 -->
  <bean  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="urlMap">
       <map>
       <!--  
         因为我们的controller继承了MultiActionController,
         在MultiActionController有个    
     /** Delegate that knows how to determine method names from incoming requests */
         private MethodNameResolver methodNameResolver = new InternalPathMethodNameResolver();    
           根据我们的请求中参数找到对应方法 的解析器
          *:代表的就是我们的请求参数 也是对应的方法名
       -->
          <entry key="/user/*"  value="myController"/>
       </map>
    </property>
  </bean>

  <!-- 设置解析器 -->
  <bean  id="myResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
    <property name="mappings">
     <props>
     <!-- 
      底层代码
     Set explicit URL to method name mappings through a Properties object.
      @param mappings Properties with URL as key and method name as value
    public void setMappings(Properties mappings) {
        this.mappings = mappings;
    }
      -->
       <prop key="/user/adds">add</prop>
       <prop key="/user/updates">update</prop>
     </props>
    </property>
  </bean>
  
    <!-- 处理器 -->
    <bean id="myController" class="cn.bdqn.controller.MyController">
    <!--需要更改父类的解析器引用 变成我们自已定义的解析器  -->
      <property name="methodNameResolver" ref="myResolver"/>
    </bean>

</beans>
mvc核心xml文件的设置

  一旦我们设置了解析器,那么默认的

 

会执行我们设置的解析器

PropertiesMethodNameResolver

 

 

在浏览器中输入对应的url即可看到效果!

 

视图解析器

/**

01 .内部资源视图

public class MyController extends AbstractController {

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        // success 就是我们说的 逻辑试图名称
        return new ModelAndView("success", "result", "add()");
    }

}




<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

  
    <!-- 处理器 -->
    <bean name="/myController" class="cn.bdqn.controller.MyController"/>


<!-- 使用我们默认的试图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--  InternalResourceViewResolver  没有给前缀和后缀赋值  需要我们手动的赋值-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>

</bean>
</beans>




02. 内部资源视图

public class MyController extends AbstractController {

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        // success 就是我们说的 逻辑试图名称
        return new ModelAndView("myView", "result", "jstlView");
    }

}



<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

  
    <!-- 处理器 -->
    <bean name="/myController" class="cn.bdqn.controller.MyController"/>


 <!--内部资源视图  -->
  <bean  id="myView" class="org.springframework.web.servlet.view.JstlView">
    <property name="url" value="/WEB-INF/jsp/success.jsp"/> 
    <!-- <property name="url" value="http://www.jd.com"/>    不能跳转到外部的资源路径-->
  </bean>
  
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>


</beans>



03.外部资源视图

public class MyController extends AbstractController {

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        // success 就是我们说的 逻辑试图名称
        return new ModelAndView("jd");
    }

}





<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

  
    <!-- 处理器 -->
    <bean name="/myController" class="cn.bdqn.controller.MyController"/>


 <!--外部资源视图  -->
 <bean  id="jd" class="org.springframework.web.servlet.view.RedirectView">
   <property name="url"  value="http://www.jd.com"/>
 </bean>

<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>


</beans>


*/
部分代码

 

访问外部资源

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP \'index.jsp\' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
  
  <body>

     <%-- 这里的参数要和 配置文件中ParameterMethodNameResolver的paramName属性的value值相对应--%>
    
    <a href="myController?action=taobao">淘宝</a>
    <a href="myController?action=jd">京东</a>
    <a href="myController?action=baidu">百度</a>
    
  </body>
</html>
在webroot下创建index.jsp
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">



 <!--  参数名称 映射成  方法名称 -->
  <bean id="parameter"  class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"/>
  

  
    <!-- 处理器 -->
<bean name="/myController" class="cn.bdqn.controller.MyController">
<property name="methodNameResolver" ref="parameter"/>
</bean>



<!-- 配置视图解析器   解析xml文件 -->
<bean class="org.springframework.web.servlet.view.XmlViewResolver">
 <property name="location"  value="classpath:MyViews.xml"/>
</bean>
   

</beans>
springmvc-servlet.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

 

 <!--外部资源视图  -->
 <bean  id="jd" class="org.springframework.web.servlet.view.RedirectView">
   <property name="url"  value="http://www.jd.com"/>
 </bean>
 <!--外部资源视图  -->
 <bean  id="taobao" class="org.springframework.web.servlet.view.RedirectView">
   <property name="url"  value="http://www.taobao.com"/>
 </bean>
 <!--外部资源视图  -->
 <bean  id="baidu" class="org.springframework.web.servlet.view.RedirectView">
   <property name="url"  value="http://www.baidu.com"/>
 </bean>


</beans>
MyViews.xml文件
public class MyController extends MultiActionController {

    // 淘宝主页
    public ModelAndView taobao(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        // success 就是我们说的 逻辑试图名称
        return new ModelAndView("taobao");
    }

    // 京东主页
    public ModelAndView jd(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        // success 就是我们说的 逻辑试图名称
        return new ModelAndView("jd");
    }

    // 百度主页
    public ModelAndView baidu(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        // success 就是我们说的 逻辑试图名称
        return new ModelAndView("baidu");
    }

}
MyController代码

 ======================使用properties文件管理视图===========================

前台的页面还是使用的上面例子中的index.jsp

jd.(class)=org.springframework.web.servlet.view.RedirectView
jd.url=http://www.taobao.com

taobao.(class)=org.springframework.web.servlet.view.RedirectView
taobao.url=http://www.taobao.com

baidu.(class)=org.springframework.web.servlet.view.RedirectView
baidu.url=http://www.baidu.com
创建对应的properties文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">



 <!--  参数名称 映射成  方法名称 -->
  <bean id="parameter"  class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"/>
  

  
    <!-- 处理器 -->
<bean name="/myController" class="cn.bdqn.controller.MyController">
<property name="methodNameResolver" ref="parameter"/>
</bean>


<!-- 配置视图解析器   解析properties文件 -->
<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<!--找到我们指定的properties文件  value就是代表的文件的名称  不需要加后缀名 -->
 <property name="basename"  value="myViews"/>
</bean>
   

</beans>
配置文件xml文件的内容

 =====================xml文件中同时存在多个视图解析器的执行顺序======================

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">



 <!--  参数名称 映射成  方法名称 -->
  <bean id="parameter"  class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"/>
  

  
    <!-- 处理器 -->
<bean name="/myController" class="cn.bdqn.controller.MyController">
<property name="methodNameResolver" ref="parameter"/>
</bean>

<!-- 如果是定义了多个 视图解析器  默认是按照在xml文件中的配置顺序 执行的
   如果不想使用默认的执行顺序  可以增加属性 order 设置一个正整数
   数值越小 优先级越高
 -->

   
   <!--  解析xml文件  -->
  <bean  class="org.springframework.web.servlet.view.XmlViewResolver">
   <property name="location" value="classpath:MyViews.xml"/>
   <property name="order" value="3"/>
  </bean>  
   
   
<!-- 配置视图解析器   解析properties文件 -->
<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<!--找到我们指定的properties文件  value就是代表的文件的名称  不需要加后缀名 -->
 <property name="basename"  value="myViews"/>
  <property name="order" value="2"/>
</bean>
   
   

</beans>
修改后的xml文件

 

以上是关于SpringMVC04controller中定义多个方法的主要内容,如果未能解决你的问题,请参考以下文章

后端SpringMVC Controller(接口定义 & 注解开发)

SpringMVC03controller中定义多个方法

5SpringMVC:Controller 详解 及 RestFul风格

5SpringMVC:Controller 详解 及 RestFul风格

SpringMVC的controller多线程的问题

详解SpringMVC中Controller的方法中参数的工作原理