zoukankan      html  css  js  c++  java
  • 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文件
  • 相关阅读:
    宿主机( win 7 系统) ping 虚拟机VMware( cent os 6.6 ) 出现“请求超时”或者“无法访问目标主机”的解决方法
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/xtdxs/p/7097290.html
Copyright © 2011-2022 走看看