gpt4 book ai didi

java - HttpServlet 和 JSP 集成

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:54:53 25 4
gpt4 key购买 nike

我想知道是否可以将自定义 servlet 逻辑与 .jsp 模板 View 集成。例如,我有以下 servlet:

public class MyServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = "Mark";
}
}

我想放置 name jsp 文件 (new.jsp) 中的变量,例如:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>New</title>
</head>
<body>
<%= name %>

</body>
</html>

我的 web.xml:

<servlet>
<servlet-name>MyServlet</servlet-name>
<jsp-file>/new.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/new</url-pattern>
</servlet-mapping>

我不想放name应要求。

有什么帮助吗?


更新

非常感谢,但我还是遇到了麻烦。首先,我更新了我的 servlet:

public class MyServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = "Mark";
request.setAttribute("name", name);
request.getRequestDispatcher("/WEB-INF/new.jsp").forward(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = "Mark";
request.setAttribute("name", name);
request.getRequestDispatcher("/WEB-INF/new.jsp").forward(request, response);
}
}

我也改变了看法:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>New</title>
</head>
<body>
${name}

</body>
</html>

但是当我使用 ${name}没有任何显示。我认为我应该导入任何 jSTL,但不幸的是,如果我使用 <%= request.getAttribute("name") %>我得到 null .


更新 2终于解决了!是我的错,我忘了设置

<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.example.MyServlet</servlet-class>
</servlet>

最佳答案

您需要改为实现doGet() 方法。普通的 HTTP 请求(单击链接、书签或直接在浏览器地址栏中输入 URL)默认使用 GET 方法。

为了在预处理 servlet 中使对象在 JSP 中可用,您需要将其设置为请求、 session 或应用程序范围内的属性。最后,您需要将请求/响应转发给 JSP,以便显示。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = "Mark";
request.setAttribute("name", name);
request.getRequestDispatcher("/WEB-INF/new.jsp").forward(request, response);
}

如果您按如下方式修复 servlet 映射

<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.example.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/new</url-pattern>
</servlet-mapping>

然后您可以通过http://localhost:8080/contextname/new 调用servlet .在转发的 JSP 中,您可以通过 EL 访问 name

${name}

请注意,JSP 位于 /WEB-INF 文件夹中,以避免通过在浏览器地址栏中输入 JSP URL 而调用预处理 servlet 时直接访问。

另见:

关于java - HttpServlet 和 JSP 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6513543/

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