如何设置 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 中的<init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/sobster-servlet.xml</param-value> </init-param>
,但我无法转换这些更改以使该项目运行以上是关于如何设置 web.xml 和 dispatcher-servlet.xml 进行映射?的主要内容,如果未能解决你的问题,请参考以下文章
struts2 web.xml 配置org.apache.struts2.dispatcher.ng.listener.StrutsListener
web.xml报错Cannot resolve class 'StrutsPrepareAndExecuteFilter' (idea创建SSH项目)