开发者社区> 问答> 正文

servlet 拦截所有请求之后如何做分发 :报错

最近犯了迷糊,写了一个servlet urlmapping配置成/*,如果是访问jsp,则直接转发这个请求,但是又会被这个servlet拦截到,因此陷入了死循环,看了一个spring mvc ,如果controller使用redirect的方式,最后也会使用response.sendredirect,这样为什么没有被spring mvc拦截到,也是/*的匹配方式

展开
收起
kun坤 2020-06-06 18:59:30 567 0
1 条回答
写回答
取消 提交回答
  • 拦截的是请求request,你返回响应response了,自然不拦截。这样容易理解,与正确的原理还是有差距的。######重定向之后,流览器会重新去请求你返回的地址吧?怎么不会被拦截呢?######

    web.xml


    <servlet>
    		<servlet-name>springmvc</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    	</servlet>
    	<servlet-mapping>
    		<servlet-name>springmvc</servlet-name>
    		<url-pattern>/*</url-pattern>
    	</servlet-mapping>
    	<welcome-file-list>
    		<welcome-file>index.jsp</welcome-file>
    	</welcome-file-list>
    ######
    

    springmvc-servlet.xml


    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
    	default-autowire="byName">
    	<!-- SpringMVC相关Bean配置 -->
    
    	<!-- View Resolver -->
    	<bean id="viewResolver"
    		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    		<property name="viewClass"
    			value="org.springframework.web.servlet.view.JstlView" />
    		<property name="prefix" value="/WEB-INF/" />
    		<property name="suffix" value=".jsp" />
    	</bean>
        <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="mappings">
                <props>
                    <prop key="/hello.do">c</prop>
                </props>
            </property>
        </bean>
        <bean id="c" class="test.TestController" />
    </beans>


    ######

    test.TestController

    public class TestController implements Controller {
    
    	@Override
    	public ModelAndView handleRequest(HttpServletRequest request,
    			HttpServletResponse response) throws Exception {
    		return new ModelAndView("redirect:/1.jsp");
    	}
    
    }

    ######

    启动服务器之后,输入hello.do,流览器发生跳转,变成1.jsp,404了.

    后台输出

    WARNING: No mapping found for HTTP request with URI [/1.jsp] in DispatcherServlet with name 'springmvc'

    也就是说,跳转之后又被拦截,但是无法处理这个请求.

    还请各位示下.

    ######把你的1.jsp放到  /WEB-INF/ 下面,改成 return new ModelAndView("redirect:1.jsp");######回复 @java9 : 路径看下。。。。######恩.已经放了.改成你说的这样,结果还是404######

    你好,你自己写得 servlet urlmapping @java9 问题解决了吗

    ######

    你去掉.jsp吧   

     

    ######

    我也遇到这个问题,在模仿spring mvc的前端控制器,结果也是拦截所有请求,就算是重新forward,还是会被拦截,LZ有解决吗?@java9

    ######把servlet 的映射改成 / ,不要后面的* 号。
    2020-06-06 18:59:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
开源广进,用service cataloq构造k8s服务能力中心 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载