1.springMVC Controller配置方式


一.手動配置方式

1.web.xml中DispatcherServlet控制器的的配置

       SpringMVC也是一種基於請求驅動的WEB框架,並且使用了前端控制器的設計模式。前端控制器就是DispatcherServlet控制器,只要滿足web.xml文件中的【url-pattern】的規則,這個請求就會交給這個前端控制器(DispatcherServlet),然而前端控制器在收到請求后自己不進行任何處理,根據相應的【URL的映射規則】委托給其他的頁面控制器進行處理請求。前端控制器只作為一個統一的訪問點,進行全局的流程控制。

  contextConfigLocation的值指定springmvc的配置文件位置

Servlet攔截匹配規則可以自已定義,攔截哪種URL合適? 
當映射為@RequestMapping("/user/add")時,為例

1、攔截*.do、*.htm, 例如:/user/add.do

  這是最傳統的方式,最簡單也最實用。不會導致靜態文件(jpg,js,css)被攔截。

2、攔截/,例如:/user/add

  可以實現現在很流行的REST風格。很多互聯網類型的應用很喜歡這種風格的URL。

  弊端:會導致靜態文件(jpg,js,css)被攔截后不能正常顯示。想實現REST風格,事情就是麻煩一些。后面有解決辦法還算簡單。

3、攔截/*,這是一個錯誤的方式,請求可以走到Action中,但轉到jsp時再次被攔截,不能訪問到jsp。

<!-- springMVC前端控制器 -->
<servlet>
  <servlet-name>springmvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- contextConfigLocation配置springmvc加載的配置文件;如果不配置默認加載的是/WEB-INF/servlet名稱-servlet.xml -->
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
</servlet>

<servlet-mapping>
  <servlet-name>springmvc</servlet-name>
  <!-- 第一種:*.action 以.action結尾的由DispatcherServlet解析 -->
  <!-- <url-pattern>*.action</url-pattern> -->
  <!-- 第二種:/    所有的訪問地址都由DispatcherServlet解析,對於靜態文件的解析需要配置不讓DispatcherServlet解析;使用此種方式可以實現RESTful風格的url-->
  <url-pattern>/</url-pattern>
</servlet-mapping>

 

手動指定spring配置文件的位置,需要使用ServletContext的初始化參數

<!-- 手動指定spring配置文件的位置,需要使用ServletContext的初始化參數 -->
   <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/application-dao.xml,classpath:spring/application-service.xml,classpath:spring/application-transaction.xml</param-value>
   </context-param>

  

  配置spring提供的監聽器,用於監聽servletContext對象的創建,同時為我們創建spring容器放在servletContext中

  <listener>
      <!-- 配置spring提供的監聽器,用於監聽servletContext對象的創建,同時為我們創建spring容器放在servletContext中,需導spring-web-4.3.8.RELEASE.jar
              默認情況下:這個配置只能加載位置是在WEB-INF目錄中的spring配置文件,同時文件名必須是applicationContext.xml(所以spring配置文件在其它位置時需要手動指定配置文件位置)
       -->
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  

  

  2.在springmvc.xml中配置1.處理器映射器  2.處理器適配器  3.視圖解析器(注意默認使用了jstl,所以必須導入jstl包

               上述視圖解析器配置了前綴和后綴兩個屬性,因此控制器類的視圖路徑僅需提供文件名,視圖解析器將會自動添加前綴和后綴
         例如:1.視圖解析器中設置了這兩個屬性時
             <property name="prefix" value="/WEB-INF/jsp/"></property>       <property name="suffix" value=".jsp"></property>
          2.Controller類中返回的ModelAndView設置了放回視圖名:
modelAndView.setViewName("items");
          3.則訪問controller成功后訪問的url為...../WEB-INF/jsp/items.jsp
       <!-- 配置處理器映射器 在配置Controller時需要指定bean的name;bean的name作為url進行查找 -->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
        
       <!-- 配置處理器適配器 ;所有的處理器適配器都實現了HandlerAdapter接口 -->
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
        
        
        <!-- 視圖解析器 ;解析jsp,默認使用jstl標簽,所以必須導jstl包 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!-- 設置view的前綴 -->
            <property name="prefix" value="/WEB-INF/jsp/"></property>
            <!-- 設置view的后綴 -->
            <property name="suffix" value=".jsp"></property>
            
            <!-- 指定前后綴后modelAndView.setViewName("");自動在前后加上前后綴 -->
        </bean>

 

 

  3.編寫controller的java代碼

    手動配置controller時對應的java類需實現Controller接口,並重寫實現方法

public class ItemController implements Controller{

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String name = "普通name";
        //返回ModelAndView
        ModelAndView modelAndView = new ModelAndView();
        //相當於request的setAttribute();
        modelAndView.addObject("name",name);
        
        //指定視圖
        modelAndView.setViewName("items");
        return modelAndView;
    }

}

 

  4.在springmvc.xml中配置controller

   <!-- 配置Controlle -->
     <bean name="/queryItems.action" class="cn.controller.ItemController"></bean>

 

 

二.注解方式

  1.web.xml配置與以上手動配置controller的web.xml一樣

 

  2.springmvc.xml中配置注解映射器和注解適配器

    方式一:

        <!-- (注解)映射器 -->
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
        <!-- (注解)適配器 -->
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>

    方式二:

    <!-- 使用<mvc:annotation-driven>可以代替上邊注解映射器和注解適配器 ,它默認加載很多參數綁定方法
               比如json轉換解析器就默認加載了,實際開發用這個-->
      <mvc:annotation-driven></mvc:annotation-driven>    

  

  3.編寫通過注解實現的controller的java代碼

//使用@Controller說明此類是一個控制器
@Controller
//為了對url進行分類管理,可以在這里定義根路徑,比如此例子訪問url為/item/queryItems
@RequestMapping("/item")
public class AnnotationController {
    
    @Autowired
    private ItemService itemService;
    
    /**
     * 查詢item
     * @param itemQueryVo
     * @return
     */
    //@RequestMapping實現方法和url的映射,一個方法對應一個url,一般值設置和方法名一樣
    @RequestMapping("/queryItems")
    public ModelAndView queryItems(ItemQueryVo itemQueryVo) {
        ModelAndView modelAndView = new ModelAndView();
        List<ItemCustom> itemsList = itemService.findItemsList(itemQueryVo);
        //相當於request的setAttribute();
        modelAndView.addObject("itemsList",itemsList);
        //指定視圖
        modelAndView.setViewName("item/itemsList");
        return modelAndView;
    }

 

 

  4.springmvc.xml中配置注解的controller

        <!-- 掃描單個 -->
        <!-- <bean class="cn.controller.AnnotationController"></bean> -->
<!-- 掃描包下的 --> <context:component-scan base-package="cn.controller"></context:component-scan>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM