当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring提供. html文件

吕灿
2023-03-14

我正在使用Spring开发一个网站,并尝试提供不是. jsp文件(例如. html)的资源

现在我已经注释掉了servlet配置的这一部分

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
        p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />

并尝试从控制器返回资源的完整路径。

@Controller
public class LandingPageController {

protected static Logger logger = Logger.getLogger(LandingPageController.class);

@RequestMapping({"/","/home"})
public String showHomePage(Map<String, Object> model) {
    return "/WEB-INF/jsp/index.html";   
   }
}

索引。该文件夹中存在html文件。

注意:当我更改索引时。要索引的html。jsp my server现在可以正确地为页面提供服务。

谢谢你。

共有3个答案

蒋培
2023-03-14

问题的背景

首先要了解的是:呈现jsp文件的不是spring。是JspServlet(org.apache.jasper.servlet.JspServlet)实现了这一点。这个servlet是Tomcat(jasper编译器)自带的,而不是spring自带的。这个JspServlet知道如何编译jsp页面以及如何将其作为html文本返回给客户端。默认情况下,tomcat中的JspServlet只处理匹配两种模式的请求:*。jsp和*。jspx。

现在,当Spring使用InternalResourceView(或JstlView)呈现视图时,真正发生了三件事:

  1. 从模型中获取所有模型参数(由您的控制器处理程序方法返回,即"public ModelAndView doThings(){返回new ModelAndView("home") }"
  2. 将这些模型参数公开为请求属性(以便可以被JspServlet读取)
  3. 将请求转发到JspServlet。Request estDispatcher知道每个*. jsp请求都应该转发到JspServlet(因为这是默认的tomcat配置)

当您简单地将视图名称更改为home.htmltomcat将不知道如何处理请求。这是因为没有servlet处理*. html请求。

解决方案

如何解决这个问题。有三种最明显的解决方案:

  1. 将html公开为资源文件
  2. 指示JspServlet也处理*. html请求
  3. 编写您自己的servlet(或传递到另一个现有的servlet请求到*. html)。

有关如何实现这一点的完整代码示例,请参考我在另一篇文章中的回答:如何在Spring MVC中将请求映射到HTML文件?

辛锦
2023-03-14

我只想补充一点,您不需要为此实现控制器方法,因为您可以在servlet配置文件中使用视图控制器标记(Spring 3):

<mvc:view-controller path="/" view-name="/WEB-INF/jsp/index.html"/>
缑泓
2023-03-14

最初的问题是,配置指定了一个属性后缀=.jsp”,因此ViewResolver实现类将添加。jsp到从方法返回的视图名称的末尾。

但是,由于您注释掉了InternalResourceViewResolver,因此,根据应用程序配置的其余部分,可能没有注册任何其他ViewResolver。你可能会发现现在什么都不起作用了。

由于. html文件是静态的,不需要servlet处理,因此使用更高效、更简单

例如:

<mvc:resources mapping="/static/**" location="/static/" />

它会将所有以static开头的请求传递到webapp/static目录。

因此,通过将index.html放入webapp/静态/并使用返回"静态/index.html";从您的方法中,Spring应该可以找到视图。

 类似资料:
  • 我正在使用Spring开发一个网站,并尝试提供不是. jsp文件(例如. html)的资源 现在我已经注释掉了servlet配置的这一部分 并尝试从控制器返回资源的完整路径。 索引。该文件夹中存在html文件。 注意:当我更改索引时。要索引的html。jsp my server现在可以正确地为页面提供服务。 谢谢你。

  • 因此,我试图遵循这篇关于如何使用Spring为html文件提供服务的指南:http://spring.io/guides/gs/serving-web-content/ 映射: 使用@Controller引发错误: 编辑:

  • 问题内容: 如何使用Go Web服务器提供index.html(或其他静态HTML文件)? 我只想要一个基本的静态HTML文件(例如,一篇文章),就可以从Go Web服务器上提供该文件。HTML应该可以在go程序之外进行修改,就像使用HTML模板时一样。 这是我的Web服务器,仅托管硬编码文本(“ Hello world!”)。 问题答案: 使用Golang net / http包,该任务非常容易

  • 我有一个由html、js和css文件组成的restful应用程序。应用程序分为两个文件夹,常规文件夹和管理文件夹。我已经将这两个文件夹放在Spring静态目录下。 资源/主要/资源/静态/常规 src/main/resources/static/admin src/main/资源/静态/常规/index.html

  • 我想发布一个使用jitpack开发的android库。但我想在不发布源代码的情况下完成它。我不希望jitpack构建它,我将构建的输出(AAR文件)上传到github,我希望Jitpak只提供这些文件。 https://jitpack.io/docs/PRIVATE/#artifact-sharing 中的说明不适用,因为 UI 不再具有允许共享项目的设置选项卡。 还有,有没有更好的办法呢? 任何

  • 我在这里运行了spring boot示例web静态项目,对pom进行了此更改 并添加了此类以提供来自相同文件夹位置的重复页面index2.html: json url工作正常,但当我尝试访问localhost:8080/tw我得到一个空白页,并在控制台这个错误: 我做错什么了吗?