2012-11-30 83 views
8

我有一個沒有框架的Java應用程序。它由用於業務邏輯的視圖和servlet的jsp文件組成。我必須設置用戶會話是帶有firstName參數的servlet。在jsp文件中,我需要檢查我的firstName參數是否有值。如果設置了firstName參數,我需要在jsp文件中顯示一些html。如果沒有設置,我需要在jsp文件中顯示不同的html。檢查jsp文件中的servlet會話屬性值

Servlet.java:

HttpSession session = request.getSession(); 
session.setAttribute("firstName", customer.getFristName()); 
String url = "/index.jsp"; 
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url); 
dispatcher.forward(request, response); 

的header.jsp:

// Between the <p> tags bellow I need to put some HTML with the following rules 
// If firstName exist: Hello ${firstName} <a href="logout.jsp">Log out</a> 
// Else: <a href="login.jsp">Login</a> or <a href="register.jsp">Register</a> 

<p class="credentials" id="cr"></p> 

什麼是做到這一點的最好方法是什麼?

更新:

這裏是一個偉大的教程中,我對JSTL發現,如果有人需要它: http://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm

回答

9
<% if (session.getAttribute("firstName") == null) { %> 
    <p> some content </p> 
<% } else {%> 
    <p> other content </p> 
<% } %> 
+0

謝謝易卜拉欣!這個解決方案乾淨簡單。它完成了我想要的事情。我正在搞jsp EL,它變得非常混亂。 :) – Marta

+3

凌亂?顯然你做錯了什麼。使用JSTL/EL,它就像'

某些內容

其他內容

''。我不確定這是多麼混亂。 – BalusC

+0

@BalusC我當然了!我正在EL中尋找一個if-else構造,並且無法使其工作,所以我放棄了這個想法。看你的例子,它會做我想要的。我可能會使用這個而不是將Java代碼放入我的JSP中。我讀過在JSP中使用EL/JSTL比java更好的做法。謝謝你的幫助! – Marta

0

在你可以寫如下

 HttpSession session = request.getSession(true); 
     session.setAttribute("firstName", customer.getFristName()) 
     response.sendRedirect("index.jsp"); 

該servlet request.getSession(true)返回一個新的會話,如果它不存在任何會話,否則它將返回當前會話。 而且,在index.jsp頁面,您可以執行如下操作:

<% 
if(session.getAttribute("firstName")==null) { 
%> 
<jsp:include page="firstPage.html"></jsp:include> 
<% 
} else { 
%> 
<jsp:include page="secondPage.html"></jsp:include> 
<% 
}%> 

這裏,如果firstName爲null,則firstPage.html將被包含在該頁面,否則secondPage.html

+0

謝謝Visruth!關於getSession(true)的很好的解釋。 – Marta

+1

'request.getSession()'確實**在封面下完全相同。另請參閱[javadoc](http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest。HTML#的getSession())。事實上,「真實」的論點完全是多餘的。 – BalusC

1

我認爲最好的方法是使用jstl標籤。因爲對於簡單的jsp應用程序,將所有java代碼添加到html或更重的應用程序可能是個好主意,最好在html上使用最小java代碼(單獨查看邏輯層)(閱讀更多內容https://stackoverflow.com/a/3180202/2940265
For your期望你可以很容易地使用像波紋管的代碼

<c:if test="${not empty firstName}"> 
    <%--If you want to print content from session--%> 
    <p>${firstName}</p> 

    <%--If you want to include html--%> 
<%@include file="/your/path/to/include/file.jsp" %> 

    <%--include only get wrong if you give the incorrect file path --%> 
</c:if> 
<c:if test="${empty firstName}"> 
    <p>Jaathi mcn Jaathi</p> 
</c:if> 

如果你沒有正確包括jstl,你將無法獲得預期的輸出。參考此類事件https://menukablog.wordpress.com/2016/05/10/add-jstl-tab-library-to-you-project-correctly/