关于DispatcherServlet的路径拦截问题

关于DispatcherServlet的路径拦截问题

老师,在课程讲解中说到

正在回答

登陆购买课程后可参与讨论,去登陆

4回答

同学你好!

  1. @WebServlet("/LoginServlet")与@RequestMapping("/LoginServlet")经过底层的解析都会在web.xml中注册。一个是比较底层,另一个是框架中的,但是经过最后的编译,底层解析它们都是一样的。因此DispatcherServlet拦截时以上两种方式都会通过。然后去访问地址。

  2. css属于静态资源,默认并没有在web.xml中配置,因此它被DispatcherServlet拦截到之后,并没有通过,所以不能访问

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 哆丶哆 提问者 #1
    如此说来,要用到SpringMVC框架的时候,那些静态资源包括图片、CSS、JS等都要在web.xml配置文件配置后才能用到咯?
    2019-07-29 11:44:00
  • 好帮手慕柯南 回复 提问者 哆丶哆 #2
    同学的理解是正确的,在后面的课程中老师讲解案例时,会用到。祝学习愉快~
    2019-07-29 11:52:42
提问者 哆丶哆 2019-07-28 17:22:35

老师,我回去看了下

    这里面将的不是DispatcherServlet执行流程么?没讲到它和普通Servlet的关系呀。    

    (1)那这么说的话我是不是可以理解成DispatcherServlet是一个过滤器的样子啊?拦截到并且找到Handler的话就继续执行Handler里的方法,执行完毕之后在继续执行请求的Servlet里的方法

    (2)如果DispatcherServlet拦截后没有发现匹配的Handler,就直接执行请求的Servlet。

    (3)如果只是过滤的话,那为什么css的访问路径就会被截下,导致无法导入CSS样式呢?这样的话JS的访问路径岂不是也不安全

    

好帮手慕柯南 2019-07-28 17:05:22

同学你好!DispatcherServlet会拦截但是并不是不能访问servlet呢,是DispatcherServlet拦截之后会经过一系列的处理跳转至servlet中,也可以回顾一下 springmvc详解这一节中对DispatcherServlet的执行原理

http://img1.sycdn.imooc.com//climg/5d3d651b0001447004670439.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~


提问者 哆丶哆 2019-07-28 16:09:31

老师,在课程讲解中说到,因为在SpringMVC中DispatcherServlet设置了全路径拦截,所以CSS样式无法导入,因为DispatcherServlet会拦截所有请求,如下:

<!--    springMVC设置-->
    <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:springmvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

可是,我试着写了个传统方式的Servlet来处理一个表单的请求,发现可以正常跳转到该Servlet啊,这是为什么啊?它不被DispatcherServlet拦截么?

相关代码:

login.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
用户登录界面
<form action="LoginServlet" method="post">
    <div>
        用户名:<input type="text" name="username">
    </div>

    <div>
        密码:<input type="password" name="password">
    </div>
    <div>
        <input type="submit" value="登录">
    </div>
</form>
</body>
</html>

Login.java:

package com.lgq.springmvc.Servlet;

import com.lgq.springmvc.eneity.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username=request.getParameter("username");
        String password=request.getParameter("password");
        User user=new User();
        user.setUsername(username);
        user.setPassword(password);
        System.out.println(user);//这句可以正常输出
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师