javascript
EE JSP:Servlet的反向外套
僅當頁面數量少或需要精確控制生成的內容(二進制PDF等)時,才可以從Servlet生成HTML。 對于大多數應用程序,輸出將是HTML,我們需要一種更好的方法來完成此操作。 這就是JSP(Java服務器頁面)出現的地方。
使用JSP,您可以編寫并關注文件中HTML內容。 只有在內容之間需要動態或條件邏輯時,才插入Java代碼,稱為Scriptlet。 當應用程序服務器處理JSP頁面時,它將自動生成一個Servlet類,將這些JSP文件的內容寫出(就像您以前用PrintWriter編程編寫它一樣)。 在JSP中的任何地方,只要有Scriptlet,它都將內聯在生成的Servlet類中。 生成的jsp servlet類全部由應用程序中的應用程序服務器自動管理,編譯和部署。 簡而言之,JSP只不過是Servlet的反向外殼。
這是一個簡單的JSP示例,可以打印Hello World和服務器時間戳。
<!DOCTYPE html> <html><body><p>Hello World!</p><p>Page served on <%= new java.util.Date()%></p></body> </html>只需將其另存為基于src/main/webapp maven的文件夾中名為hello.jsp文本文件, hello.jsp在NetBeans IDE中運行。 對于JSP,您不需要像Serlvet中那樣配置URL映射,并且可以從上下文路徑直接訪問URL映射。 例如,以上內容應通過http:// localhost:8080 / hello.jsp URL在瀏覽器中顯示。
請注意,該示例還顯示了如何嵌入Java代碼。 您可以在<%= %> scriptlet內放置一個方法或對象,它將使用結果對象的toString()方法輸出連接到scriptlet標記之外HTML。 您也可以使用<%! %>定義新方法<%! %> <%! %> scriptlet標記,或使用<% %> scriptlet執行任何不會生成輸出的代碼。 注意,您也可以在JSP中的<%-- --%>腳本之間添加注釋。
JSP還允許您插入“頁面指令”以控制JSP容器如何呈現結果。 例如,您可以通過將其插入頁面頂部來更改結果內容類型
<%@ page contentType="text/txt" %>另一個經常使用的頁面指令是import Java package,因此您不需要在每個Java語句行上添加前綴。
<%@ page imporet="java.util.*" %>...<p>Page served on <%= new Date()%></p>您可以使用更多指令。 請查看JSP規范文檔以獲取更多詳細信息。
除了插入自己的Java代碼外,JSP還預定義了一些變量,您可以在不聲明它們的情況下直接訪問它們。 這是顯示大多數這些內置隱式變量的示例。
<!DOCTYPE html> <html><body><h1>JSP Examples</h1><p>Implicit Variables</p><table><tr><td>Name</td><td>Instance</td><td>Example</td></tr><tr><td>applicationScope</td><td>${applicationScope}</td><td>${applicationScope['myAppName']}</td></tr><tr><td>sessionSope</td><td>${sessionSope}</td><td>${sessionSope['loginSession']}</td></tr><tr><td>pageScope</td><td>${pageScope}</td><td>${pageScope['javax.servlet.jsp.jspConfig']}</td></tr><tr><td>requestScope</td><td>${requestScope}</td><td>${requestScope['foo']}</td></tr><tr><td>param</td><td>${param}</td><td>${param['query']}</td></tr><tr><td>header</td><td>${header}</td><td>${header['user-agent']}</td></tr><tr><td>cookie</td><td>${cookie}</td><td>${cookie['JSESSIONID']}</td></tr><tr><td>pageContext</td><td>${pageContext}</td><td>${pageContext.request.contextPath}</td></tr></table><p>Page served on <%= new java.util.Date()%></p></body> </html> 在上面的示例中,我使用JSP表達式語言(EL)語法而不是
<%=%>腳本。 EL更緊湊且更易于閱讀,但是它只能讀取存在于任何請求,會話或應用程序范圍中的變量。 EL使用DOT表示法訪問對象變量中的字段甚至嵌套字段。 假設這些字段具有相應的getter方法。 EL還可以使用“ myMap [key]”格式訪問地圖,或使用“ myList [index]”語法訪問列表。 這些隱式變量中的大多數都可以作為Map對象進行訪問,它們像在您自己的Servlet類中一樣,主要從請求上的ServletHttpRequest對象公開。
JSP可以被視為Web應用程序中的模板語言。 它有助于生成應用程序的“ VIEW”部分。 它使您或團隊中的創作者可以專注于HTML以及內容的外觀。 它可以幫助更輕松地構建更大的Web應用程序。 不過,在JSP文件中使用過多和復雜的邏輯Java代碼時要小心,因為它會使調試和讀取變得更加困難。 尤其是當您有拋出異常的Java語句時。 stacktrace中的行號將更難跟蹤并與您的Scriptlet代碼匹配。 還要想象一下,如果您開始在JSP文件中包含JavaScript代碼,那么它可能會變得非常混亂。 最好將它們保存在單獨的文件中。 如果必須將Java代碼嵌入JSP中,請嘗試將其包裝在一行Java調用調用中。 更好的方法是,嘗試使用Servlet代碼處理請求,并通過將它們插入請求作用域空間中,然后將其轉發到JSP文件進行渲染,來生成需要在JSP中顯示的所有數據。 使用這種模式,您實際上可以限制JSP中scriptlet的使用,并且僅使用EL和JSP標記。
- 您可以在GitHub的jsp-example中找到上述代碼。
翻譯自: https://www.javacodegeeks.com/2015/01/ee-jsp-the-reversed-jacket-of-servlet.html
總結
以上是生活随笔為你收集整理的EE JSP:Servlet的反向外套的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 键盘恢复出厂设置(苹果键盘恢复出厂设置)
- 下一篇: shop界面快捷键(shop和shops