gpt4 book ai didi

java - spring mvc 转发到 jsp

转载 作者:行者123 更新时间:2023-12-04 06:34:20 29 4
gpt4 key购买 nike

我目前将 web.xml 配置为捕获 404 并将它们发送到我的 spring Controller ,该 Controller 将根据原始 URL 请求执行搜索。

就捕获和搜索而言,功能就在那里,但是当我尝试返回 View 时,麻烦就开始出现了。

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" p:order="1">
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="jsp" value="text/html" />
</map>
</property>

<property name="defaultContentType" value="application/json" />
<property name="favorPathExtension" value="true" />

<property name="viewResolvers">
<list>
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value="" />
</bean>
</list>
</property>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
</list>
</property>
<property name="ignoreAcceptHeader" value="true" />
</bean>

这是我的 MVC 配置文件中的一个片段。

问题在于解决 View 的路径 /WEB-INF/jsp/目录。在我的 JBoss 设置中使用记录器,我可以看到当我通过转到一个不存在的页面来测试这个搜索 Controller 时,会发生以下情况:
  • 服务器找不到请求
  • 请求被发送到 404 错误页面(在这种情况下是我的搜索 Controller )
  • 搜索 Controller 执行搜索
  • 搜索 Controller 返回 View 名称(对于本例,我们假设返回 test.jsp)
  • 基于服务器记录器,我可以看到 org.springframework.web.servlet.view.JstlView一旦我的搜索 Controller 返回 View 名称就会初始化(所以我可以假设它被 InternalResourceViewResolver 正确拾取)
  • 服务器尝试将内容返回给浏览器,导致 404!

  • 有几件事让我对此感到困惑:
  • 我不是 100% 确定为什么这在 test.jsp 时没有解决显然存在于 /WEB-INF/jsp/ 下目录。
  • 即使有其他问题,为什么会导致 404?理论上导致另一个 404 的 404 错误页面不应该创建无限循环吗?

  • 感谢您的帮助或指点!

    Controller 类[不完整]:
    @Controller
    public class SiteMapController {

    //--------------------------------------------------------------------------------------
    @Autowired(required=true)
    private SearchService search;

    @Autowired(required=true)
    private CatalogService catalog;
    //--------------------------------------------------------------------------------------

    @RequestMapping(value = "/sitemap", method = RequestMethod.GET)
    public String sitemap (HttpServletRequest request, HttpServletResponse response) {
    String forwardPath = "";
    try {
    long startTime = System.nanoTime() / 1000000;
    String pathQuery = (String) request.getAttribute("javax.servlet.error.request_uri");

    Scanner pathScanner = new Scanner(pathQuery).useDelimiter("\\/");
    String context = pathScanner.next();
    List<ProductLightDTO> results = new ArrayList<ProductLightDTO>();
    StringBuilder query = new StringBuilder();
    String currentValue;
    while (pathScanner.hasNext()) {
    currentValue = pathScanner.next().toLowerCase();
    System.out.println(currentValue);
    if (query.length() > 0)
    query.append(" AND ");
    if (currentValue.contains("-")) {
    query.append("\"");
    query.append(currentValue.replace("-", " "));
    query.append("\"");
    }
    else {
    query.append(currentValue + "*");
    }
    }

    //results.addAll(this.doSearch(query.toString()));

    System.out.println("Request: " + pathQuery);
    System.out.println("Built Query:" + query.toString());
    //System.out.println("Result size: " + results.size());
    long totalTime = (System.nanoTime() / 1000000) - startTime;
    System.out.println("Total TTP: " + totalTime + "ms");

    if (results == null || results.size() == 0) {
    forwardPath = "home.jsp";
    }
    else if (results.size() == 1) {
    forwardPath = "product.jsp";
    }
    else {
    forwardPath = "category.jsp";
    }

    }
    catch (Exception ex) {
    System.err.println(ex);
    }

    System.out.println("Returning view: " + forwardPath);
    return forwardPath;
    }
    }

    最佳答案

    1 . I'm not 100% sure why this isn't resolving when test.jsp clearly exists under the /WEB-INF/jsp/ directory.



    这是因为您确实使用 suffix = "" 配置了 View 解析器所以文件必须命名为 test (无扩展名)。

    2 . Even if there was some other problem, why would this result in a 404? Shouldn't a 404 error page that results in another 404 theoretically create an infinite loop?



    我很确定这是针对 spring MVC 中的无限重定向循环的一些保护的结果。

    注:在 Controller 中,spring 需要一个 View 名称,因此 test不是 test.jsp (或者更好,使用 ModelAndView )

    关于java - spring mvc 转发到 jsp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5032558/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com