如何设置 web.xml 和 dispatcher-servlet.xml 进行映射?

Posted

技术标签:

【中文标题】如何设置 web.xml 和 dispatcher-servlet.xml 进行映射?【英文标题】:How to set up web.xml and dispatcher-servlet.xml for mapping? 【发布时间】:2019-10-12 21:14:20 【问题描述】:

我想从@WebServlet 映射更改为 SpringMVC 映射。为了适应这些事情,我使用 @WebServlet 设置了一个简单的 LoginApplication。

现在我想通过添加 web.xml 和 dispatcher-servlet.xml 来切换到 springMVC

我已将所有必要的依赖项添加到我的构建路径中,包括 commons-logging、jstl、servlet-api、spring-aop、spring-beans、spring-context、spring-core、spring-expression、spring-web 和 spring -webmvc。我将@Controller @RequestMapping("XXXXX") 注释添加到我的控制器中,并将@GetMapping 注释添加到执行重定向和东西的方法中。

我的 web.xml 的一部分:

<servlet>
        <servlet-name>sobster</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/sobster-servlet.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>sobster</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

我的 sobster-servlet.xml 的一部分:

    <context:component-scan base-package="com.sobster" />
    <mvc:annotation-driven />

com.sobster 是我的包含控制器的包

控制器的一部分:

    @RequestMapping("/")
    @Controller
    public class StartPageController extends HttpServlet 
      private static final long serialVersionUID = 1L;

      @GetMapping
      protected void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException 
        response.sendRedirect("login.jsp");
      

    

我希望现在任何请求都能由 web.xml 处理,它会查找 sobster-servlet.xml 以获取控制器。 sobster-servlet.xml 现在检查 com.sobster 中的控制器并执行相应的操作(例如,在收到来自“/”的调用后重定向到 login.jsp)。

但我得到的只是 HTTP 状态 404 – 未找到

感谢任何建议 :-)

【问题讨论】:

你是从工作示例开始的吗???映射一开始有用吗??? 嗨!我从使用@WebServlet 创建的工作应用程序开始。在将库添加到构建路径后,我添加了 web.xml 和 sobster-servlet.xml。映射从未使用 spingMVC 工作 StartPageController 正在扩展 HttpServlet。是这样吗? 这可能有助于tutorialspoint.com/spring/spring_page_redirection_example.htm @MyTwoCents 感谢您的提示。我刚刚用确切的名称等完成了你提到的教程——这对我也不起作用。访问该页面后,我得到“HTTP 状态 404”。我可以访问在tomcat上运行的其他项目,但与springMVC无关 【参考方案1】:

starPageController 类应该像下面的代码。 login 方法的响应将重定向到 loginPage.jsp。完整的 URL 由下面配置的 InternalResourceViewResolver 类决定

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

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping(value = "/login")
public class StartPageController 
    @RequestMapping(method = RequestMethod.GET)
   public String login(HttpServletRequest req, HttpServletResponse response,ModelMap model) throws Exception 
       return "loginPage";
   

sobster-servlet.xml 应该如下所示。 bean 类 InternalResourceViewResolver 用于重定向到前缀为 /pages 的 jsp 页面,而后缀 .jsp 现在将在 war 文件中具有到“/pages/loginPage.jsp”的重定向路径。

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans     
   http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-4.0.xsd
   http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

    <context:component-scan
        base-package="com.sobster" />
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/pages/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

【讨论】:

感谢您的帮助,但这并没有奏效。当我启动 tomcat 时,出现错误消息:“将 servlet sobster 标记为不可用”。不知道上次是否也在那里。感谢您的努力! 你是否在WEB-INF文件夹中添加了sobster-servlet.xml? 是的,我的 WEB-INF 文件夹中有 web.xml 和 sobster-servlet.xml。我的控制器位于 com.sobster 包中,视图 JSP 位于 WEB-INF/pages 你有前缀 /WEB-INF/pages/ 吗?页面名称是 loginPage.jsp? 没错。与此同时,我发现了另一个对我有用的教程。我注意到的主要区别是 web.xml servlet 中的&lt;init-param&gt; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt; &lt;param-value&gt;/WEB-INF/sobster-servlet.xml&lt;/param-value&gt; &lt;/init-param&gt;,但我无法转换这些更改以使该项目运行

以上是关于如何设置 web.xml 和 dispatcher-servlet.xml 进行映射?的主要内容,如果未能解决你的问题,请参考以下文章

struts2 web.xml 配置org.apache.struts2.dispatcher.ng.listener.StrutsListener

关于web项目web.xml配置文件路径的问题。

Filter的基本配置

Filter的细节三学习笔记

web.xml报错Cannot resolve class 'StrutsPrepareAndExecuteFilter' (idea创建SSH项目)

web.xml