【web】支持jsp+mvc访问

直接使用SpringMVC时配置访问jsp页面时很容易的事,但是由于spring Boot使用内嵌的servlet容器,所以对jsp的支持不是很好,而且也不建议使用jsp,但是为了满足这种返回jsp页面的需求同时又想享受Spring Boot免去各种配置的麻烦,经本各种试验,有两种方法可以供参考,在说明以下两种方法前首先声明所用的依赖如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

spring-boot-starter-web是用来支持web应用开发的,在导入之后会自动导入内嵌的servlet容器,比如Tomcat,但是要注意的是此时并没有能解析jsp页面的jasper模块,由此可以看出内嵌的servlet容器并不是全部导入的,而是分模块部分导入的,Jasper需要我们手动导入。如果还要使用jstl库,也可以继续导入:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>

1、在工程中返回jsp页面

由于Spring Boot的目录结构和普通的Web应用的目录结构是不同的,为了返回jsp,首先要建立对应的web应用程序目录,在/src/main下建立WEB-INF/jsp目录,形成/src/main/WEB-INF/jsp,然后将我们的jsp页面放在下面即可。

然后再继续配置文件,如下:

application.properties

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

或者application.yml

spring:
  mvc:
    view:
      prefix: /WEB-INF/jsp/
      suffix: .jsp

这与只使用SpringMVC时的配置十分类似,而且可以看出使用的是InternalResourceViewResolver视图解析器。使用代码测试一下:

@Controllerpublic class SpringBootController {

  @RequestMapping("/index")
  public String index(){
    return "main";
  }

}

以上会返回/src/main/WEB-INF/jsp/main.jsp视图。 
但是,返回页面只是在eclipse这种IDE中直接运行Spring Boot程序时会起作用,如果打包成jar包后是不会包含我们创建的WEB-INF/jsp目录的,也就没有我们定义的jsp页面,所以会返回404状态码,所以这种方法实际上是没有什么意义的,但可以解决:

①将打成jar包的方式改为war包

②修改pom.xml文件配置

<!-- 忽略无web.xml警告 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
       <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>              
<resource>
    <directory>src/main/resources</directory>
    <includes>
        <include>**/*</include>
    </includes>
</resource>

<!-- 打包时将jsp文件拷贝到META-INF目录下-->
<resource>
    <!-- 指定resources插件处理哪个目录下的资源文件 -->
    <directory>src/main/webapp</directory>
    <!--注意此次必须要放在此目录下才能被访问到-->
    <targetPath>META-INF/resources</targetPath>
    <includes>
        <include>**/**</include>
    </includes>
</resource>  

③静态文件存放目录src/main/resources,默认的静态资源文件位置是/static下

jsp直接引用静态文件

<script src="jquery-3.1.1.min.js" type="text/javascript"></script>
<script src="main.js" type="text/javascript"></script>

④打成war包后运行,一切正常

2、在打包后返回jsp页面

如果想在打包后使用Java -jar ***.jar来运行代码,就要使用如下这种方法,在/src/main/resources/中建立如下的目录META-INF/resources/WEB-INF/jsp,然后application.properties的配置和第一种方法相同。但是这样在使用mvn package打包后会包含上面建立的目录,如下: 

这时使用java -jar SpringBootTemplate-0.0.1-SNAPSHOT.jar就可以愉快地部署应用程序了,顺便说一句,此时在jsp页面也可以使用EL表达式获取Model中存储的数据了。

时间: 2024-11-10 00:32:34

【web】支持jsp+mvc访问的相关文章

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验. 1.说一说Servlet生命周期(非常重要) Servlet生命周期包括三部分: 初始化:Web容器加载servlet,调用init()方法 只执行一次 处理请求:当请求到达时,运行其service()方法.service()自动调用与请求相对应的doXXX

如何让你的 Asp.Net Web Api 接口,拥抱支持跨域访问。

由于 web api 项目通常是被做成了一个独立站点,来提供数据,在做web api 项目的时候,不免前端会遇到跨域访问接口的问题. 刚开始没做任何处理,用jsonp的方式调用 web api 接口,总是报一个错误,如下: 如果你想用JSONP来获得跨域的数据,WebAPI本身是不支持javascript的callback的,它返回的JSON是这样的: {"YourSignature":"嫁人要嫁程序员,钱多话少死得早"} 然而,JSONP请求期望得到这样的JSON

