我想通过具有如下结构的任何链接访问 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);
}
}
最佳答案
我已经尝试过,你是对的,有一个问题。问题是您陷入了无限循环,因为您的调度使 servlet 被再次调用。正向 urlPattern 将匹配 urlPatterns = "/Reading/*"
(您正在使用通配符)。将 urlPatterns 中的通配符 '*' 替换为 'abc' 即可工作(我假设您将 'test.jsp' 放在/Reading 目录中)
顺便说一句,考虑使用
getServletConfig().getServletContext().getRequestDispatcher("/absolute/path");
在类似情况下。
关于java - 不使用RequestDispatcher forward和Servlet Annotation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34070652/