【问题标题】:Not using RequestDispatcher foward and Servlet Annotation不使用 RequestDispatcher 转发和 Servlet 注释
【发布时间】:2016-03-08 08:12:13
【问题描述】:

我想通过任何带有如下结构的链接访问 Servlet 类:http://localhost:8080/loginjsp/Reading/abc。 “abc”可以改变,这取决于你。 所以我使用了 Servlet Annotation

@WebServlet(urlPatterns = "/Reading/*").

但问题是我不能使用 RequestDispatcher 转发。 我怎样才能做到这两点?

阅读.Java

package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ReadingTestServlet
 */
@WebServlet(
        urlPatterns = "/Reading/*",
        initParams =
        {
            @WebInitParam(name = "saveDir", value = "D:/FileUpload"),
            @WebInitParam(name = "allowedTypes", value = "jpg,jpeg,gif,png")
        }
)
public class ReadingTestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        PrintWriter out = response.getWriter();
        RequestDispatcher rd=request.getRequestDispatcher("test.jsp");    
            rd.forward(request,response); 
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

【问题讨论】:

  • javax.servlet.ServletRequestWrapper.isAsyncStarted(ServletRequestWrapper.java:403) 没有错误,它是一个堆栈跟踪行 - 在日志文件中查看更高的位置,应该有一个实际的错误消息。将其添加到您的问题中。
  • 你得到什么样的错误? test.jsp 与之前的调用路径相关,因为您从请求对象中获取了 RequestDispatcher。
  • 它没有错误,我看到很多类似这样的跟踪线 javax.servlet.ServletRequestWrapper.isAsyncStarted(ServletRequestWrapper.java:4‌​03) 正在运行。
  • 为什么说不能用forward呢?您要转发到哪个网址,遇到什么错误?
  • 我的意思是我没有在控制台上看到任何错误,但它没有转发到 jsp 页面

标签: java jsp servlets


【解决方案1】:

我试过了,你是对的,有问题。问题是您进入了一个无限循环,因为您的调度使 servlet 再次被调用。前向 urlPattern 将匹配 urlPatterns = "/Reading/*"(您使用的是通配符)。在您的 urlPatterns 中将通配符 '*' 替换为 'abc' 并且会起作用(我假设您将 'test.jsp' 放在 /Reading 目录中)

顺便说一句,考虑使用

getServletConfig().getServletContext().getRequestDispatcher("/absolute/path");

在类似的情况下。

【讨论】:

  • 感谢您的评论,但我必须使用 'abc' 而不是 '*',因为我想通过 getRequestURI() 方法获取 URL。 'abc' 是我的文件的路径。回顾我的 initParams,使用 substring() 方法后,我的路径看起来像 D:/FileUpload/abc/excel.xsl
猜你喜欢
  • 2014-08-01
  • 1970-01-01
  • 2013-02-28
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多