1. 程式人生 > >初識 spring-mvc

初識 spring-mvc

spring-mvc 介紹

  • Spring-mvc 屬於表現層的框架,他是Spring 框架的一部分,作用就是controller(控制層)
  • spring mvc 的執過程:
    • 客服端傳送請求 dispacherServlet
    • 把相應的結果請求給 HandlerMapping (HanlerAdapter 進行處理(處理( 比如到那個介面,資料返回給那個介面,對資料喲啊做哪些處理(modleAndView(裡面包括了要處理的資料、檢視))
    • 把這個 modleAndView 給你的 dispacherServlet 給你的檢視渲染器 --> 最後還會到 dispacherServlet 最後使用者才會看到一個好的網頁)))
  • 裡面有幾個核心的物件:
    • 第一個是:dispacherServlet
    • 第二個是:HandlerAadapter
    • 第三個是:你的檢視渲染器
      在這裡插入圖片描述
  • springmvc 的框架的專案
    • 1.匯入相關的 jar spring-webmvc-3.2.13.RELEASE.jar
    • 2.核心 xml檔案 springmvc.xml 配置,請求的地址
    • 3.配置 它統一的字首(目錄的檔案),字尾(.jsp.html)
      • 核心配置檔案在那裡載入 web.xml (核心配置檔案要配置到 web.xml)
      • 在這裡面配置 servlet spring-webmvc-3.2.13.RELEASE.jar
開始配置servlet 配置在 web.xml
		<!--開始配置servlet servlet-name 取一個名字-->
         <servlet>
             <servlet-name>springmvc</servlet-name>
             <servlet-class>org.springframework.web.servlet.
DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <!-- 立刻載入--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

springmvc-srevlet 非註解 與 註解

		<!--當你的請求地址 是 index.html 的時候 就會到 UserController 類 -->
        <bean name="/index.html" class="com.offcn.controller.UserController"></bean>

        <!-- 掃描 controller 下所有的包-->
        <context:component-scan base-package="com.offcn.controller" />
        <!--開啟註解驅動-->
        <mvc:annotation-driven />

        <!-- 完成檢視的對應-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!--開始配置字首 prefix 字首-->
            <property name="prefix" value="/WEB-INF/jsp/"></property>
            <!--開始配置字尾 suffix 字尾-->
            <property name="suffix" value=".jsp"></property>
        </bean>
非註解
public class UserController implements Controller{
 /*這個方法,當你的客戶端傳送請求的 url 地址,跟這個類對應上了就會走這個方法
    * (HandlerMapping)
    * */
    @Override
    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
        //就是你要跳轉到介面
        return new ModelAndView("doIndex");
    }
}

Contoller層的各種實現方式

@Controller
/*@RequestMapping("/userController")*/
public class UserController {
    //8080/UserController/index
    /*把頁面的資料 放到你的Controller*/
    /*如果我現在要傳遞一個引數  userName=123456*/
    /*@RequestMapping 代表你請求的地址*/
   *@RequestMapping("index")
    //value 代表你網頁拼接的鍵,request 這個代表是否必須拼接這個引數,false代表可以拼接,也可以不拼接
    public String index(@RequestParam(value = "userName",required = false) String userName){
        System.out.println(userName);
        //返回的介面
        return "doIndex";
    }


    /*-------------------------------------------------------------*/
    //必須傳引數, method 設定你的請求方式
    //報 405 的錯誤是因為你的請求方式跟你的接受方式不統一
    /*value = "/index/*.do" 只要你的index 下面的 , 以 .do結尾的都能 匹配到 */
    @RequestMapping(value = "/index/*.do",params = {"userName"},method = RequestMethod.GET)
    /*----------------------------------------------------------------*/
    // PathVariable 這個註解就是匹配你 uri 上的任何引數,註解上的pid 跟你的pid
    @RequestMapping(value = "/index/{pid}/{userName}")
    public String index(@PathVariable String pid,@PathVariable String userName){
        System.out.println(pid+"\t"+userName);
        return "doIndex";
    }

    /*---------------------------------------------------------------*/
    //把 controller 的資料傳到 jsp頁面中
    @RequestMapping("/toDoIndex")
    public ModelAndView toDoIndex( String userName){
        //獲得userName
        //構建 modelAndView 物件
        ModelAndView modelAndView = new ModelAndView();
        //把值方到modelAndView(以鍵值對的形式來傳遞的)
        modelAndView.addObject("userName",userName);
        //把你跳轉的介面放到 modelAndView 裡
        modelAndView.setViewName("doIndex");

        return modelAndView;
    }

    /*------------------------和最終版 一樣 常用---------------------------*/
    //返回就是我們要跳轉的地址 view  model, 這裡的model 不用例項化出來, 直接傳進去
    @RequestMapping("/toDoIndex1")
    public String toDoIndex1(String userName, Model model){
        // model 裡面來新增資料// 同樣也是以鍵值對來傳遞引數的
        model.addAttribute("userName",userName);
        return "doIndex";
    }

    /*------------------------------------------------*/
    /*通過 map 把資料傳過去*/
    @RequestMapping("/toDoIndex2")
    public String toDoIndex2(String userName, Map<String,Object> map){
        map.put("userName",userName);
        return "doIndex";
    }

    /*---------------------------最終版-----------------------------*/
    @RequestMapping("/toUpdata")
    public String toUpdata(@RequestParam(value = "userName",required = false) String userName,
                           @RequestParam(value = "userPwd",required = true) String userPwd){

        return "doIndex";
    }

    /*---------------------------------------------------------------*/
    //@RequestParam("userName")  這個屬於鍵   userName 屬於值
    public String index(@RequestParam("userName") String userName){
        System.out.println(userName);
        //返回的介面
        return "doIndex";
    }
 }