SpringMVC访问WEB-INF下的jsp解决方案Spring Boot集成使用jsp

SpringMVC访问WEB-INF下的jsp解决方案

一. 问题

​将项目中用到的jsp等文件放在WEB-INF目录下。实际开发过程中,需要在框架页面通过iframe嵌入对应的具体页面,此处如果直接调用对应页面所在的url地址,则会提示404错误。

​ WEB-INF目录下的文件不能直接访问,需要映射,jsp放在那里也不能访问,应该是servlet或javabean才行。

二.解决思路

1. 为什么要将对应jsp放在WEB-INF下?

​ 传统的java web项目考虑一定的安全性都会选择把jsp放在web-inf下,毕竟jsp存在部分java代码是要经过编译运行的,通过后台servlet action或者controller进行跳转,这样也便于统一管理维护。再做一些过滤器拦截器之类的安全措施可以说是双重保险。

2.如何实现正常访问

(1)直接把JSP页面放到WEB-INF外的webapp目录下;

(2)Controller进行处理;

​ 通过ModelAndView来进行跳转,跳转到compare.jsp页面。当然要用ModelAndView的话需要在Spring的配置文件中配置
视图解析器。

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

(3)jsp:forward page;

<jsp:forward page="{路径|<%=表达式%>}"/><jsp:param name="参数名称" value="参数内容"/></jsp:forward>

(4)基于视图解析器,添加mvc:view-controller

两种用法

1、重定向
<mvc:view-controller path=“/” view-name=“redirect:/admin/index”/>
即如果当前路径是/ 则重定向到/admin/index

2、view name
<mvc:view-controller path=“/” view-name=admin/index"/>
如果当前路径是/ 则交给相应的视图解析器直接解析为视图

mvc:view-controller相当于@RequestMapping

注意:

1. 使用这个标签后,必须配置,否则会造成所有的@Controller注解无法解析

2.如果请求存在处理器,则这个标签对应的请求处理不起作用。因为请求先去找处理器,如果找不到,才使用这个标签




Spring Boot集成使用jsp

简介:

官方不推荐使用jsp作为页面,我们可以使用其他的模板引擎,比如 Thymeleaf和 freemarker,官方主推的是Thymeleaf。但是目前来说,很多项目的页面还是用的jsp.而且很多现成的项目用的jsp页面,扒过来就能用,当然如果时间允许的情况,还是不建议大家使用jsp,而是采用官方推荐的模板。

搭建项目

1.新建一个基础的 springboot WEB项目

2.pom.xml文件jar包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.mr</groupId><artifactId>springboot_jsp</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot_jsp</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><packaging>war</packaging><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--jsp支持--><!-- servlet 依赖. --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId></dependency><!-- tomcat 的支持.--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></dependency><!--引入Spring boot内嵌的Tomcat对jsp的解析包--><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><scope>provided</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory><includes><include>**/*.*</include></includes></resource><resource><directory>src/main/webapp</directory><targetPath>META-INF/resources</targetPath><includes><include>**/*.*</include></includes></resource></resources></build></project>

3. 新建webapp文件夹,与resources同级

在这里插入图片描述

4. 新建JSP页面,此时发现New里面没有JSP页面。需要设置一下才会出现

在这里插入图片描述

添加web

在这里插入图片描述

选择已经添加的webapp

在这里插入图片描述

此时webapp上有蓝色圆点,表示设置成功

在这里插入图片描述
在这里插入图片描述

5.application.properties

server.port=8082#页面默认前缀目录 默认在webapp下有别的文件夹可以,以文件夹/往下加
spring.mvc.view.prefix=/
#页面默认后缀目录
spring.mvc.view.suffix=.jsp``

简单Demo

6.JspController.java

@Controller
public class JspController {@GetMapping("/boot/index")public String index(Model model){model.addAttribute("msg","Spring boot集成jsp");return "index";}@GetMapping("/boot/aaa")    public String aaa(Model model){model.addAttribute("sss","boot 整合jsp");return "aaa";}
}

