Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSP-将Java与HTML分离_Jsp - Fatal编程技术网

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" %>