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

SpringBoot路徑映射配置的實現(xiàn)步驟

 更新時間:2025年08月21日 09:27:42   作者:future?romance  
本文介紹了如何在SpringBoot項目中配置路徑映射,使得除static目錄外的資源可被訪問,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

SpringBoot路徑映射

SpringBoot項目中,只有位于static中的資源可以直接被訪問

(訪問方式:http://主機:端口/資源名)

其他資源無法被直接訪問

這時就需要進行路徑映射配置

可以創(chuàng)建一個配置類,對其進行配置

// An highlighted block
@Configuration
public class WebMVCConfig extends WebMvcConfigurationSupport {

    // 路徑映射配置
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {

        // 將網頁地址欄中的 /order/**  映射到  工程類路徑下的 /order/ 中,以訪問resources/order中的資源
        registry.addResourceHandler("/order/**").addResourceLocations("classpath:/order/");
        // 磁盤目錄
        String path = "E:\\xxx\\xxx\\";   
        // 將網頁地址欄中的 /image/**  映射到  磁盤的某個目錄下,以訪問磁盤資源 
        registry.addResourceHandler("/image/**").addResourceLocations("file:" + path);
     
    }

}

如此,便實現(xiàn)了SpringBoot的資源路徑映射配置。

補:springboot 配置虛擬路徑映射 

我發(fā)現(xiàn)在很多springboot教程里幾乎沒有提到過URL映射,主要是很簡單,看看代碼基本上就明白了,我這里簡單說一說,也說一說與Django的一點區(qū)別。

@RequestMapping注冊URL映射

在Django中URL的映射是靠project里urls.py中的urlpatterns配置的,先說說Django怎么處理請求:

  • 一旦生成url頁面請求,請求傳遞到urls.py;
  • Django去urlpatterns中匹配鏈接(Django會在匹配到的第一個就停下來);
  • 一旦匹配成功,就會去執(zhí)行,path后面的方法,Django便會給出相應的view頁面(該頁面可以為一個Python的函數,或者基于view(Django內置的)的類),也就是用戶看到的頁面;
  • 若匹配失敗,則出現(xiàn)錯誤的頁面。

類似地,在springboot中也要有一個URL映射關系,這樣用戶在訪問URL鏈接時才能執(zhí)行不同的邏輯, 這里提到的邏輯正是MCV模式里說的控制層(C層),因此URL的映射跟控制層有很大關聯(lián),在springboot里是在控制層直接通過注解的方式來完成的。通常的做法是:

  • 創(chuàng)建一個名為controller的包
  • 然后在這個包下創(chuàng)建各種Controller
  • 通過注解 @RequestMapping 來注冊,實現(xiàn)URL的映射(也即訪問URL時所執(zhí)行的函數)。

可以先看一個簡單的例子:

@RestController
@EnableAutoConfiguration
public class HelloController {
    @Value("${version}")
    private String version;

    @Autowired
    private StudentProperties student_default;

    @Autowired
    private StudentTestBean student_test;

    @RequestMapping("/student")
    private String student(String name, Integer age) {
        if (name == null) {
            name = student_default.getName();
        }
        if (age == null) {
            age = student_default.getAge();
        }
        return String.format("Online: %s\nname: %s, age: %d\nname(Test): %s, age(Test): %d", version, name, age, student_test.getName(), student_test.getAge());
    }
}

通過@RequestMapping將**/student**映射到了HelloController的student函數,在運行項目時會看到springboot的輸出日志:

2018-10-30 14:57:08.116  INFO 13692 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/student]}" onto private java.lang.String com.example.useconfigurationproperties.HelloController.student(java.lang.String,java.lang.Integer)

在訪問http://localhost:8080/student時,會調用HelloController的student函數。

@RequestMapping中的method沒有默認值,如果不配置method,則以任何請求形式(RequestMethod.GET、RequestMethod.POST、RequestMethod.PUT、RequestMethod.DELETE)都可以訪問得到。

這種設計方法稍微有點混亂,沒有Django這種配置一個通用的表來的方便,Django的url映射關系很容易對比查看。而springboot的這種注解的方式就分散的比較零散,有時需要各個Controller點開查看。當然,也有一個稍微折中的辦法,就是可以在Controller類上映射某個子目錄URL,由該Controller類統(tǒng)一管理該子URL下的其他子URL,也就是分模塊管理的思想,里面再做映射就是綁定到具體函數了,這樣的效果看上去就不會那么亂了。

例如對于以下的代碼,CourseController類統(tǒng)一映射到了http://localhost:8080/course,內部函數映射如下:

  • 訪問http://localhost:8080/course時調用的是course函數
  • 訪問http://localhost:8080/course/queryCourseList時調用的是queryCourse函數
  • 訪問http://localhost:8080/course/add時調用的是addCourse函數
  • 訪問http://localhost:8080/course/update時調用的是updateCourse函數
  • 訪問http://localhost:8080/course/delete時調用的是deleteCourse函數
@Controller
@RequestMapping("/course")
public class CourseController extends BaseController {
    @Autowired
    private CourseService courseService;
    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @RequestMapping("")
    public String course(Model model) {
        model.addAttribute("ctx", getContextPath() + "/");
        return "courses";
    }

    /**
     * 查詢教程列表
     *
     * @param page
     * @return
     */
    @RequestMapping(value = "/queryCourseList", method = RequestMethod.POST)
    @ResponseBody
    public AjaxObject queryCourse(Page<?> page) {
        PageHelper.startPage(page.getPage(), page.getRows());

        Map<String,Object> pageParams = new HashMap<String,Object>();
        pageParams.put("page", page.getPage());
        pageParams.put("rows", page.getRows());

        List<Course> courseList = courseService.queryList(pageParams);
        PageInfo<Course> pageInfo = new PageInfo<Course>(courseList);
        return AjaxObject.ok().put("page", pageInfo);
    }