7.index.jsp

<%@pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title>
</head>
<body><h1>Hello word</h1>${msg}
</body>
</html>

8.aaa.jsp

<%--Created by IntelliJ IDEA.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>
${sss}
</body>
</html>

在这里插入图片描述

右键选择spring-boot:run启动项目即可。

浏览器效果

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot | 详解SpringBoot配置文件及其原理

文章目录一、配置文件二、YAML语法1、基本语法2、值的写法(1)、字面量&#xff1a;普通的值&#xff08;数字&#xff0c;字符串&#xff0c;布尔&#xff09;(2)、对象、Map&#xff08;属性和值&#xff09;(3)、数组&#xff08;List、Set&#xff09;三、配置文件值注入1、…

mysql 自连接 树形_自连接表的相关问题(树形结构)

问题一&#xff1a;自连接表肯定是相似 Id(PK),parentId(FK),name ….了Id假如是主键的话&#xff0c;parentId就是外键了&#xff0c;可是树形结构肯定是有根节点了&#xff0c;那么根节点的parentId按理说应该是null,原因是根节点没有父节点&#xff0c;可是主键Id是不能为空…

简述python程序的运行原理_谈谈 Python 程序的运行原理

执行 python demo.py 后&#xff0c;将会启动 Python 的解释器&#xff0c;然后将 demo.py 编译成一个字节码对象 PyCodeObject。在 Python 的世界中&#xff0c;一切都是对象&#xff0c;函数也是对象&#xff0c;类型也是对象&#xff0c;类也是对象(类属于自定义的类型&…

【深入理解JVM】:Java内存模型JMM

多任务和高并发的内存交互 多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏&#xff0c;使用每秒事务处理数&#xff08;Transactions Per Second&#xff0c;TPS&#xff09;这个指标比较能说明问题&#xff0c;它代表着一秒内服…

java 上下文加载器_【深入理解Java虚拟机 】线程的上下文类加载器

线程上下文类加载器线程上下文类加载器( Thread Context ClassLoader) 是从JDK1.2 引入的&#xff0c;类Thread 的getContextClassLoader() 与 setContextClassLoader(Classloader var1) 分别用来设置线程的上下文类加载器。如果没有指定线程的上下文的加载器&#xff0c;那么线…

You may use special comments to disable some warnings.Use // eslint-disable-next-line to ignore...

vue没写什么爆红 错误原因 ESLint] 对语法的要求过于严格导致编译的时候报上图那些错误。 要知道&#xff0c;这并不是代码有异常&#xff0c;而是代码格式有问题&#xff0c;这些错误并不会影响代码的执行结果。 解决方法 很简单&#xff0c;既然是ESLint 语法错误&#xff…

java is a like a_JAVA基础——is-a 、have-a、和 like-a的区别

1、is-a&#xff0c;has-a&#xff0c;like-a是什么在面向对象设计的领域里&#xff0c;有若干种设计思路&#xff0c;主要有如下三种&#xff1a;is-a、has-a、like-ajava中在类、接口、抽象类中有很多体现。了解java看这里&#xff1a;什么是Java了解类和对象看这里&#xff…

Java根据日期生成编号

1、Java根据日期生成编号 根据日期生成编号 1、使用 DateTimeFormatter DateTimeFormatter fmt DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");//设置日期格式 String newsNo "xw"LocalDateTime.now().format(fmt);2、使用 SimpleDateFormat Si…

Java数字位数不足前面补0的几种办法

public static void main(String[] args) {int num6; DecimalFormat decimalFormat new DecimalFormat("000000");String numFormat decimalFormat .format(num);System.out.println(numFormat);//打印结果"000006" }Testpublic void test() {this.printT…

java jni 原理_JNI的实现原理

JNI接口函数和指针Java虚拟机访问本机代码通过调用JNI的功能特性。JNI的功能都可以通过一个接口指针。一个接口指针是一个指向指针的指针。这个指针指向一个一个指针数组&#xff0c;这个数组中的每一个成员指向一个函数入口。每个接口的功能是在一个预定义的内部数组的偏移量。…

jQuery ajax读取本地json文件_jQuery请求本地JSON文件,在谷歌浏览器运行时报跨域错误_Vscode使用Live Server

json文件 {"first":[{"name":"张三","sex":"男"},{"name":"李四","sex":"男"},{"name":"王武","sex":"男"},{"name":"李…

java执行curl命令_Java执行curl命令

Java执行curl命令需要注意的是&#xff0c;命令需要以数组的形式传递参数&#xff0c;就是把正常的命令以空格切分成数组就行了。而且参数前后不能有空格&#xff0c;不然会报错。具体的测试代码如下&#xff1a;import java.io.BufferedReader;import java.io.IOException;imp…

Vue打包并发布项目

一、 打包vue项目步骤&#xff1a; 1、对当前vue项目进行打包的命令如下&#xff1a; npm run build2、打包完成&#xff0c;会输出Build complete并且在vue项目中会生成一个名字为dist的打包文件。如下图&#xff1a; 二、 使用静态服务器工具包发布打包的vue项目 1、首先…

java线程安全例子_Java总结篇系列:Java多线程(三)

本文主要接着前面多线程的两篇文章总结Java多线程中的线程安全问题。一.一个典型的Java线程安全例子1 public classThreadTest {23 public static voidmain(String[] args) {4 Account account new Account("123456", 1000);5 DrawMoneyRunnable drawMoneyRunnable …

Grammarly:最优秀的日常英文写作辅助工具——论文英文校验

使用Grammarly也有一些心得&#xff0c;在此分享给大家。 1&#xff0c;Grammarly是什么&#xff1f; Grammarly是一款在线语法纠正和校对工具&#xff0c;支持Windows、Mac、iOS和Android等多个平台。它能够检查单词拼写、纠正标点符号、修正语法错误、调整语气以及给出风格…

Spring如何将@RestController的对象自动转换为json_@ResponseBody 注解原理

我正在看一段代码&#xff0c;其中我假设spring决定在幕后使用Jackson为RestController自动将对象转换为json RestController RequestMapping("/api") public class ApiController {private RoomServices roomServices;Autowiredpublic ApiController(RoomServices…

jetty java web_i-jetty 下的JavaWeb开发(一)

最近需要将android端作为服务器进行开发&#xff0c;让android作为服务器&#xff0c;现阶段技术并不是很成熟&#xff0c;主要的服务器有i-jetty&#xff0c;是基于PC端的jetty的移植。i-jetty同tomcat类似&#xff0c;也是Servlet的容器&#xff0c;但是i-jetty需要使用andro…

SpringMVC @RequestBody和@ResponseBody原理解析

SpringMVC RequestBody和ResponseBody原理解析 前言 RequestBody作用是将http请求解析为对应的对象。例如&#xff1a; http请求的参数&#xff08;application/json格式&#xff09;&#xff1a; {"accountId": 10,"adGroupId": "12345678",…

java 高性能缓存_高性能Java缓存----Caffeine

简单介绍Caffeine是新出现的一个高性能的Java缓存&#xff0c;有了它完全可以代替Guava Cache&#xff0c;来实现更加高效的缓存&#xff1b;Caffeine采用了W-TinyLFU回收策略&#xff0c;集合了LRU和LFU的优点&#xff0c;提供了一个最佳的命中率&#xff0c;在效率上可以秒杀…

@ResponseBody 转化成json后与实体类字段名不一致_SpringMVC字符串解析成json对象(@RequestBody注解和@ResponseBody注解)

ResponseBody 转化成json后与实体类字段名不一致 实体类A字段名由B改成C后&#xff0c;Controller 中返回的List中字段名仍然是C 经过ResponseBody返回到前台后又变成了B 后来发现公司项目采用的是阿里的fastjson&#xff0c; 是开源的Json格式化工具库 此工具库是根据实体类…