首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IntelliJ 13、Tomcat 7 (Servlet 3)、Spring 4和上下文/servlet映射是如何相关的

IntelliJ 13、Tomcat 7 (Servlet 3)、Spring 4和上下文/servlet映射是如何相关的
EN

Stack Overflow用户
提问于 2014-11-10 19:02:17
回答 1查看 259关注 0票数 0

如果您为Spring4和Tomcat接受了一个空的IntelliJ 13项目设置,并且完全使用Java (无XML)配置,那么您可以使用如下内容初始化dispatcher、servelet和Tomcat:

1

代码语言:javascript
复制
public class WebAppInit extends AbstractAnnotationConfigDispatcherServletInitializer
{
    @Override
    protected Class<?>[] getRootConfigClasses()
    {
        return new Class<?>[]{SpringConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses()
    {
        return new Class<?>[]{SpringWebMVCConfig.class};
    }

    @Override
    protected String[] getServletMappings()
    {
        return new String[]{"/url"};
    }

    @Override
    protected Filter[] getServletFilters()
    {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        return new Filter[]{characterEncodingFilter};
    }
}

2

在IntelliJ13中的运行配置中也存在这样的情况:

3.

最后是rest控制器的映射:

代码语言:javascript
复制
@RestController
public class RootController
{
    @Autowired
    private SomeDAO someDAO;

    @RequestMapping(value = "/")
    public String root()
    {
        return someDAO.getStuff();
    }



}

我的问题是什么控制什么?

如果我在1中更改映射,则请求映射(3)不再工作。

B)如果我将1和3设置为"/“,并将2更改为./url,则在浏览器中使用./url命中控制器。

但是,如果我将1和2设置为./url2 2,那么当我在浏览器中转到./url2 2时,就会得到404。

我一直认为,1设置Spring dispatcher servlet的映射,2设置IDE的应用上下文(类似于将war文件命名为" url“,然后放到webapp中),而3只是相对于servlet上下文的url映射。如果是这样的话,我就不明白为什么案例C会导致404。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-10 19:17:50

在IntelliJ中,您将web应用程序的上下文路径配置为/url2。这意味着从/url2/开始的对URL的所有请求都由Tomcat路由到webapp的一个组件,而所有其他请求则由Tomcat路由到另一个webapp (如果没有webapp映射到URL,则生成404 )。

在Spring配置中,您将在webapp中配置servlet映射到的路径。您正在将其配置为/url2。因此,当您从URL中删除上下文路径(用于选择webapp)时,结果路径将被检查,如果是/url2,则会转到servlet。当然,它会转到the应用程序中的另一个资源。

最终的结果是,要命中servlet,您需要一个类似的路径

代码语言:javascript
复制
http://localhost:8080/url2/url2

注意,将servlet映射到像/url2这样的路径没有多大意义,因为只有这个路径才会导致servlet,它应该用于许多不同的路径,控制器被映射到该路径。您可能希望将其应用到/url2/*,这意味着webapp (在上下文路径之后)中对路径的所有请求(从/url2/开始)都将转到servlet。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26850991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档