    /**
     * 新添教程
     *
     * @param course
     */
    @RequestMapping(value = "/add", method = RequestMethod.POST)
    @ResponseBody
    public AjaxObject addCourse(@RequestBody Course course) {
        courseService.save(course);
        return AjaxObject.ok();
    }

    /**
     * 修改教程
     *
     * @param course
     */
    @RequestMapping(value = "/update", method = RequestMethod.POST)
    @ResponseBody
    public AjaxObject updateCourse(@RequestBody Course course) {
        (course.getAuthor() + "");
        courseService.update(course);
        return AjaxObject.ok();
    }

    /**
     * 刪除教程
     *
     * @param ids
     */
    @RequestMapping(value = "/delete", method = RequestMethod.POST)
    @ResponseBody
    public AjaxObject deleteCourse(@RequestBody Long[] ids) {
        courseService.deleteByIds(ids);
        return AjaxObject.ok();
    }
}

Spring4.3以后為簡化@RequestMapping(method = RequestMethod.XXX)的寫法,故而將其做了一層包裝,也就是現(xiàn)在的GetMapping、PostMapping、PutMapping、DeleteMapping、PatchMapping。

@Controller和@RestController的區(qū)別

@RestController注解相當于@ResponseBody + @Controller合在一起的作用。

如果只是使用@RestController注解Controller,則Controller中的方法無法返回jsp頁面,或者html,配置的視圖解析器 InternalResourceViewResolver不起作用,返回的內容就是Return 里的內容。

如果需要返回到指定頁面,則需要用 @Controller配合視圖解析器InternalResourceViewResolver才行。如果需要返回JSON,XML或自定義mediaType內容到頁面,則需要在對應的方法上加上@ResponseBody注解。

使用@Controller 注解,在對應的方法上,視圖解析器可以解析return 的jsp,html頁面,并且跳轉到相應頁面。若返回json等內容到頁面,則需要加@ResponseBody注解

到此這篇關于SpringBoot路徑映射配置的實現(xiàn)步驟的文章就介紹到這了,更多相關SpringBoot路徑映射 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JAVA實現(xiàn)單例模式的四種方法和一些特點

    JAVA實現(xiàn)單例模式的四種方法和一些特點

    JAVA實現(xiàn)單例模式的四種方法和一些特點,需要的朋友可以參考一下
    2013-03-03
  • springboot打war包的全過程記錄

    springboot打war包的全過程記錄

    其實一般使用springboot使用打成jar包比較省事的,但也有很多童鞋是習慣使用war包的,下面這篇文章主要給大家介紹了關于springboot打war包的相關資料,需要的朋友可以參考下
    2022-06-06
  • Java基礎之教你如何正確運用依賴注入

    Java基礎之教你如何正確運用依賴注入

    最近發(fā)現(xiàn)很多使用Spring框架的Java代碼存在依賴注入方式的誤用,甚至是濫用.因此整理了這篇文章,歡迎大家一起探討,需要的朋友可以參考下
    2021-05-05
  • SpringBoot實現(xiàn)Excel讀取的實例教程

    SpringBoot實現(xiàn)Excel讀取的實例教程

    這篇文章主要給大家介紹了關于SpringBoot實現(xiàn)Excel讀取的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Java中Date日期時間類具體使用

    Java中Date日期時間類具體使用

    本文主要介紹了Java中Date日期時間類具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • clickhouse?批量插入數據及ClickHouse常用命令詳解

    clickhouse?批量插入數據及ClickHouse常用命令詳解

    這篇文章主要介紹了clickhouse?批量插入數據及ClickHouse常用命令,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • java序列化與反序列化的使用方法匯總

    java序列化與反序列化的使用方法匯總

    序列化是一種對象持久化的手段,普遍應用在網絡傳輸、RMI等場景中,這篇文章主要給大家總結介紹了關于java序列化與反序列化的使用方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-07-07
  • 使用mybatis-plus-generator進行代碼自動生成的方法

    使用mybatis-plus-generator進行代碼自動生成的方法

    這篇文章主要介紹了使用mybatis-plus-generator進行代碼自動生成的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Spring cloud alibaba之Ribbon負載均衡實現(xiàn)方案

    Spring cloud alibaba之Ribbon負載均衡實現(xiàn)方案

    Spring cloud Ribbon是基于Netflix Ribbon實現(xiàn)的一套客戶端的負載均衡工具,Ribbon客戶端提供一系列完善的配置,如超時、重試等,Ribbon也可以實現(xiàn)自己的負載均衡算法,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • Nacos配置中心的配置文件的匹配規(guī)則及說明

    Nacos配置中心的配置文件的匹配規(guī)則及說明

    這篇文章主要介紹了Nacos配置中心的配置文件的匹配規(guī)則及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論

南昌县| 迁西县| 荣成市| 佛教| 大田县| 那曲县| 文昌市| 赫章县| 遂平县| 浏阳市| 金秀| 邯郸市| 广南县| 京山县| 图片| 托里县| 乌鲁木齐市| 阿尔山市| 抚宁县| 陕西省| 华蓥市| 江阴市| 琼海市| 元江| 瑞金市| 那曲县| 大同县| 栖霞市| 仁化县| 宝清县| 万年县| 平江县| 延津县| 炎陵县| 余干县| 汶上县| 盱眙县| 长子县| 阜宁县| 扎赉特旗| 维西|