<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      佳林L

      博客園 首頁 新隨筆 聯系 訂閱 管理

      Spring-MVC

      什么是Spring-MVC?

      它是一種基于 Java 實現MVC設計模型的請求驅動類型的Web框架。它是封裝了Servlet。

      ● 入門案例,步驟分析:

      一:啟動服務器,加載一些配置文件。

      ①:DispatcherServlet對象創建。

      ②:Spring-mvc.xml被加載了。

        <!-- 前端控制器 -->
       <servlet>
         <servlet-name>dispatcherServlet</servlet-name>
         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      ?
         <!-- 讓這個類幫我們讀取Spring-mvc配置信息 -->
         <init-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>classpath:Spring-mvc.xml</param-value>
         </init-param>
      ?
         <load-on-startup>1</load-on-startup> <!-- 啟動服務器就創建Servlet -->
      ?
       </servlet>
      ?
       <servlet-mapping>
         <servlet-name>dispatcherServlet</servlet-name>
         <url-pattern>/</url-pattern> <!-- /表示所有請求都會經過此servlet -->
       </servlet-mapping>

      ③:Controller對象創建。

              <!-- 開啟注解掃描 -->
             <context:component-scan base-package="Controller"></context:component-scan>

      ④:開啟Spring-mvc注解的支持。

              <!-- 開啟Spring-mvc框架注解的支持 -->
             <mvc:annotation-driven/>

      二:發送請求,后臺處理請求。

      ① :客戶端發送請求。

          <h3>入門程序</h3>
         <a href="hello">入門程序</a>

      ②:DispatcherServlet 前端控制器,起控制作用。

      ③:讀取配置類。

      /**
      * 控制器的類
      */
      @Controller
      public class ControllerTest {
      ?
         @RequestMapping(path = "/hello")
         public String sayhello(){
             System.out.println("hello spring-mvc");
             return "success";
        }
      }

      ④:通過視圖解析器對象解析配置類(InternalResourceViewResolver)。

              <!-- 視圖解析器 -->
             <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                 <property name="prefix" value="/WEB-INF/pages/"></property> <!-- 指找那個包 -->
                 <property name="suffix" value=".jsp"></property> <!-- 指文件后綴名 -->
             </bean>

      步驟總結:

      ① Request請求。

      ② 前端控制器(DispatcherServlet):用于接收請求響應。

      ③ 請求查找Handler。處理映射器(HandlerMapping)。返回一個執行鏈,此執行鏈就是某個類某個與請求路徑一致的方法。

      ④ 請求適配器執行(HandlerAdapter),去執行Handler(去執行處理器返回的方法),返回 ModelAndView(xxx.jsp)。

      ⑤ 通過視圖解析器(ViewResolver)根據返回結果最終跳轉到xxx.jsp頁面。

      ⑥ 前端控制器(DispatcherServlet)返回響應。

      在SpringMvc的各個組件中,處理器映射器,處理器適配器,視圖解析器稱為SpringMvc三大組件。

              <!-- 開啟SpringMvc注解支持-->
             <mvc:annotation-driven/>

      使用以上注解,自動加載RequestMappingHandlerMapping(處理映射器) 和 RequestMappingHandlerAdapter(處理適配器)。


      ● 配置解決中文亂碼:

        <!-- 配置過濾器 -->
       <filter>
         <filter-name>characterEncodingFilter</filter-name>
         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
         <init-param>
           <param-name>encoding</param-name>
           <param-value>UTF-8</param-value>
         </init-param>
       </filter>
      ?
       <filter-mapping>
         <filter-name>characterEncodingFilter</filter-name>
         <url-pattern>/*</url-pattern>
       </filter-mapping>

      ● 常用注解:

      ○ RequestParam注解。

          @RequestMapping(path = "/hello")
         public String RequestParamTest(@RequestParam(value = "username") String username){
             System.out.println("hello spring-mvc"+username);
             return "success";
        }

      ○ RequestBody注解:用于獲取請求體的內容,get請求不適應,因為它把請求的參數放在url上的。

          @RequestMapping(path = "/hello")
         public String RequestBodyTest(@RequestBody String body){
             System.out.println("請求體內容:"+body);
             return "success";
        }

      ○ PathVaribale注解:用于綁定url中的占位符。

          @RequestMapping(path = "/hello/{id}")
         public String PathVariableTest(@PathVariable(name = "id") String id){
             System.out.println("hello spring-mvc"+id);
             return "success";
        }

      ● restful編程風格:請求地址都一樣,根據不同的請求方式,讓不同的方法去執行。

       

      ● 攔截器:

      攔截器封裝的是Aop,實現的功能與過濾器相似。

      有了過濾器為什么還要用攔截器:過濾器是建立在請求與servlet之間的。而攔截器是建立在servlet與controller之間的。

      執行過程:

      1、spring開放一個接口(HandlerInterceptor)給我們去實現。

      2、在實現方法中輸入用戶指令

      3、交回給框架執行

      自定義有三個方法:預處理(只有返回ture才執行controller)、數據返回但視圖沒有渲染、數據返回視圖渲染。

          <bean id="interceptor" class="com.djl.project.util.Interceptor"></bean>
      <!--攔截器-->
         <mvc:interceptors>
             <mvc:interceptor>
                 <mvc:mapping path="/**"/>
                 <mvc:exclude-mapping path="b.djl"/> <!-- 放行 -->
                 <ref bean="interceptor"></ref>
             </mvc:interceptor>
         </mvc:interceptors>
      public class Interceptor implements HandlerInterceptor {
      ?
         @Autowired
         private UserService userService;
      ?
         @Override
         public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
             boolean flag = false;
             String username = (String) request.getParameter("username");
             String password = (String) request.getParameter("password");
             System.out.println(username);
             System.out.println(password);
             UserBean userBean = userService.user_login(username, password);
             if(userBean==null){
                 flag = false;
                 response.setCharacterEncoding("UTF-8");
                 response.getWriter().print("error!");
            }else{
                 flag = true;
            }
             System.out.println("前置過濾器");
             return flag;
        }
      ?
         @Override
         public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
             System.out.println("返回數據不渲染視圖");
        }
      ?
         @Override
         public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
             System.out.println("返回數據渲染視圖");
        }
      }
      ?

      7:異常處理

      系統所有異常都往外拋,我們自定義一個異常類來做同統一處理。

      1),自定義異常。

      2),Spring如何管理?

      public class MyException implements HandlerExceptionResolver {
         @Override
         public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
      ?
             HandlerMethod handler = (HandlerMethod)o;
             String s = handler.getBean().toString();  // 報錯的類名
             String method = handler.getMethod().getName(); //報錯的方法名
             System.out.println(s);
             System.out.println(method);
             return new ModelAndView("error.html");
        }
      }
          <!-- 異常處理 -->
         <bean class="com.djl.project.util.MyException"></bean>

       

      posted on 2020-09-18 13:49  佳林L  閱讀(201)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 内射干少妇亚洲69xxx| 国产综合久久99久久| 一本加勒比hezyo无码人妻| 丁香婷婷色综合激情五月| 欧美情侣性视频| 99久久国产福利自产拍| 一本久道久久综合久久鬼色| 粗大猛烈进出高潮视频| 黄又色又污又爽又高潮| 中文字幕国产日韩精品| 26uuu另类亚洲欧美日本| 国产成人a在线观看视频| 久久日韩在线观看视频| 久久精品国产99麻豆蜜月| 亚洲综合色区另类av| 国产999精品2卡3卡4卡| 亚洲欧美日韩在线码| 亚洲色大成网站WWW久久| 精品免费国产一区二区三区四区| 久久精品国产99久久美女| 天堂av最新版中文在线| 人人爽人人爽人人片a免费| 欧美丰满熟妇xxxx性ppx人交| 久久国产精品精品国产色婷婷| 久久精品伊人波多野结衣| 男女扒开双腿猛进入爽爽免费看| 日本中文字幕不卡在线一区二区| 久久综合色天天久久综合图片| 日韩精品亚洲专在线电影| 国产欧美精品一区aⅴ影院| 大地资源高清播放在线观看| 国产成人人综合亚洲欧美丁香花| 国产高清在线精品一区二区三区| 一个人看的www免费高清视频| 亚洲精品天堂一区二区| 口爆少妇在线视频免费观看| 久久精品国产99久久丝袜| 久久中文字幕一区二区| 四虎在线永久免费看精品| 日本免费人成视频在线观看| 国产精品午夜福利视频|