Java工程的静态资源不能显示的问题

首先,关于静态资源不能访问,开始原以为无非就是在spring-mvc的配置文件里面加入<mvc:default-servlet-handler/>  和<mvc:annotation-driven />,其中<mvc:default-servlet-handler/>就是处理静态资源的。但是今天,我的项目出现了所有页面的静态资源都不能访问的情况。首先先看看web.xml中的一段配置

        <servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring/springmvc-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<!-- Map all requests to the DispatcherServlet for handling -->
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<!-- <url-pattern>*.htm</url-pattern>
		<url-pattern>*.do</url-pattern> -->
		<url-pattern>/</url-pattern>
	</servlet-mapping>

这里会拦截所有的请求,想要访问静态资源要在spring-mvc的配置文件里面加入<mvc:default-servlet-handler/>  和<mvc:annotation-driven />。都加了,但是今天问题还不能解决。于是就继续找。我开始的时候在spring-mvc中配置了两个拦截器

        <mvc:interceptors>
		<bean id="loginInterceptor" class="com.atguigu.atcrowdfunding.interceptor.LoginInterceptor"></bean>
		 <bean id="authorInterceptor" class="com.atguigu.atcrowdfunding.interceptor.AuthorInterceptor"></bean> 
	</mvc:interceptors>

这两个拦截器也会拦截所有的请求。包括静态资源,这次出错的地方主要在LoginInterceptor

package com.atguigu.atcrowdfunding.interceptor;

import java.util.HashSet;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler;

import com.atguigu.atcrowdfunding.bean.User;
import com.atguigu.atcrowdfunding.util.Const;

public class LoginInterceptor extends HandlerInterceptorAdapter{

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		
		
		
		Set<String> publicResourceSet = new HashSet<String>();//公共资源,白名单,直接放行
		publicResourceSet.add("/login");
		publicResourceSet.add("/regist");
		publicResourceSet.add("/index");
		publicResourceSet.add("/registUser");
		publicResourceSet.add("/loginUser");
		publicResourceSet.add("/checkLoginacct");
		
		
		String servletPath = request.getServletPath();
		
		if(publicResourceSet.contains(servletPath)) {
			return true;
		}
		
		HttpSession session = request.getSession();
		
		User user = (User) session.getAttribute(Const.LOGIN_USER);
		
		if(user!=null) {
			return true;//放行
		}else {
			response.sendRedirect(request.getContextPath()+"/login");
			return false;
		}
		
	}
}

在这里,这个拦截器也要拦截一些请求,如果属于静态资源,就会走return false,不会放行,所有,静态资源一直访问不到。所以只有在拦截器中加入判断是否为静态资源,若为静态资源,让他放行,就可以了。

if(handler instanceof DefaultServletHttpRequestHandler) {
			return true;
		}
其中 DefaultServletHttpRequestHandler为默认的静态资源的Handler,所以放行就可以了。

困扰了一天了。。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 JSP实验基于JavaWeb的机房预约系统源码+sql数据库+实验说明.zip 该项目是个人毕设项目源码,评审分达到95分,都经过严格调试,确保可以运行!放心下载使用。 该项目资源主要针对计算机、自动化等相关专业的学生或从业者下载使用,也可作为期末课程设计、课程大作业、毕业设计等。 具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现类似其他功能。 编写一个首页,该页面能够自动跳转到WelcomeServlet 编写一个简单的机房预约系统,通过该系统实验室管理员可以完成机房的预约登记操作; 编写展示WelcomeServlet,该Servlet映射到首地址“/”,通过Java Bean获取所有机房的预约信息,并将数据转发到reservation .jsp页面; 编写机房预约页面(reservation .jsp),该页面能够显示所有的机房预约信息,预约界面应该以表格的形式展示每个机房哪些时间段可选,哪些时间段已被哪位教师占用;同时管理员可以在该页面上完成预约登记操作,登记信息包括:教师、机房、时间段。 编写样式表reservation.css,利用DIV+CSS布局对机房预约页面(reservation .jsp)进行美化; 编写JavaScript脚本reservation.js,该脚本主要功能为: (1)处理实验室管理员对时间段、机房的选择操作(可以通过在预约表格上单击单元格的方式来选择某机房的预约时间段,时间段选中与否应有状态区别); (2) 校验预约信息的正确性(当管理员单击已被占用的机房时间段或输入错误的教师信息时报错) 编写ReservationServlet,该Servlet能够接收页面传过来的预约数据,并能够调用Java Bean完成相关预约操作; 编写一个预约处理类ReservationBean,该处理类能够通过JDBC实现预约信息的查询以及预约信息的处理。 简易机房预约系统 拙作 初次接触Servlet做的简单玩意 使用Tomcat10.0.17部署 在JDK16环境下通过测试 默认使用H2数据库,数据库位置为D:\h2db。 如需更改可至src/main/java/beans/ReservationBean.java第57-61行中修改数据库驱动(类型)及数据库位置。 # 预览 静态页面预览地址:https://stallion-x.github.io/RoomReservationSystem/

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值