JavaHttpServlet与JSP集成
我想知道是否可以将自定义servlet逻辑与集成。jsp模板视图。例如,我有以下servlet:
public class MyServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = "Mark";
}
}
我想在jsp文件(new.jsp)中放置name
变量,如下所示:
<%@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>
我的网络。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>
# 1 楼答案
您可以将
name
设置为请求属性,并在JSP中获取它例如,在servlet中,您可以执行以下操作:
并通过以下方式获取:
或者更好地使用EL:
# 2 楼答案
如果您不想在请求中添加“name”,那么唯一的方法就是在JSP代码中使用scriptlet。但这不是一个干净的或基于标准的解决方案
重复####这不是一个干净的解决方案###正如其他人指出的那样,使用请求存储名称强>
比如说
但您不想在请求中输入名称的原因是什么?这就是为什么Servlet会出现在那里
# 3 楼答案
您需要实现
doGet()
方法。正常的HTTP请求(单击链接、书签或直接在浏览器地址栏中输入URL)默认为GET
方法为了使对象在预处理servlet中的JSP中可用,您需要将其设置为请求、会话或应用程序范围中的属性。最后,您需要将请求/响应转发到JSP,以便可以显示它
如果您按照如下方式修复servlet映射
然后您可以通过http://localhost:8080/contextname/new调用servlet。在转发的JSP中,您可以通过EL访问
name
请注意,JSP被放置在
/WEB-INF
文件夹中,以避免在不调用预处理servlet的情况下直接访问,而是在浏览器地址栏中输入JSP URL另请参见: