#JSP JSP是Java Server Page,Java服務器頁面。由Sun公司倡導,創建的動態網絡技術標準。html頁面中添加Java的程序段,並添加jsp的標記,從而造成jsp文件。JSP和Servlet同樣是在服務端執行。一般返回客戶端一個html文本。html
##JSP vs Servletjava
##JSP處理流程 Tomcat既是JSP容器也是Servlet容器,JSP處理過程和普通請求處理過程同樣。程序員
##JSP基本語法 JSP主要包含JSP元素和模板數據兩大類
JSP模板是指JSP引擎不處理的地方,也就是說JSP不進行處理,直接傳送出去,例如Html頁面等內容。
JSP元素是指JSP引擎處理的部分,必須符合JSP語法,不然致使編譯錯誤。web
##JSP聲明 主要是參數變量的聲明express
<%! declaration; [declaration; ]+ ... %>
<%! int a,b,c; %>
##JSP表達式 表達式會被轉化爲String,而後插入到表達式出現的地方。表達式的值會被轉化爲String值。能夠在文本行中使用表達式,而不須要管是不是html標籤。apache
<%= 表達式 %>
<p>Today:<%= (new java.util.Date()).toLocaleString() %></p>
##JSP腳本緩存
<% 表達式 %>
<% out.println("Your IP address is " + request.getRemoteAddr()); %>
##JSP註釋tomcat
<%-- 這裏能夠填寫JSP註釋 --%>
##JSP指令服務器
##JSP內置對象 page、pageContext、Exception是JSP特有的內置對象網絡
對象 | 描述 |
---|---|
request | HttpServletRequest類的實例 |
response | HttpServletResponse類的實例 |
out | PrintWriter類的實例,用於把結束輸出到網頁上 |
session | HttpSession類的實例 |
application | ServletContext類的實例,與應用上下文有關 |
config | ServletConfig類的實例 |
page | 相似於Java類中的this關鍵字 |
pageContext | PageContext類的實例,提供對JSP頁面全部對象及命令空間的訪問 |
Exception | Exception類的對象,表明發生錯誤的JSP頁面中對應的異常對象 |
##JSP實例 測試的hello.jsp,直接放置到webapp目錄下
<%-- page指令:配置整個JSP頁面的一些屬性,腳本語言Java,contentType,頁面編碼--%> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <!-- this is jsp comment --> <%-- 聲明name --%> <%!String name; %> <%-- JSP表達式 --%> request uri is <%=request.getRequestURI() %> <br/> <%-- JSP腳本:輸出多條Java語句 --%> <% name = "abc"; out.println("name is " + name); %> </body> </html>
注意:這裏<!-- xxx -->
是html的註釋,並非JSP的註釋,正確的JSP註釋爲<%-- xxx --%>
,JSP的註釋不會輸出在html靜態頁面中。
訪問URL:http://localhost:8080/web_project_template/hello.jsp
,獲得如下結果:
###查看生成的Servlet存放位置 注意:這裏須要實際部署到Tomcat中,Maven部署如何查看不得而知
這裏咱們在使用Maven的tomcat7:exec-war-only時發生異常,
咱們在目錄 apache-tomcat-x.0.xx/work/Catalina/localhost/web_project_example/org/apache/jsp
目錄下看到了hello.jsp.java
和hello.jsp.class
這個文件是JSP容器根據JSP頁面主動生成的。
#附錄 ##JSP容器所生成的hello.jsp的對應的java文件內容
/* * Generated by the Jasper component of Apache Tomcat * Version: Apache Tomcat/7.0.70 * Generated at: 2016-09-11 15:27:33 UTC * Note: The last modified time of this file was set to * the last modified time of the source file after * generation to assist with modification tracking. */ package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class hello_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { String name; private static final javax.servlet.jsp.JspFactory _jspxFactory = javax.servlet.jsp.JspFactory.getDefaultFactory(); private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants; private volatile javax.el.ExpressionFactory _el_expressionfactory; private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager; public java.util.Map<java.lang.String,java.lang.Long> getDependants() { return _jspx_dependants; } public javax.el.ExpressionFactory _jsp_getExpressionFactory() { if (_el_expressionfactory == null) { synchronized (this) { if (_el_expressionfactory == null) { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); } } } return _el_expressionfactory; } public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() { if (_jsp_instancemanager == null) { synchronized (this) { if (_jsp_instancemanager == null) { _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig()); } } } return _jsp_instancemanager; } public void _jspInit() { } public void _jspDestroy() { } public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { final javax.servlet.jsp.PageContext pageContext; javax.servlet.http.HttpSession session = null; final javax.servlet.ServletContext application; final javax.servlet.ServletConfig config; javax.servlet.jsp.JspWriter out = null; final java.lang.Object page = this; javax.servlet.jsp.JspWriter _jspx_out = null; javax.servlet.jsp.PageContext _jspx_page_context = null; try { response.setContentType("text/html; charset=ISO-8859-1"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write("\r\n"); out.write("\r\n"); out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n"); out.write("<html>\r\n"); out.write("<head>\r\n"); out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">\r\n"); out.write("<title>Insert title here</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n"); out.write("<!-- this is jsp comment -->\r\n"); out.write('\r'); out.write('\n'); out.write('\r'); out.write('\n'); out.write("\r\n"); out.write("request uri is "); out.print(request.getRequestURI() ); out.write("\r\n"); out.write("<br/>\r\n"); out.write('\r'); out.write('\n'); name = "abc"; out.println("name is " + name); out.write("\r\n"); out.write("</body>\r\n"); out.write("</html>"); } catch (java.lang.Throwable t) { if (!(t instanceof javax.servlet.jsp.SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { if (response.isCommitted()) { out.flush(); } else { out.clearBuffer(); } } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); else throw new ServletException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } } }