springMVC获取WEB-INF路径下资源

今天我需要获取WEB-INF下的资源文件,本来设置好响应头和响应码后,报了空指针。原来是

InputStream  in=servletContext.getResourceAsStream("/files/abc.txt");

请求的路径出现了问题,使用了

String classesUrl = this.getClass().getResource("").getPath().replaceAll("%20", " ");
String filePath = classesUrl.substring(0, classesUrl.indexOf("WEB-INF")) + "WEB-INF/files/abc.txt";

来获取路径,而该路径的结果是

E:/setups/apache-tomcat-9.0.0.M8_start/apache-tomcat-9.0.0.M8/webapps/demo/WEB-INF/files/abc.txt

显然是不对的,因为我的工程应用没有部署的服务器的webapps目录下。最后正确的写法是

InputStream  in=servletContext.getResourceAsStream("/WEB-INF/files/abc.txt");

 

下面记录一下源代码:

  @RequestMapping("/testResponseEntity")
  public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException{
    byte[] body=null;
    ServletContext servletContext=session.getServletContext();

    String classesUrl = this.getClass().getResource("").getPath().replaceAll("%20", " ");
    String filePath = classesUrl.substring(0, classesUrl.indexOf("WEB-INF")) + "WEB-INF/files/abc.txt";
    ///E:/setups/apache-tomcat-9.0.0.M8_start/apache-tomcat-9.0.0.M8/webapps/demo/WEB-INF/files/abc.txt

    //InputStream  in=servletContext.getResourceAsStream(filePath);
    String path= servletContext.getContextPath();
    InputStream  in=servletContext.getResourceAsStream("/WEB-INF/files/abc.txt");

    body=new byte[in.available()];
    in.read(body);

    HttpHeaders httpHeaders=new HttpHeaders();
    httpHeaders.add("Content-Disposition","attachment;filename=abc.txt");

    HttpStatus statusCode=HttpStatus.OK;

    ResponseEntity<byte[]> response=new ResponseEntity<byte[]>(body,httpHeaders,statusCode);
    return response;
  }

写得有点乱。早点休息吧。

Spring MVC 中使用 Thymeleaf 解析器处理 Web-INF 下的静态资源通常涉及设置视图解析路径和模板文件的引用。首先,在 SpringMVC 的配置文件 `applicationContext.xml` 或 `spring-boot-autoconfigure.xml` 中,配置 Thymeleaf 配置: ```xml <bean id="viewResolver" class="org.thymeleaf.spring4.view.ThymeleafViewResolver"> <property name="templateEngine" ref="templateEngine"/> <!-- 设置Thymeleaf解析器查找视图的位置 --> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".html"/> </bean> <!-- 如果使用的是Spring Boot,则可以在 Application.properties或YAML文件中配置 --> spring.thymeleaf.prefix=classpath:/WEB-INF/views/ spring.thymeleaf.suffix=.html ``` 然后在你的控制器方法中,你可以像这样使用 Thymeleaf 的表达式语言来引用资源: ```java import org.springframework.web.servlet.ModelAndView; @Controller public class YourController { @GetMapping("/your-resource") public ModelAndView getResource() { // 假设你想从Web-INF目录下引入css文件 String cssUrl = "resources/css/main.css"; ModelAndView modelAndView = new ModelAndView("your-template"); modelAndView.addObject("cssUrl", cssUrl); return modelAndView; } } ``` 在这个例子中,当访问 `/your-resource` 地址时,Thymeleaf 会自动加载并解析 `WEB-INF/views/your-template.html` 文件,并插入 `{@thymesVar id="cssUrl" value="${cssUrl}"}` 这样的表达式,将 `main.css` 资源链接到页面上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yGIS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值