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

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

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

      導(dǎo)航

      Spring-MVC學(xué)習(xí)筆記

      Posted on 2019-04-23 23:21  李日天  閱讀(153)  評(píng)論(0)    收藏  舉報(bào)

       

      工作流程

       

       

      控制器

      public class MyController implements Controller {
          @Override
          public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
              ModelAndView mv = new ModelAndView();
              mv.addObject("message", "Hello Vue");
              mv.setViewName("/WEB-INF/jsp/welcome.jsp");
              return mv;
          }
      }

      Dispatch配置文件

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             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.xsd">
          <bean id="/my.do" class="com.xx.handlers.MyController"/>
      </beans>

       

      注冊(cè)控制器

      <?xml version="1.0" encoding="UTF-8"?>
      <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
      version="4.0">

      <servlet>
      <servlet-name>dispatcher</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:myDispatch.xml</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
      <servlet-name>dispatcher</servlet-name>
      <url-pattern>*.do</url-pattern>
      </servlet-mapping>
      </web-app>

       

      URLPattern中用 / 出現(xiàn)的靜態(tài)資源訪問(wèn)問(wèn)題

      解決辦法1

      <servlet-mapping>
          <servlet-name>default</servlet-name>
          <url-pattern>*.jpg</url-pattern>
      </servlet-mapping>

       

      解決辦法2 (好用)要寫(xiě)在最上。

      <mvc:default-servlet-handler/>

       

      解決辦法3

      <mvc:resources mapping="/images/" location="/images/**"/>

       

      映射器

      默認(rèn)使用的是BeanNameUrlHandlerMapping

      使用SimpleUrlHandlerMapping, 可以實(shí)現(xiàn)多個(gè)url指向同一個(gè)Controller

      <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
          <property name="mappings">
              <props>
                  <prop key="hello.do">myController</prop>  // key指定路由 
                  <prop key="my">myController</prop>
                  <prop key="xx">myControl ler</prop>
              </props>
          </property>
      </bean>

       

      適配器

      SimpleControllerHandleAdapter

      所有實(shí)現(xiàn)了Controller的Bean,均是通過(guò)該適配器進(jìn)行適配,執(zhí)行的。

      HttpRequestHandlerAdapter

      所有實(shí)現(xiàn)了HttpRequestHandler的Bean,均是通過(guò)該適配器進(jìn)行適配,執(zhí)行的。

       

      處理器

      AbstactController

      繼承自WebContentGenerator,它有setSupportedMethods方法,控制請(qǐng)求的方式,默認(rèn)支持GET,POST

      <bean id="/hello" class="com.xx.handlers.MyController">
          <property name="supportedMethods" value="GET"/>
      </bean>

       

      視圖解析器

      默認(rèn)的視圖解析器 internalResourceViewResolver 

      該視圖解析器用于完成對(duì)當(dāng)前web應(yīng)用內(nèi)部資源的封裝和跳轉(zhuǎn),而對(duì)于內(nèi)部資源的查找規(guī)則是,將ModelAndView中指定的視圖名與為視圖解析器配置的前綴和后綴結(jié)合的方式,拼接成一個(gè)Web應(yīng)用內(nèi)部資源路徑。拼接規(guī)則是前綴+視圖名稱+后綴。

      缺陷:不能訪問(wèn)外部資源。對(duì)于內(nèi)部資源的定義,只能定義一種格式的資源,存放在同一目錄的同一文件類型的資源文件。

       

      BeanNameViewResolver

      將Bean名稱與View綁定

       

      <bean id="taobao" class="org.springframework.web.servlet.view.RedirectView">
          <property name="url" value="http://www.taobao.com"/>
      </bean>
      <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
      
      return new ModelAndView("welcome");

       

      xmlViewResolver

      將View視圖專門抽取出來(lái),單獨(dú)定義為一個(gè)xml??梢允褂脁mlViewResolver

      <bean class="org.springframework.web.servlet.view.XmlViewResolver">
          <property name="location" value="classpath:myViews.xml"/>
      </bean>

       

      ResourceBundleViewResolver

      將視圖寫(xiě)到,properties文件中

      <bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
          <property name="basename" value="myViews"/>
      </bean>

       

      baidu.(class)=org.springframework.web.servlet.view.RedirectView
      baidu.url=http://www.baidu/.com
      welcome.(class)=rg.springframework.web.servlet.view.JstlView
      welcome.url=/WEB-INF/jsp/welcome.jsp

       

      視圖解析器的優(yōu)先級(jí)

      視圖解析器有一個(gè)order屬性,專門用于設(shè)置多個(gè)視圖解析器的優(yōu)先級(jí)。數(shù)字越小,優(yōu)先級(jí)越高,數(shù)字相同,先注冊(cè)的優(yōu)先注冊(cè)。

       

       

      注解式開(kāi)發(fā)

      基礎(chǔ)

      注冊(cè)組件掃描器

      <context:component-scan base-package="com.xx.handlers"/>

       

      @Controller
      @RequestMapping("/test") //請(qǐng)求uri命名空間的定義
      public class MyController{
      @RequestMapping(value = "/ok", method = RequestMethod.GET, params = {"name", "age"})
      // method 請(qǐng)求方法的限定
      // params 對(duì)請(qǐng)求參數(shù)的限定 !name 表示不能有name參數(shù) age=23 表示參數(shù)必須帶age其值必須為23 age!=25 必須帶age其值不能為25
      public ModelAndView getOk(){
      return new ModelAndView("/WEB-INF/jsp/welcome.jsp");
      }
      }

       

       

      接收請(qǐng)求中的參數(shù)

      接收get post請(qǐng)求

      @RequestMapping(value = "/pok", method = RequestMethod.POST)
      public ModelAndView postOk(String name, Integer age){
          System.out.println(name);
          System.out.println(age);
          return new ModelAndView("/WEB-INF/jsp/welcome.jsp");
      }

      還可以像servlet中那樣做,用HttpServeletRequest

       

      中文亂碼問(wèn)題解決

      web.xml

      <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>
          <init-param>
              <param-name>forceResponseEncoding</param-name>
              <param-value>true</param-value>
          </init-param>
      </filter>

       

      校正求情參數(shù)名

      @RequestMapping(value = "/pok", method = RequestMethod.POST)
      public ModelAndView postOk(@RequestParam(name = "rname") String name, Integer age){
          return new ModelAndView("/WEB-INF/jsp/welcome.jsp");
      }

       

      Object接收

      <form action="/NewWeb/test/pok" method="post">
          <label>輸入名稱
              <input name="name" type="text">
          </label>
          <label>輸入年齡
              <input name="age" type="number">
          </label>
          <label>輸入學(xué)校
              <input name="school.name" type="text">
          </label>
          <label>輸入地址
              <input name="school.address" type="text">
          </label>
          <input type="submit" value="提交">
      </form>

       

      @RequestMapping(value = "/pok", method = RequestMethod.POST)
      public ModelAndView postOk(User user){
          System.out.println(user);
          return new ModelAndView("/WEB-INF/jsp/welcome.jsp");
      }

       

      路徑變量

      @RequestMapping(value = "/user/{name}", method = RequestMethod.GET)
      public ModelAndView getOk(@PathVariable("name") String name){
          ModelAndView mv = new ModelAndView("/WEB-INF/jsp/welcome.jsp");
          return mv;
      }

       

      返回ModelAndView

      返回string

      內(nèi)部資源

      @RequestMapping(value = "/ok", method = RequestMethod.GET)
      public String getOk(){
          return "/WEB-INF/jsp/welcome.jsp";
      }

       

      外部資源。 仍然要注冊(cè)

      @RequestMapping(value = "/ok02", method = RequestMethod.GET)
      public String getOk02(){
          return "baidu";
      }

       

      返回Object

      用 json 進(jìn)行前后端交互。

      將object數(shù)據(jù)轉(zhuǎn)化為json數(shù)據(jù),需要由http消息轉(zhuǎn)換器httpmessageconverter完成。轉(zhuǎn)換器的開(kāi)啟,需要注冊(cè)

      <mvc:annotation-driven/>

       

      可以用map

      @RequestMapping(value = "/do")
      @ResponseBody
      public Object getOk02(){
          Map<String, User> map = new HashMap<String, User>();
          map.put("user1", new User("張三", 23 ));
          map.put("user2", new User("李三", 21 ));
          return map;
      }

      或者list

      @RequestMapping(value = "/do")
      @ResponseBody
      public Object getOk02(){
          List<User> list = new ArrayList<User>();
          list.add(new User("qqq",23));
          list.add(new User("vvv",21));
          return list;

       

      核心技術(shù)

      重定向

      重定向攜帶參數(shù)

      一般通過(guò)HttpSession,或者M(jìn)odelAndView的addObject方法

      @RequestMapping(value = "/ok", method = RequestMethod.GET)
      public ModelAndView getOk(){
          ModelAndView mv = new ModelAndView();
          mv.addObject("user", "xxx");
          mv.setViewName("redirect:do");
          return mv;
      }
      @RequestMapping(value = "/do")
      @ResponseBody
      public Object getOk02(String user){
          System.out.println(user);
          return user;
      }

       

      @RequestMapping(value = "/ok", method = RequestMethod.GET)
      public ModelAndView getOk(User user,HttpSession session){
          session.setAttribute("user", user);
          return new ModelAndView("redirect:do");
      }
      @RequestMapping(value = "/do")
      @ResponseBody
      public Object getOk02(HttpSession session){
          User user = (User) session.getAttribute("user");
          return user;
      }

       

      異常處理

      <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
      <property name="defaultErrorView" value="/WEB-INF/error/error-page.jsp"/>
      <property name="exceptionAttribute" value="ex"/>
      <property name="exceptionMappings">
      <props>
      <prop key="com.xx.exception.NameException">/error/name_error.jsp</prop>
      <prop key="com.xx.exception.AgeException">age_error.jsp</prop>
      </props>
      </property>
      </bean>

      error-page

      <body>
      <div>
          error page
          ${ex.message }
      </div>
      </body>

       

      自定異常處理器

      public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
          ModelAndView mv = new ModelAndView();
          mv.addObject("ex", e);
          mv.setViewName("/erro/error-page.jsp");
          if(e instanceof NameException){
              System.out.println("name error");
          }
          if(e instanceof AgeException){
              System.out.println("age error");
          }
          return mv;
      }

       

      <bean class="com.xx.exception.resolver"/>

       

      注解式自定義異常處理器

      @ExceptionHandler(NameException.class)
      public ModelAndView resolveException(Exception e) {
      ModelAndView mv = new ModelAndView();
      mv.addObject("ex", e);
      System.out.println(e.getMessage());
      return mv;
      }

      改代碼寫(xiě)在 ExceptionResolverController中,繼承自BaseController(即MyController)

       

       

      類型轉(zhuǎn)換器

       自定義類型轉(zhuǎn)換器

      public class MyDataConvert implements Converter<String, Date> {
      @Override
      public Date convert(String s) {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      try {
      return sdf.parse(s);
      } catch (ParseException e) {
      e.printStackTrace();
      }
      return null;
      }
      }

      注冊(cè)類型轉(zhuǎn)換器

      <!--    注冊(cè)類型轉(zhuǎn)換器-->
      <bean id="myDataConvert"  class="com.lh.handlers.MyDataConvert"/>
      <!--    注冊(cè)轉(zhuǎn)換服務(wù)對(duì)象-->
      <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
          <property name="converters" ref="myDataConvert"/>
      </bean>
      <mvc:annotation-driven conversion-service="conversionService"/>

       

       

      文件上傳

       

      <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
          <property name="defaultEncoding" value="utf-8"/>
          <property name="maxUploadSize" value="1048576"/>
      </bean> 

       

       

       @RequestMapping(value = "/test01", method = RequestMethod.POST)
       public ModelAndView doFile(MultipartFile photo, HttpSession session) throws IOException {
           if (!photo.isEmpty()){
               String path = session.getServletContext().getRealPath("/images");
               String fileName = photo.getOriginalFilename();
               System.out.println(path);
               assert fileName != null;
               if (fileName.endsWith(".jpg") || fileName.endsWith(".png")){
                   File file = new File(path, fileName);
                   photo.transferTo(file);
               }
           }else {
               return new ModelAndView("fail.jsp");
           }
           return new ModelAndView("success.jsp");
       }

       

       

      攔截器

      public class MyInterceptor implements HandlerInterceptor {
          @Override
          public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
              
              return false; // 執(zhí)行false表示被攔截
          }
      
          @Override
          public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
      
          }
      
          @Override
          public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
      
          }
      }

       

      注冊(cè)攔截器

      <mvc:interceptors>
          <mvc:interceptor>
              <mvc:mapping path="/**"/>
              <bean class="com.xx.interceptors.MyInterceptor"/>
          </mvc:interceptor>
      </mvc:interceptors>

       

      主站蜘蛛池模板: 日日噜噜夜夜爽爽| 91偷自国产一区二区三区| 免费人成视频在线| 成人看的污污超级黄网站免费| 香蕉乱码成人久久天堂爱| 国产精品久久欧美久久一区| 精品国产欧美一区二区三区在线| 亚洲av成人三区国产精品| 亚洲色丰满少妇高潮18p| 武川县| 国产va免费精品观看精品| 超碰成人人人做人人爽| 国内精品久久人妻互换| 日日摸天天爽天天爽视频| 成人免费区一区二区三区| 精品人妻伦一二二区久久| 久久爱在线视频在线观看| 国产精品人成视频免| 蜜桃av亚洲精品一区二区| 久久夜色精品国产亚洲av| 女人与牲口性恔配视频免费| 国产精品中文一区二区| 国产成人精品18| 国产精品白浆无码流出| 国产又色又爽又黄刺激视频| 无码专区 人妻系列 在线| 亚洲人妻系列中文字幕| 亚洲高潮喷水无码AV电影| 翘臀少妇被扒开屁股日出水爆乳| 精品国产av无码一区二区三区 | 亚洲精品无码av天堂| 绯色蜜臀av一区二区不卡| 无码一区二区三区久久精品| 精品尤物TV福利院在线网站 | 亚洲中文字幕一区精品自| 色爱综合另类图片av| 久久久亚洲精品无码| 国产麻豆放荡av激情演绎| 91中文字幕在线一区| 欧美黑人又粗又大又爽免费| 亚洲国产区男人本色|