当前位置: 首页 > 知识库问答 >
问题:

Spring MVC页面到页面导航不起作用

锺离德庸
2023-03-14

我有两个页面:home.jsp和stylechoosertable.jsp。jsp有一个指向stylechoosertable.jsp的简单链接。两者都在src-main-webapp-views中。启动应用程序运行良好,加载home.jsp也很好。然而,当我点击链接时,它会转到一个404未找到的页面。

下面是HomeController.java

@Controller
public class HomeController {

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

    /**
     * Simply selects the home view to render by returning its name.
     */
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Model model) {
        logger.info("Welcome home! The client locale is {}.");      
        return "home";
    }
}
@Controller
public class CSSTableController {

    private static final Logger logger = LoggerFactory.getLogger(CSSTableController.class);
    private final CSSService cssService;

    @Autowired
    public CSSTableController(CSSService cssService) {
        this.cssService = cssService;
    }

    @RequestMapping(value = "/stylechoosertable.jsp", method = RequestMethod.GET)
    public List<StyleChooser> get() {
        return cssService.getAllStyleChoosers();
    }

}
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>
<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

>

  • 仅本地:8080/MySpringMVC/打开主页。local:8080/myspringmvc/home.jsp会出现相同的404错误,但我不知道。

    在开始时,我可以看到它正确地执行请求/处理程序映射:

    信息:org.springframework.web.servlet.mvc.method.annotation.requestMappingHandlerMapping-将“{[/stylechoosertable.jsp],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}”映射到公共java.util.list com.css.genapp.csstableController.GET()

    1. 当我转到home.jsp或stylechoosertable.jsp时,它不会抛出任何org.springframework.web.servlet.PageNotFound错误,所以我知道映射在那里。

    我不明白为什么它没有“击中”我的stylechoosertable.jsp。有什么想法吗?

  • 共有1个答案

    徐鸿文
    2023-03-14

    大多数Servlet容器注册Servlet实现来处理JSP。他们看起来就像

    <servlet>
        <servlet-name>jspServlet</servlet-name>
        <servlet-class>com.example.JspServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>jspServlet</servlet-name>
        <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>
    

    *.jsp称为扩展映射。Servlet容器知道这个Servlet和您注册的Servlet。容器对@controllerbean一无所知。只与Spring有关。

    当Servlet容器接收到请求时,它将按照Servlet规范中指定的顺序,根据其映射匹配特定的Servlet。基本上,它首先检查完全匹配,然后尝试进行路径匹配(模式/something/*),然后进行扩展映射,最后,如果没有找到匹配,则使用默认servlet,即映射到/的servlet。在本例中,您的DispatcherServlet(运行Spring MVC堆栈)被映射到/,因此它是默认servlet。

    local:8080/myspringmvc/home.jsp
    

    路径满足*.jsp的扩展映射,因此容器使用JSPServlet来处理请求。这个JSPServlet试图查找适当的资源,但没有。请记住,WEB-INF内部的JSP是不可公开/外部访问的。因此,它返回404。

    当您将请求发送到

    local:8080/myspringmvc/ 
    

    之所以选择默认servlet,是因为没有其他任何东西可以匹配该路径。DispatcherServlet查找它的处理程序并找到

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Model model) {
        logger.info("Welcome home! The client locale is {}.");      
        return "home";
    }
    

    从不涉及DispatcherServlet,因此它没有机会记录任何内容。

     类似资料:
    • 我已使用此(react router 2.0)在路由器上设置了browserHistory: 然后,我尝试使用react router中的browserHistory以编程方式从视图(ala: 这将URL更改为 /map但不会呈现该路由中的组件。我做错了什么?

    • 问题内容: 如何从一页导航到另一页。假设我有一个登录页面,在输入用户名和密码字段并单击提交按钮后,它需要验证,如果用户名和密码都正确,则需要进入主页。主页内容需要显示。我在这里发布代码。在浏览器中,URL不断变化,但内容没有变化。 index.html home.html test.js 问题答案: 正如@dfsq所说,您需要一个ng-view来放置新视图。当然,如果将ng- view添加到索引中

    • 导航规则是JSF Framework提供的那些规则,用于描述单击按钮或链接时要显示的视图。 可以在名为faces-config.xml的JSF配置文件中定义导航规则。 它们可以在托管bean中定义。 导航规则可以包含可以显示结果视图的条件。 JSF 2.0也提供隐式导航,其中不需要定义导航规则。 隐式导航 JSF 2.0提供了名为implicit navigation auto view page

    • Iam正在使用ionic应用程序编辑配置文件和查看配置文件。编辑编辑页面的详细信息后,它将导航到查看配置文件页面。 我希望在导航后刷新查看配置文件页面。 这是editprofile.ts代码: 首先我用下面的导航 通过谷歌搜索,我添加了这个来在导航后刷新视图配置文件 现在发生的是,首先它被重定向到查看个人资料页面,并且没有刷新,它直接重定向到主页,主页被刷新。 请帮助我如何在从“编辑配置文件”页面

    • 我正在使用JSF和Primefaces开发一个web应用程序。我想显示以下菜单,并根据选择选项转到一页或另一页。 XHTML代码: 托管bean代码: 如果用户从列表中选择宝马选项,如何导航到pageBMW. xhtml,或者如果用户从列表中选择梅赛德斯选项,如何导航到pagemercedes.xhtml?

    • 我正在尝试以编程方式更改页面。这第一行代码正在工作,但我不需要它延迟,所以我尝试了第二行,但它不起作用。我错过了什么? 工作(但我不想延迟): 不工作: 我在<代码>中调用它