java - servlet url 模式与参数问题

标签 java jsp servlets

当我访问“http://localhost:8080/project/Song”时,没有出现任何错误,它可以在页面中列出一些歌曲。当我点击一首歌曲时,我进入一个URL“http://localhost:8080/SongPage?name=A+Tribe&id=201”,但是这里出现404错误,可能是因为该url有参数,访问这个URL出现错误:

HTTP 状态 404 – 未找到

说明源服务器未找到目标资源的当前表示或不愿意透露该表示的存在。

你知道为什么吗?

也许是因为下面这个 urlPattern:

@WebServlet(name ="SongPage", urlPatterns = {"/SongPage"})

我有下面这个 servlet:

@WebServlet(name ="Song", urlPatterns = {"/Song"})
public class Song extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        QueryManager qm = new QueryManager();
        ArrayList<ArrayList<String>> result = qm.Songs();
        qm.closeConnections();

        request.setAttribute("result", result.get(0));
        request.setAttribute("id", result.get(1));
        RequestDispatcher view=request.getRequestDispatcher("songList.jsp");
        view.forward(request,response);    

    }
}

在songList.jsp中我有这个:

<c:forEach items="${result}" var="item" varStatus="status">
  <a href="/SongPage?name=${result[status.index].replace(" ","+")}&id=${id[status.index]}"> ${result[status.index]} </a> <br />
</c:forEach>

SongPage.java:

@WebServlet(name ="SongPage", urlPatterns = {"/SongPage"})
public class SongPage extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("name").replace("+"," ");

    ...
 }

最佳答案

您的原始网址“http://localhost:8080/project/Song”将“project”作为基本路径,但另一个网址“http://localhost:8080/SongPage?name=A+Tribe&id=201”没有该路径。作为快速修复,您很可能需要更新 JSP 以将其包含在“href”标记中:

<a href="project/SongPage?name=${result[status.index].replace(" ","+")}&id=${id[status.index]}"> ${result[status.index]} </a> <br />

或者很可能它实际上是上下文路径:

<a href="${pageContext.request.contextPath}/SongPage?name=${result[status.index].replace(" ","+")}&id=${id[status.index]}"> ${result[status.index]} </a> <br />

关于java - servlet url 模式与参数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47780724/

相关文章:

javascript - ES6 格式错误?

java - 无法检索从 Controller 发送的值以在 spring mvc 中查看

servlets - 向与数据库交互的 Servlet 提交表单会导致空白页面

java - 如何使用一个Bootstrap连接Netty中的多个服务器

java - Java 中使用队列的并发移动平均窗口?

java - 如何将数组的值添加到一个矩阵的列?

java - 由于 web.xml,内容未显示在 profile.jsp 上?

java - 如果我未能为公共(public)字段和方法提供 JavaDoc 描述/注释,如何让 IntelliJ 向我发出警告?

java - 如何从 contextDestroyed 中的 ServletContextListener 获取 bean

javascript - 如何用javascript锚定?