Java HttpServlet与JSP集成
我想知道是否可以将自定义servlet逻辑与.jsp模板视图集成。例如,我有以下servlet:Java HttpServlet与JSP集成,java,jsp,servlets,Java,Jsp,Servlets,我想知道是否可以将自定义servlet逻辑与.jsp模板视图集成。例如,我有以下servlet: public class MyServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = "Mark"
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>
您可以将
name
设置为请求属性,并在JSP中获取它
例如,在servlet中,您可以执行以下操作:
request.setAttribute("name", name);
并通过以下方式获取:
<%= request.getAttribute("name") %>
您需要实现
doGet()
方法。正常的HTTP请求(单击链接、书签或直接在浏览器地址栏中输入URL)默认为GET
method
为了使对象在预处理servlet中的JSP中可用,您需要将其设置为请求、会话或应用程序范围中的属性。最后,您需要将请求/响应转发到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映射
MyServlet
com.example.MyServlet
MyServlet
/新的
然后您就可以通过调用servlet了。在转发的JSP中,您可以通过EL访问名称
${name}
请注意,JSP被放置在/WEB-INF
文件夹中,以避免在不调用预处理servlet的情况下直接访问,而是在浏览器地址栏中输入JSP URL
另见:
<%@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>
<% String name = "Mark" %> <%-- PUT THE name IN HERE --%>
<%= name %>
</body>
</html>
新的
但您不想在请求中输入名称的原因是什么?这就是为什么servlet会出现。为什么您不能简单地在JSP中使用
标记作为代码?@Kyte:根据JSP 2.0编码约定,这是不鼓励的。有趣。很高兴知道。(我承认我学过JSP/servlets caveman风格)${name}
,而不是${requestScope.name}
?@ryan:如果页面范围中没有具有相同属性名称的内容,您可以省略显式范围声明。JspContext#findAttribute()
扫描页面、请求、会话和应用范围。另请参见答案底部链接的EL wiki页面。
<%= request.getAttribute("name") %>
${requestScope.name}
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);
}
${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>
<% String name = "Mark" %> <%-- PUT THE name IN HERE --%>
<%= name %>
</body>
</html>