最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC實(shí)現(xiàn)簡單跳轉(zhuǎn)方法(專題)

 更新時(shí)間:2018年03月26日 11:03:13   作者:胖先森  
這篇文章主要介紹了SpringMVC實(shí)現(xiàn)簡單跳轉(zhuǎn)方法(專題),詳細(xì)的介紹了SpringMVC跳轉(zhuǎn)的幾種方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下

簡單跳轉(zhuǎn)專題

個(gè)人建議重新練習(xí)一遍搭建的過程,如果感覺麻煩你可以直接復(fù)制上一個(gè)工程,但是需要修改pom.xml中的一點(diǎn)信息

<groupId>com.hanpang.springmvc</groupId>
<artifactId>springmvc-demo01</artifactId>
<version>0.0.1-SNAPSHOT</version>

1.核心配置類和加載類

package com.hanpang.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages="com.hanpang.**.web")
public class WebConfig {
}

package com.hanpang.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

 @Override
 protected Class<?>[] getRootConfigClasses() {
 return new Class[] {WebConfig.class};
 }

 @Override
 protected Class<?>[] getServletConfigClasses() {
 return null;
 }

 @Override
 protected String[] getServletMappings() {
 return new String[] {"/"};
 }
}

2.JavaWeb階段的跳轉(zhuǎn)方式

請(qǐng)注意SpringMVC的方法中的形參,框架給我們完成了實(shí)例化的操作

package com.hanpang.web;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller//告知其是一個(gè)控制器
public class Demo01Controller {

 @RequestMapping(path="/test01")
 public ModelAndView 傳統(tǒng)方式跳轉(zhuǎn)_請(qǐng)求轉(zhuǎn)發(fā)(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
 System.out.println("默認(rèn)對(duì)形參的進(jìn)行了實(shí)例化操作");
 request.getRequestDispatcher("/WEB-INF/jsp/demo01.jsp").forward(request, response);
 return null;
 }

 @RequestMapping(path="/test02")
 public ModelAndView 傳統(tǒng)方式跳轉(zhuǎn)_重定向(HttpServletRequest request,HttpServletResponse response) throws IOException {
 System.out.println("默認(rèn)對(duì)形參的進(jìn)行了實(shí)例化操作");
 response.sendRedirect(request.getContextPath()+"/view/result01.jsp");
 return null;
 }
}

NOTE: 這種方式我們幾乎不再使用了,只是只是簡單的演示和回顧一下,至少我們可以使用這種方式獲取Servlet API!!!

3.Controller跳轉(zhuǎn)到JSP的方式演示

在示例最后的時(shí)候,我們會(huì)加入JSP的視圖解析器,開始階段我們還是按照傳統(tǒng)的方式,有一個(gè)循序漸進(jìn)的過程

package com.hanpang.web;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller//告知其是一個(gè)控制器
public class Demo01Controller {

 @RequestMapping(path="/test03")
 public ModelAndView 默認(rèn)情況下是請(qǐng)求轉(zhuǎn)發(fā)(){
 ModelAndView mav = new ModelAndView();
 mav.setViewName("/WEB-INF/jsp/demo01.jsp");
 return mav;
 }
 @RequestMapping(path="/test04")
 public ModelAndView 設(shè)置重定向的方式(){
 ModelAndView mav = new ModelAndView();
 mav.setViewName("redirect:/view/result01.jsp");
 //或者
 //mav.setViewName(UrlBasedViewResolver.REDIRECT_URL_PREFIX+"/view/result01.jsp");
 return mav;
 }

}

感覺跟Java Web階段的方式差不多,只是重定向的時(shí)候設(shè)置了一個(gè)簡單的前綴

4.Controller跳轉(zhuǎn)到Controller的方式演示

類似于從一個(gè)Servlet調(diào)到另一個(gè)Servlet

package com.hanpang.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller//告知其是一個(gè)控制器
public class Demo01Controller {

 @RequestMapping(path="/test05")
 public ModelAndView 直接設(shè)置映射路徑即可(){
 ModelAndView mav = new ModelAndView();
 mav.setViewName("/test03");
 return mav;
 }

 @RequestMapping(path="/test06")
 public ModelAndView 設(shè)置重定向(){
 ModelAndView mav = new ModelAndView();
 mav.setViewName("redirect:/test04");
 return mav;
 }
}

5.加入JSP的視圖解析器

上面的演示過程中,我們發(fā)現(xiàn)ModelAndView中setViewName是用來完成跳轉(zhuǎn)的,這里面?zhèn)鬟f的數(shù)據(jù)是字符串,但是處理方式不太一樣,當(dāng)跳轉(zhuǎn)的路徑有前綴redirect:的時(shí)候,那么處理方式不一樣.

還有,如果我們有多個(gè)類似/WEB-INF/jsp/demo01.jsp形式的字符串的時(shí)候,我們發(fā)現(xiàn)公共的部分很多,SpringMVC給我們提供了一個(gè)專門處理  Controller請(qǐng)求轉(zhuǎn)發(fā)JSP頁面  的類.

請(qǐng)注意我的描述: 如果發(fā)現(xiàn)你傳遞的字符串沒有設(shè)置任何前綴標(biāo)識(shí),那么默認(rèn)情況下使用配置JSP視圖解析器處理,并且完成請(qǐng)求轉(zhuǎn)發(fā)的操作

注解:配置核心配置類

package com.hanpang.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages="com.hanpang.**.web")
public class WebConfig {

 @Bean//實(shí)例化
 public ViewResolver viewResolver() {
 InternalResourceViewResolver jspViewResolver = new InternalResourceViewResolver();
 jspViewResolver.setViewClass(JstlView.class);//springmvc支持jstl標(biāo)簽
 jspViewResolver.setPrefix("/WEB-INF/");
 jspViewResolver.setSuffix(".jsp");

 return jspViewResolver;
 }
}

**NOTE:**請(qǐng)注意方法上的注解@Bean

方法等價(jià)于XML中的代碼如下

  <bean id="jspResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/"/>
    <property name="suffix" value=".jsp"/>
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
  </bean>

改進(jìn)Controller跳轉(zhuǎn)JSP代碼

該視圖解析器只能針對(duì)于JSP的請(qǐng)求轉(zhuǎn)發(fā),對(duì)重定向無效,請(qǐng)注意代碼的注釋內(nèi)容

 @RequestMapping(path="/test03")
 public ModelAndView 默認(rèn)情況下是請(qǐng)求轉(zhuǎn)發(fā)(){
 ModelAndView mav = new ModelAndView();
 //mav.setViewName("/WEB-INF/jsp/demo01.jsp");

 //改進(jìn)后:默認(rèn)情況下,會(huì)使用JSP視圖解析器處理,
 // prefix+"jsp/demo01"+suffix => /WEB-INF/jsp/demo01.jsp
 mav.setViewName("jsp/demo01");//發(fā)現(xiàn)字符串沒有前綴修飾
 return mav;
 }
 @RequestMapping(path="/test04")
 public ModelAndView 設(shè)置重定向的方式(){
 ModelAndView mav = new ModelAndView();
 //解析器對(duì)重定向無效
 mav.setViewName("redirect:/view/result01.jsp");
 return mav;
 }

改進(jìn)Controller跳轉(zhuǎn)Controller代碼

@RequestMapping(path="/test05")
public ModelAndView 直接設(shè)置映射路徑即可(){
 ModelAndView mav = new ModelAndView();
 mav.setViewName("/test03");
 return mav;
}

當(dāng)配置完JSP視圖解析器后,對(duì)上述的代碼再次進(jìn)行測(cè)試,查看訪問結(jié)果有驚喜

符合我們之前說的"/test03"是一個(gè)字符串,默認(rèn)情況下會(huì)使用JSP視圖解析器進(jìn)行處理,那么如何改進(jìn)呢?

可以設(shè)置前綴"forward:",改進(jìn)代碼如下:

@RequestMapping(path="/test05")
public ModelAndView 直接設(shè)置映射路徑即可(){
 ModelAndView mav = new ModelAndView();
 mav.setViewName("forward:/test03");
 //或者
 //mav.setViewName(UrlBasedViewResolver.FORWARD_URL_PREFIX+"/test03");
 return mav;
}

當(dāng)發(fā)現(xiàn)字符串使用forward:修飾后,處理情況改變?yōu)閺腃ontroller請(qǐng)求轉(zhuǎn)換到另一個(gè)Controller,而如果做到重定向的話,代碼如下:

@RequestMapping(path="/test06")
public ModelAndView 設(shè)置重定向(){
 ModelAndView mav = new ModelAndView();
 mav.setViewName("redirect:/test04");
 return mav;
}

6.InternalResourceViewResolver 附錄

InternalResourceViewResolver:它是URLBasedViewResolver的子類,所以URLBasedViewResolver支持的特性它都支持。

在實(shí)際應(yīng)用中InternalResourceViewResolver也是使用的最廣泛的一個(gè)視圖解析器,那么InternalResourceViewResolver有什么自己獨(dú)有的特性呢?

單從字面意思來看,我們可以把InternalResourceViewResolver解釋為內(nèi)部資源視圖解析器,這就是InternalResourceViewResolver的一個(gè)特性。

InternalResourceViewResolver會(huì)把返回的視圖名稱都解析為InternalResourceView對(duì)象,InternalResourceView會(huì)把Controller處理器方法返回的模型屬性都存放到對(duì)應(yīng)的request屬性中,然后通過RequestDispatcher在服務(wù)器端把請(qǐng)求forword重定向到目標(biāo)URL。