Java Web基础 --- Jsp 综述(上)

摘要: J2EE是一套规范,而Servlet/Jsp是J2EE规范的一部分,是Tomcat的主要实现部分.在最初的应用实践中,当用户向指定Servlet发送请求时,Servlet利用输出流动态生成HTML页面,这导致Servlet开发效率极为低下.JSP技术通过实现普通静态HTML和动态部分混合编码,使得逻辑内容与外观相分离,大大简化了表示层的实现,提高了开发效率.本文以JSP的本质是Servlet为主线,结合JSP转译后所得的Servlet,详细探讨了JSP的原理.执行过程.脚本元素.编译指令

Spring Boot干货系列:(五)开发Web应用JSP篇

Spring Boot干货系列:(五)开发Web应用JSP篇 原创 2017-04-05 嘟嘟MD 嘟爷java超神学堂 前言 上一篇介绍了Spring Boot中使用Thymeleaf模板引擎,今天来介绍一下如何使用SpringBoot官方不推荐的jsp,虽然难度有点大,但是玩起来还是蛮有意思的. 正文 先来看看整体的框架结构,跟前面介绍Thymeleaf的时候差不多,只是多了webapp这个用来存放jsp的目录,静态资源还是放在resources的static下面. 引入依赖 使用内嵌的to

YbSoftwareFactory 代码生成插件【二十一】:Web Api及MVC性能提升的几个小技巧

最近在进行 YbSoftwareFactory 的流程功能升级,目前已经基本完成,现将用到的一些关于 Web Api 及 MVC 性能提升的一些小技巧进行了总结,这些技巧在使用.配置上也相当的简单,但通常都能大大提高应用程序的性能,希望对大家有用. 一.缓存 为了避免每次请求都去访问后台的资源,我们一般会考虑将一些更新不是很频繁的,可以重用的数据,通过一定的方式临时地保存起来,后续的请求根据情况可以直接访问这些保存起来的数据,这种机制就是所谓的缓存机制.缓存分为页面输出缓存,内存数据缓存和缓存依

简单jsp mvc实例

开发环境 Eclipse Java EE IDE for Web Developers. Version: Luna Service Release 2 (4.4.2) 需求 jsp MVC 模式读取oracle数据库中的EMP表的数据 第一步:建立web工程 1)在Eclipse工程领域的空白处鼠标右键,New --> Dynaminc Web Project 2)Project Name:web01 点击下一步 3)下一步 4)打钩后下一步 5)web工程建立完成 第二步:建立测试页并发布到

web前端之MVC的JavaScript Web富应用开发一:MVC和类

web前端之MVC的JavaScript Web富应用开发一:MVC和类 开篇: 本书以 assert() 和 assertEqual() 函数来展示变量的值或者函数调用的结果. assert() 是一种快捷表述方式, 用来表示一个特定的变量( revolves to true). 这在自动化测试中是一种非常常见的模式. assert() 可以接收两个参数 : 一个值和一个可选的消息. 如果运行结果不是真值, 这个函数将抛出一个异常 : var assert = function(value,

让jetty启用支持jsp功能

1.  下载 Jetty 6 的压缩包 2.  将 Jetty 6 下的 jsp 2.1 目录下的文件复制到 Jetty 7 的 lib 目录 3.  运行 java -jar start.jar --list-options 来检查是否支持 JSP 4.  编辑 jetty.ini 文件,在 OPTIONS 中增加 jsp一项,如下 OPTIONS=Server,jmx,resources,websocket,ext,jsp 5.  启动 Jetty 即可. 而在 Jetty 8 (最新版是M

Equinox OSGi服务器应用程序的配置步骤 (支持JSP页面)

本文介绍在Eclipse里如何配置一个简单的基于Eclipse Equinox OSGi实现的Web应用程序,在它的基础上可以构造更加复杂的应用,本文使用的是Eclipse 3.3.1版本,如果你的Eclipse版本在3.2.0或以上应该都可以. 51CTO编辑推荐:OSGi入门与实践全攻略 一.支持静态页面和Servlet 1. 创建一个新的plugin项目, net.bjzhanghao.osgi.test,在向导第一步里选中“This plug-in is target,在下一步的“Plu