• idea环境下SpringBoot Web应用引入JSP


    1. 环境

    开发环境:idea2019.3
    jkd版本:1.8
    springboot版本:2.6.2

    2. 引入JSP的步骤

    2.1 新建工程,引入依赖

    这里只是解析jsp,因此只需要引入springboot内嵌的tomcat对jsp的解析包

    <!-- 引入依赖:springboot内嵌的tomcat对jsp的解析包-->
    <dependency>
    	<groupId>org.apache.tomcat.embed</groupId>
    	<artifactId>tomcat-embed-jasper</artifactId>
    </dependency>
    

    这里引入依赖,网上很多教程,培训教材中,引入过多依赖,其实是多余的。仅仅访问jsp,只需要引入内嵌tomcat对jsp的解析包即可。

    如果jsp中使用了jstl,则需要引入jstl的包;这里并不需要。

    如果使用了servlet相关api,则引入servlet-api,这里并不需要

    2.2 建立webapp资源目录

    image

    这时,如果在webapp目录下右键新建jsp,发现在新建菜单中,没有jsp选项,解决方法如2.3

    2.3 将webapp设置为web资源存放目录

    打开项目结构(project structure),选择module,选择该moule的web项,添加资源目录。
    image

    这时,webapp目录编程带有绿色小点的图标。如下图所示:

    image

    2.3 创建jsp页面

    这里新建一个简单的index.jsp文件,内容如下所示:

    <%--
      Created by IntelliJ IDEA.
      User: Think
      Date: 2022/1/7
      Time: 12:06
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        这是springboot应用中引入的第一个jsp
    </body>
    </html>
    

    2.4 访问jsp

    运行springboot应用,浏览器访问index.jsp,发现无法访问

    2.5 访问不到jsp的原因及问题解决

    2.5.1 原因分析

    分析springboot工程的target目录,没有发现jsp相关的资源,说明webapp下的web资源没有编译到target下的输出目录,因此访问不到。

    另外一种情况也值得注意,在调试时候通过设置,即使web资源没有被打包输出到target目录,但是也可以访问。这是下面的第一种情况。但是在部署上线时,仍然需要手动配置将web资源输出到target目录。

    2.5.2 问题解决

    通过实验,有两种解决方法,可能有标准的解决方法,这里将找到的两种可行的方法总结如下:

    方法1:设置工作目录

    点击Edit Configuation,设置工作目录,如下图所示:
    image

    设置工作目录为 $MODULE_WORKING_DIR$(或者$MODULE_DIR$, idea2019.3中默认没有这个目录,可以用户输入$MODULE_DIR$和$MODULE_WORKING_DIR$效果相同)

    image

    方法2:配置web资源编译后的输出目录

    在pom文件的节点中设置web资源编译后的输出目录

    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    		<resources>
    			<resource>
    				<!-- 下面的目录可以自己设置 -->
    				<directory>src/main/webapp</directory>
    				<targetPath>META-INF/resources</targetPath>
    				<includes>
    					<!-- **匹配任意目录,*匹配任意字符 -->
    					<include>**/*.*</include>
    				</includes>
    			</resource>
    		</resources>
    	</build>
    

    3. 总结

    Q&A
    问:pom中的路径/代表什么,src/main/java代表什么

    答:对于maven工程,pom文件位于module的根目录,因此/代表的是module的根目录,src/main/java则代表模块下的src/main/java目录

    问:application.properties中的/代表什么,spring.mvc.view.prefix=/中的/代表什么

    答:
    application.properties是src/main/resource中的配置文件,在springboot的maven工程中,src/main/javasrc/main/resources,以及用户自己添加的src/main/webapp资源目录中的内容,在编译后都会被部署到target/classes下,因此/有如下对应关系:
    /代表了target/classes目录,由于src/main/java、src/main/resource、src/main/webapp中内容编译后会输出到target/classes,因此/也代表了这些目录。

    开发人员更关注的是src/main中的内容,因此,对于在application.properties中的/,记住下面的映射关系

    /	对应于		src/main/java
    			src/main/resources
    			src/main/webapp
    

    当然,你也可以使用方法2中在pom中添加配置,修改src下的目录和target下目录的默认映射关系。

  • 相关阅读:
    [转]django自定义表单提交
    [django/mysql] 使用distinct在mysql中查询多条不重复记录值的解决办法
    [Django]下拉表单与模型查询
    [Django]模型提高部分--聚合(group by)和条件表达式+数据库函数
    [Django]模型学习记录篇--基础
    [Django]数据批量导入
    怎么让自己的本地php网站让别人访问到
    HTML Marquee跑马灯
    marquee标签详解
    apache的虚拟域名rewrite配置以及.htaccess的使用。
  • 原文地址:https://www.cnblogs.com/arminker/p/15777053.html
Copyright © 2020-2023  润新知