比如在InternalResourceViewResolver中定義了prefix=/WEB-INF/,suffix=.jsp,然后請(qǐng)求的Controller處理器方法返回的視圖名稱為test,那么這個(gè)時(shí)候InternalResourceViewResolver就會(huì)把test解析為一個(gè)InternalResourceView對(duì)象,先把返回的模型屬性都存放到對(duì)應(yīng)的HttpServletRequest屬性中,然后利用RequestDispatcher在服務(wù)器端把請(qǐng)求forword到/WEB-INF/test.jsp。這就是InternalResourceViewResolver一個(gè)非常重要的特性,我們都知道存放在/WEB-INF/下面的內(nèi)容是不能直接通過request請(qǐng)求的方式請(qǐng)求到的,為了安全性考慮,我們通常會(huì)把jsp文件放在WEB-INF目錄下,而InternalResourceView在服務(wù)器端跳轉(zhuǎn)的方式可以很好的解決這個(gè)問題。下面是一個(gè)InternalResourceViewResolver的定義,根據(jù)該定義當(dāng)返回的邏輯視圖名稱是test的時(shí)候,InternalResourceViewResolver會(huì)給它加上定義好的前綴和后綴,組成“/WEB-INF/test.jsp”的形式,然后把它當(dāng)做一個(gè)InternalResourceView的url新建一個(gè)InternalResourceView對(duì)象返回。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入理解Java中的WeakHashMap

    深入理解Java中的WeakHashMap

    這篇文章主要介紹了深入理解Java中的WeakHashMap,WeakHashMap從名字可以得知主要和Map有關(guān),不過還有一個(gè)Weak,我們就更能自然而然的想到這里面還牽扯到一種弱引用結(jié)構(gòu),因此想要徹底搞懂,我們還需要知道四種引用,需要的朋友可以參考下
    2023-09-09
  • 詳解Java?@Documented注解的作用

    詳解Java?@Documented注解的作用

    @Documented和@Deprecated注解長得有點(diǎn)像,@Deprecated是用來標(biāo)注某個(gè)類或者方法不建議再繼續(xù)使用,@Documented只能用在注解上,本文將通過示例詳細(xì)說說@Documented注解的作用,需要的可以參考一下
    2022-09-09
  • Java設(shè)計(jì)模式之外觀模式示例詳解

    Java設(shè)計(jì)模式之外觀模式示例詳解

    外觀模式為多個(gè)復(fù)雜的子系統(tǒng),提供了一個(gè)一致的界面,使得調(diào)用端只和這個(gè)接口發(fā)生調(diào)用,而無須關(guān)系這個(gè)子系統(tǒng)內(nèi)部的細(xì)節(jié)。本文將通過示例詳細(xì)為大家講解一下外觀模式,需要的可以參考一下
    2022-08-08
  • Java中如何將?int[]?數(shù)組轉(zhuǎn)換為?ArrayList(list)

    Java中如何將?int[]?數(shù)組轉(zhuǎn)換為?ArrayList(list)

    這篇文章主要介紹了Java中將?int[]?數(shù)組?轉(zhuǎn)換為?List(ArrayList),本文通過示例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Spring Cloud Feign簡單使用詳解

    Spring Cloud Feign簡單使用詳解

    本篇文章主要介紹了Spring Cloud Feign簡單使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • Java面試題解析之判斷以及防止SQL注入

    Java面試題解析之判斷以及防止SQL注入

    這篇文章主要介紹了Java面試題解析之判斷以及防止SQL注入,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Java通過反射機(jī)制將對(duì)象封裝成JSON和JsonArray格式

    Java通過反射機(jī)制將對(duì)象封裝成JSON和JsonArray格式

    這篇文章主要介紹了Java通過反射機(jī)制將對(duì)象封裝成JSON和JsonArray格式,JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)實(shí)體類,都能夠知道這個(gè)類的所有屬性和方法,需要的朋友可以參考下
    2023-10-10
  • Springboot詳解RocketMQ實(shí)現(xiàn)廣播消息流程

    Springboot詳解RocketMQ實(shí)現(xiàn)廣播消息流程

    RocketMQ作為一款純java、分布式、隊(duì)列模型的開源消息中間件,支持事務(wù)消息、順序消息、批量消息、定時(shí)消息、消息回溯等,本篇我們了解如何實(shí)現(xiàn)廣播消息
    2022-06-06
  • SpringBoot使用POI進(jìn)行Excel下載

    SpringBoot使用POI進(jìn)行Excel下載

    這篇文章主要為大家詳細(xì)介紹了SpringBoot使用POI進(jìn)行Excel下載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • JAVA實(shí)現(xiàn)按時(shí)間段查詢數(shù)據(jù)操作

    JAVA實(shí)現(xiàn)按時(shí)間段查詢數(shù)據(jù)操作

    這篇文章主要介紹了JAVA實(shí)現(xiàn)按時(shí)間段查詢數(shù)據(jù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08

最新評(píng)論

雅安市| 齐河县| 寿宁县| 漾濞| 贵港市| 镇远县| 东平县| 凤凰县| 盐亭县| 宁津县| 玉门市| 霍山县| 汉川市| 玛多县| 玛多县| 稷山县| 睢宁县| 原阳县| 彩票| 墨竹工卡县| 大丰市| 永寿县| 姚安县| 凌云县| 玛曲县| 广水市| 民权县| 桦南县| 沁水县| 永宁县| 荆门市| 高要市| 夏邑县| 靖安县| 延长县| 大足县| 三河市| 萨嘎县| 曲阳县| 西乌珠穆沁旗| 辽阳市|