精华内容
下载资源
问答
  • tomcat配置静态资源访问的三种方式

    万次阅读 2019-04-15 13:53:03
    第一种:复制要访问的文件a.txt至tomcat安装路径下的webapps/ROOT文件夹下: 访问路径为:localhost:8080/a.txt 或者在webapps文件夹下新建一个文件夹(test),将文件b.txt放在test文件夹下: ...

    转自:https://bbs.csdn.net/topics/392563121?list=lz

    第一种:复制要访问的文件a.txt至tomcat安装路径下的webapps/ROOT文件夹下:
                 访问路径为:localhost:8080/a.txt
                 或者在webapps文件夹下新建一个文件夹(test),将文件b.txt放在test文件夹下:
                 访问路径:localhost:8080/test/b.txt

    第二种:在tomcat安装路径下的conf/server.xml文件中,找到host节点元素,在host节点内定义子节点Context节点,该节点必须定义doBase(实际文件所在文件夹路径:例F:\test)属性,path(访问虚拟路径:例/test)属性,如下
    <Context doBase="F:\test" path="/t"></Context>
                 访问路径:localhost:8080/t/c.txt   即可访问到实际路径F:\test\c.txt文件

    第三种:在tomcat安装目录下conf/server.xml文件中找到Engine节点的name属性指定的文件夹/defaultHost属性名称的文件夹下(conf/Catalina/localhost)新建一个d.xml文件,文件中除了xml文件所需的头标签,还必须有Context标签,必须有doBase属性,如下
    <?xml version='1.0' encoding='utf-8'?>
    <Context doBase="F:\test" ></Context>
                访问路径:localhost:8080/d.txt

    展开全文
  • 静态资源访问拦截

    千次阅读 2016-09-11 10:07:36
    静态资源访问映射: 先调整web.xml中的DispatcherServlet的配置,使其可以捕获所有的请求: 1 2 3 4 5 6 7 8 9  springMVC  class>org.springframework.web.servlet.Disp

    静态资源访问映射:

    在前几年的web开发中,url通常是以.do、.action、.xhtml等等作为结尾,现在是Rest的时代,这样的url显得非常ugly。老版本的Spring MVC不能很好的处理静态资源,所以在web.xml中通常配置DispatcherServleturl-pattern类似.do、.action这种。因为如果请求映射配置成/的话,Spring MVC将拦截所有的请求(当然包括静态资源的请求),交由Controller处理,显然静态资源的请求到了Controller那里必然会导致no handler mapping的错误。

    那么怎么样在配置请求映射为\的情况下,让Spring MVC能拦截所有请求,同时将静态资源的请求交给web服务器来处理呢?在Spring3.0的版本中,Spring的团队给出了两种解决方案。

    web.xml中DispatcherServlet配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    

    通过上面的配置,让Spring MVC拦截所有的请求。

    方案一:<mvc:default-servlet-handler />

    在springmvc-servlet.xml中配置了<mvc:default-servlet-handler />之后,将在Spring MVC的context中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler类,这个类会检查每一个进入DispatcherServlet的url,如果是静态资源的请求,就将该请求转发给web服务器默认的servlet处理,如果是正常的业务请求则交由DispatcherServlet处理。

    上文提到web服务器默认的servlet,一般的web服务器默认servlet命名为“default”,因此DefaultServletHttpRequestHandler能找到它并将静态资源请求转发给它处理,如果你所使用的web服务器默认的servlet名称不是“default”,可以通过default-servlet-name属性来指定:

    1
    
    <mvc:default-servlet-handler default-servlet-name="xxx" />
    

    附Tomcat的默认servlet命名,tomcat的默认servlet命名可以在{TOMCAT_HOME_DIR}/conf/web.xml中找到:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    

    方案二:<mvc:resources />

    <mvc:default-servlet-handler />将静态资源请求交给web服务器默认servlet处理,而<mvc:resources />更牛逼,由Spring MVC自行处理静态资源请求,并且提供一些优化的手段。

    <mvc:resources />允许将静态资源存放在任意的位置,WEB-INF,类路径等等,通过location属性指定静态资源的位置即可,打破了传统web容器静态资源只能放在根路径下的限制。

    而且,<mvc:resources />根据Google page speed,yahoo yslow等浏览器优化原则对静态资源请求进行优化。比如可以通过cacheSeconds属性指定静态资源的缓存时间,充分利用客户端浏览器的缓存来提升响应能力,在response中根据配置设置响应报文头属性。

    在springmvc-servlet.xml中配置如下:

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

    以上配置将web根路径映射为resources路径。假如根路径下有images,js目录,images里面有1.jpg,js里面有index.js等文件,则可以通过/resources/images/1.jpg和/resources/js/index.js访问这两个静态资源。

    实践

    在实践中,方案一中的default-servlet-name千万不可配置错误,否则将会报错:

    1
    2
    3
    
    Caused by:
    
    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: A RequestDispatcher could not be located for the default servlet 'dsa'
    

    如果将default-servlet-name和我们web.xml中的servlet-name混为一谈的话,将default-servlet-name设置为servlet-name,将会出现java.lang.StackOverflowError的堆栈溢出错误。



    拦截器配置:

    web.xml设置:(/拦截所有请求)

    复制代码
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/dispatcher.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
     
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <!-- 所有的的请求,都会被DispatcherServlet处理 -->
        <url-pattern>/</url-pattern>
    </servlet-mapping> 
    复制代码

    spring MVC 配置文件拦截规则设置(没有匹配的将不会拦截):

    复制代码
    <!--配置拦截器, 多个拦截器,顺序执行 -->  
        <mvc:interceptors>    
            <mvc:interceptor>    
                <!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller -->  
                <mvc:mapping path="/" />  
                <mvc:mapping path="/account/**" />  <!-- 拦截用户路径 -->
                <mvc:mapping path="/image/**" />  <!-- 拦截图片管理路径 -->
                <mvc:mapping path="/upload/**" />  <!-- 拦截图片下载路径 -->
                <bean class="com.wzw.interceptor.LoginInterceptor"></bean>    <!-- 自定义拦截器路径 -->
            </mvc:interceptor>  
            <!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 -->  
        </mvc:interceptors>  
    复制代码

    拦截器代码:

    复制代码
    package com.wzw.interceptor;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
    import com.wzw.entity.Account;
    public class LoginInterceptor extends HandlerInterceptorAdapter{
        /**  
         * 在业务处理器处理请求之前被调用  
         * 如果返回false  
         *     从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链 
         * 如果返回true  
         *    执行下一个拦截器,直到所有的拦截器都执行完毕  
         *    再执行被拦截的Controller  
         *    然后进入拦截器链,  
         *    从最后一个拦截器往回执行所有的postHandle()  
         *    接着再从最后一个拦截器往回执行所有的afterCompletion()  
         */    
        @Override    
        public boolean preHandle(HttpServletRequest request,    
                HttpServletResponse response, Object handler) throws Exception { 
            String requestUri = request.getRequestURI(); //请求完整路径,可用于登陆后跳转
            String contextPath = request.getContextPath();  //项目下完整路径
            String url = requestUri.substring(contextPath.length()); //请求页面
            System.out.print("发生拦截...");
            System.out.println("来自:"+requestUri+"的请求");
            Account user =  (Account)request.getSession().getAttribute("account");   
            if(user == null){  //判断用户是否存在,不存在返回登录界面,继续拦截,存在通过拦截,放行到访问页面
                /**
                 * 拦截目录下请求,是否为ajax请求
                 *   是:无需登录,直接访问(因为我是用于首页的ajax登录请求)
                 *   否:跳转至登录界面
                 */
                if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){ 
                    //如果是ajax请求响应头会有,x-requested-with  
                    System.out.print("发生ajax请求...");
                    return true;
                    //response.setHeader("sessionstatus", "timeout");//在响应头设置session状态  
                }else{
                    System.out.print("返回主页...");
                    request.getRequestDispatcher("/index.do").forward(request, response);//转发到登录界面 
                }  
                return false;  
            }else  
                return true;     
        }    
        
        /** 
         * 在业务处理器处理请求执行完成后,生成视图之前执行的动作    
         * 可在modelAndView中加入数据,比如当前时间 
         */  
        @Override    
        public void postHandle(HttpServletRequest request,    
                HttpServletResponse response, Object handler,    
                ModelAndView modelAndView) throws Exception {     
            if(modelAndView != null){  //加入当前时间    
                modelAndView.addObject("var", "测试postHandle"); 
            }    
        }    
        
        /**  
         * 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等   
         *   
         * 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion()  
         */    
        @Override    
        public void afterCompletion(HttpServletRequest request,    
                HttpServletResponse response, Object handler, Exception ex)    
                throws Exception {    
        }    
    }
    复制代码
    展开全文
  • 我想给项目配置一个虚拟路径(images),用于储存图片文件,...到了静态资源,请问我要怎么设置才可以让它走拦截器,就是说让这个虚拟路径作为项目 的一个子文件夹,而不是tomcat管理的文件夹。我用的是springmvc框架!
  • Tomcat配置外部访问静态资源

    千次阅读 2019-05-13 14:15:44
    若要访问目录,则还需要在web.xml中增加设置,再打开Tomcat安装目录,打开conf/web.xml 文件,在其中找到 <init-param> <param-name>listings</param-name> <param-value>false</...

    打开Tomcat安装目录,在server.xml中标签中,增加
    <Context docBase="硬盘目录" path="虚拟路径" reloadable="true"/>
    例如:<Context docBase="D:/apache-tomcat-8.0.36/" path="/" reloadable="true"/>

    若要访问目录,则还需要在web.xml中增加设置,再打开Tomcat安装目录,打开conf/web.xml 文件,在其中找到

    <init-param>
    
    <param-name>listings</param-name>
    
    <param-value>false</param-value>
    
    </init-param>
    
    将false设成true保存。
    

    启动tomcat,输入地址:http://localhost:8082/data/15577225822313103.jpg,能打开则表示配置成功。

    展开全文
  • 1 现象 ...原本在springboot内置Tomcat中运行项目,资源访问路径URL类似于:http://localhost:8080/css/my.min.css 是不是发现多了个项目名称? 咋办?把前台资源路径该一下可以吗 http://localhost:808

    1 现象

    404、或者没有加载样式或者图片等静态资源
    静态资源引入失败,在浏览器按住F12,看一下静态资源路径地址,发现
    地址 : http://localhost:8080/myproject/css/my.css
    疑惑:这看上去没啥问题呀?

    2 原因

    原本在springboot内置Tomcat中运行项目,资源访问路径URL类似于:http://localhost:8080/css/my.min.css
    是不是发现多了个项目名称?
    咋办?把前台资源路径该一下可以吗
    http://localhost:8080 拼 /css/my.min.css
    这样可以看起来搞成功
    但是如果项目使用的是Https的或者项目端口改了,是不是就跪了。有办法解决

    3 解决

    使用拦截器
    在Java后端定义一个拦截器,用来获取 request.getContextPath() 然后传到前端,request.getContextPath() 得到的是项目的根路径
    获取的路径是动态的,即使协议、端口号、项目名改了,静态资源依然能找到

    @Component
    public class CommonIntercepter implements HandlerInterceptor {
    
        private final Logger logger = LoggerFactory.getLogger(this.getClass());
    
        @Override
        public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
             return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {
             request.setAttribute("path", request.getContextPath());
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception {
    
        }
    }
    

    前端 (freemarker)

    <link href="${path!}/css/bootstrap.min.css" rel="stylesheet">
    <link href="${path!}/css/font-awesome.min.css" rel="stylesheet">
    <link href="${path!}/css/plugins/bootstrap-table/bootstrap-table.min.css" rel="stylesheet">
    <link href="${path!}/css/animate.css" rel="stylesheet">
    <link href="${path!}/css/style.css" rel="stylesheet">
    

    这样在浏览器请求资源时候是前缀就可以动态获取了

    展开全文
  • 在conf文件夹的server.xml中添加配置 &lt;Context docBase="/zhwater/uploadFiles" path="/uploadFiles" reloadable="... docBase为服务器上项目真实路径, path为访问路径。 ...
  • 静态资源请求被拦截问题

    千次阅读 2018-11-07 10:20:12
    SpringMVC中配置URL拦截,非常简单。网上找个示例,就能通过。但是,在我做了好几个Web项目,又参与了别人主导的Web项目时,发现URL配置也非常有学问。 先说说一种比较常见的: &lt;servlet&gt; &lt;...
  • springmvc 拦截器拦截静态资源

    万次阅读 2016-09-13 15:53:21
    但是,千万千万要注意一点:静态资源的放行。  上代码: &lt;mvc:resources mapping="/resources/**" location="/static/resources" /&gt; &lt;mvc:resources mappin...
  • 经过博主的测试,在springboot2.0以后中如果你配置注册了拦截器的话那么你的静态资源将需要手动配置一下,不然会访问不到,不过在2.0版本以前则没有这个问题下面贴上配置静态资源的方法: 在注册拦截器的时候设置...
  • SSM项目静态资源访问不到解决方法

    千次阅读 2019-10-10 21:27:56
    ssm框架搭建静态资源访问不到的问题 ssm框架中静态资源的访问不到解决方法 静态资源访问报404解决办法 原因: 如果在web.xml中有对spring的DispatcherServlet请求url映射有如下配置 <servlet> <servlet-...
  • 在linux系统下 安装tomcat 加载项目 项目可以访问 但是样式没有出现 坐等大牛给解决方式
  • 原因:这是因为其中的DispatcherServlet会对静态资源进行拦截,导致了静态资源无法访问。解决方案:方案一、在web.xml中设置defaultServlet,注意这个配置需要DispatcherServlet拦截的前面,才能起到提前拦截的效果...
  • 使用maven的tomcat插件,为项目配置路径后,静态资源无法访问 spring拦截路径是:*.html 配置路径如图: sprin配置文件中也以配置静态资源映射: 静态文件位置如图: 此时访问localhost:8080/student 不管路径...
  • 一、SpringMVC中拦截/和拦截/*的区别 web.xml中SpringMVC配置信息: <!-- 【加载流程】:tomcat服务启动时,会首先加载web.xml,然后监听器会默认去加载Spring的相关配置文件,从而创建spring容器中的各个bean组件...
  • 背景:项目打包放在Tomcat下,webapps/big/,插件资源访问路径:ip:port/libDecoder.wasm(localhost:8080/libDecoder.wasm),404 1. wasm文件在tomcat中配置content-type 在tomcat的conf目录下的web.xml文件,增加...
  • 解决ssm拦截静态资源的问题

    千次阅读 2017-05-11 09:53:16
    SpringMVC框架中, jsp页面引用的js,css,html等静态文件在运行时出现404错误,也就是说找不到文件路径;...如果你的配置描述符文件(web.xml)中,DispatcherServlet拦截为"*.do"这样的有后缀的URL,就不存在访问
  • SpringBoot配置静态资源路径与拦截

    千次阅读 2018-11-01 09:48:02
    一、整合springmvc/访问静态资源 我们接着上一节的说,对于springboot我们应该也是有了相应的了解了,上节中说到修改tomcat端口号,我们可以先测试一下,在application.properties中添加如下配置 # tomcat端口 ...
  • SSM要拦截资源首先要有一个拦截器 springmvc中声明拦截器 在springmvc的配置文件中声明要拦截的请求和处理拦截拦截器 <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/lanjie/**"/&...
  • 实现org.springframework.web.servlet.config.annotation.WebMvcConfigurer 接口,可以保留springboot 的拦截器默认配置,访问资源不用做任何处理。 继承org.springframework.web.servlet.config.annotation....
  • 自己在做作业的时候碰到在jsp里导图片无法正常显示的情况,后来发现是自定义的interceptor对图片进行了拦截,所以无法获取到图片 .xml文件里的代码 web.xml里的部分配置信息(配置DispatcherServlet): <!-- ...
  • 在linux中运行的tomcat设置nginx代理。 1、编辑nginx.conf文件。server { listen 80; server_name www.demo.com; charset utf-8; location / { root html;
  • <servlet-mapping> <servlet-name>springMvc</servlet-name> <url-pattern>/*</url-pattern>...不管是/还是/*都会拦截静态资源,无法访问静态资源 放行只需在spring-servlet.xml...
  • 在将p模块迁移到Spring Boot框架下的过程中,发现了这样一个问题:在访问静态资源时,我们为SpringSecurity配置的AfterAuthenticatedProcessingFilter会错误地拦截请求,并导致抛出异常。经调研发现,这是Spring ...
  • 关于SpringMVC静态资源访问 今天在使用jquery时js的请求被拦截,查看原因之后时因为使用SpringMVC后所有的请求都由DispatcherServlet来处理,而js请求找不到对应的处理器所以被拦截,查了资料后可以使用Tomcat的默认...
  • SpringMVC静态资源访问

    千次阅读 2018-11-05 21:05:42
    一,SpringMVC静态资源拦截问题 SpringMVC的工作机制是:来自浏览器的所有访问都会被前端控制器(DispatcherServlet)捕获,然后前端控制器把请求转交给处理器映射(HandlerMapping),HandlerMapping为请求分配对应...
  • 使用SpringMVC框架的时候...1. 使用springmvc标签配置静态文件的访问,允许DispatcherServlet不拦截静态资源 2. 在项目的web.xml中配置不拦截 Tomcat, Jetty, JBoss 自带的默认Servlet的名字 -- "default" We
  • 静态资源处理 在dispatcher-servlet.xml配置文件中配置下面的一行配置即可 <!-- 放行静态资源, mapping匹配你请求的URI; location指定静态资源的位置(建议前后面都加/) --> <mvc:resources mapping="/...
  • springboot静态资源访问+jsp

    千次阅读 2019-05-06 16:39:11
    因为前端选择的是jsp页面,所以就将静态资源都放到了webapp下,webapp是自己建的,springboot项目创建完毕无该文件夹。 使用的是外置tomcat,版本tomcat7 项目整体结构: 配置文件: 启动类:不拦截.do请求 ...
  • 打开tomcat下的conf目录,然后...1.DefaultServlet是处理静态资源的Servlet,在tomcat的conf目录下web.xml, <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apac...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,995
精华内容 6,798
关键字:

tomcat拦截静态资源访问