JSP-将Java与HTML分离
如果我有这样的东西:JSP-将Java与HTML分离,jsp,Jsp,如果我有这样的东西: <% String name = (String)session.getAttribute("username"); if(name!=null) {%> <div id="navBar"> <h2><a href="blah.jsp">Home</a> | <a href="blah1.jsp">SomewhereElse
<%
String name = (String)session.getAttribute("username");
if(name!=null)
{%>
<div id="navBar">
<h2><a href="blah.jsp">Home</a> |
<a href="blah1.jsp">SomewhereElse</a> |
</div>
<%}%>
|
|
基本上,如果变量名为null,则不显示导航栏,但由于应避免混合使用Java和HTML-我看不出如何将其重写以分离这两种语言???您应该有一个控制器(它可以是简单的Java
servlet
)。在一种情况下,您可以将其发送到不同的JSP页面
// controller
String jsp = "";
boolean userLoggedIn = isUserLoggedId();
if (userLoggedIn) {
jsp = "logged_in.jsp";
} else {
jsp = "not_logged_in.jsp";
}
getServletContext().
getRequestDispatcher(jsp).forward(req, res);
JSP与直接“调用文件”的PHP不同。相反,您应该将URL映射到Servlet(控制器),然后让该Servlet在内部处理JSP部分。请记住将JSP文件放在
WEB-INF
目录中,这样用户就不会直接访问它。使用taglibs/EL。在JSTL的帮助下,您的特定示例可以通过以下方式解决:
|
|
只有在页面、请求、会话或应用程序范围中没有名为username
的属性时,才会打印给定的HTML
另见:
- 我同意巴卢斯克的观点
不要忘记添加以下taglib指令:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
这允许您引用JSTL核心标记库标记
这为您提供了很多有用的特性,如if、choose、foreach等
注意,taglib指令可以通过当前文件中包含的另一个jsp间接添加
例如使用:
<%@ include file="MyJspTagIncludeFile.jsp" %>
那么,如果我发布的代码是home.jsp中的,那么您是建议我创建homeloggedin.html和homeloggedout.html?
<%@ include file="MyJspTagIncludeFile.jsp" %>