【Java】Servlet 返回的html静态资源寻找失败

  • 在springboot项目中重写了一个servlet并且配置

server:

port: 8132

servlet:

context-path: /aaa

  • servlet 配置

@Bean

public ServletRegistrationBean commonServlet() {

if (log.isDebugEnabled()) {

log.debug("开始初始化common servlet");

}

ServletRegistrationBean servletServletRegistrationBean = new ServletRegistrationBean();

servletServletRegistrationBean.setServlet(new ResourceServlet("/support/"));

Map<String, String> initParams = new HashMap<>(10);

HfViewConfig bean = context.getBean(HfViewConfig.class);

if (bean != null && !bean.equals(new HfViewConfig())) {

initParams.put(PARAM_NAME_USERNAME, bean.getLogin());

initParams.put(PARAM_NAME_PASSWORD, bean.getPassword());

}

servletServletRegistrationBean.addUrlMappings(new String[]{"/common/*"});

servletServletRegistrationBean.setInitParameters(initParams);

if (log.isDebugEnabled()) {

log.debug("开始初始化common servlet 完成.");

}

return servletServletRegistrationBean;

}

  • 在首页添加了 本地的静态资源

<link href="https://segmentfault.com/q/1010000037670786/css/demo.css" rel="stylesheet">

<script src="https://segmentfault.com/q/1010000037670786/js/a.js"></script>

  • 在页面上加载失败了如何解决

【Java】Servlet 返回的html静态资源寻找失败

【Java】Servlet 返回的html静态资源寻找失败

在druid中有下面图中文件
【Java】Servlet 返回的html静态资源寻找失败
采用的读取方式即: 读取html文件本身,其html在浏览器中
【Java】Servlet 返回的html静态资源寻找失败
它的url会被带有
【Java】Servlet 返回的html静态资源寻找失败

相关druid配置代码

@Bean

public ServletRegistrationBean statViewServlet() {

ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/drc/*");

Map<String, String> initParams = new HashMap<>();

initParams.put("loginUsername", "admin"); //设置登陆账号密码

initParams.put("loginPassword", "123456");

initParams.put("allow", "");

bean.setInitParameters(initParams);

return bean;

}

回答

Spring Boot 加载静态资源的默认路径为

/META-INF/resources/  

/resources/

/static/

/public/

参见:
https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot
https://spring.io/guides/gs/serving-web-content/

support并不在默认路径之列,所以下面的样式和脚本不会被加载到。试试放到上面的路径之一。

即,可以在resources/目录下创建一个static/public/目录,并将静态内容放在该目录下。通过以下方式可以访问它们http://localhost:8080/your-file.ext。(假设server.port是8080)

也可以通过在application.properties配置文件中使用spring.resources.static-locations中自定义静态资源目录。

例如:

spring.resources.static-locations=classpath:/custom/ 

现在,您可以使用custom/下方的文件夹resources/提供静态文件。

更新:

也可以使用java config:

@Configuration

public class StaticConfig implements WebMvcConfigurer {

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

registry.addResourceHandler("/static/**").addResourceLocations("classpath:/custom/");

}

}

此配置将目录的内容映射customhttp://localhost:8080/static/**url。

  • 在druid中有这样一段代码

if (isRequireAuth() //

&& !ContainsUser(request)//

&& !checkLoginParam(request)//

&& !("/login.html".equals(path) //

|| path.startsWith("/css")//

|| path.startsWith("/js") //

|| path.startsWith("/img"))) {

if (contextPath.equals("") || contextPath.equals("/")) {

response.sendRedirect("/druid/login.html");

} else {

if ("".equals(path)) {

response.sendRedirect("druid/login.html");

} else {

response.sendRedirect("login.html");

}

}

return;

}

使用response.sendRedirect用来返回页面地址此时
【Java】Servlet 返回的html静态资源寻找失败
会发生变化会变为login.html
【Java】Servlet 返回的html静态资源寻找失败

以上是 【Java】Servlet 返回的html静态资源寻找失败 的全部内容, 来源链接: utcz.com/a/86623.html

回到顶部