本文爲博主辛苦總結,但願本身之後返回來看的時候理解更深入,也但願能夠起到幫助初學者的做用.
轉載請註明 出自 : luogg的博客園 謝謝配合!
全稱 :Java Server Pages ,jsp實際就是一個servlet
jsp運行機制: 用戶訪問jsp頁面,服務器將其轉換成servlet,也就是java文件,而後編譯成class文件,最後運行,最後響應給用戶。html
工程jsp中不少波浪線報錯,是由於找不到jar包。java
public final class HelloJSP_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent {
web
在G:\eclipse項目.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\employeePro\org\apache\jsp 中找到當前項目的jsp文件,能夠看到jsp被編譯成了java和class文件,修改jsp,運行,能夠看到被編譯以後的java文件已修改。在_jspService方法下修改了。apache
咱們去tomcat的lib目錄找到org.apache.jasper.runtime.HttpJspBase,而後對其反編譯,public abstract class HttpJspBase extends HttpServlet implements HttpJspPage {
發現jsp繼承的HttpJspBase也繼承了HttpServlet,說明jsp也繼承了HttpServlet。windows
右鍵文件->properties->other utf-8
設置jsp默認編碼:windows->preference->搜索jsp->jsp file->encoding修改utf-8
通常不直接複製文件,會亂碼,ctrl+A,複製所有代碼而後粘貼到同類名的文件中tomcat
<% 普通java代碼,局部變量,放在了jspService方法中 %>服務器
<%! 全局變量,放在_jsp_Service方法外邊%> 非靜態,只是定義在類中的全局變量,在jsp聲明中不可使用javaService方法中的9個隱式對象.session
<%= 表達式,輸出時候使用%> 好比 : <tr><td><%=rs.getInt(1) %></td><td><%=rs.getString(3) %></td></tr>
app
1.HTML註釋
註釋在翻譯的java文件也存在,在頁面也存在
2.Java註釋,在翻譯成的java文件中也存在,在頁面不存在.框架
<% 1.// 2./* */ 3./** **/ %>
3.JSP註釋:<%-- --%>只存在於jsp頁面
語法 : <%@ 指令元素 屬性名=屬性值 %>
若是一個指令有多個屬性,這多個屬性能夠寫在一個指令中,中間用空格隔開。即上面兩條指令等價表示以下
1.page指令: page指令用於定義JSP頁面的各類屬性,import屬性能夠出現屢次,其餘屬性只能出現一次,重點:session,import,contentType,pageEncoding,isELIgnonred
2.include指令,靜態引入其餘JSP頁面,
<%@ include file="/include/head.jsp" %>
3.taglib指令:引入標籤庫文件語法:<%taglib %>
屬性:
setAttribute(String name, Object value, int scope)
getOut() //方法返回out隱式對象
pageContext類中定義了一個forward方法和兩個include方法分別簡化和替代RequestDispatcher.forward方法和include方法,方法接收的資源若是以"/"開頭,"/"表明當前web應用。不過這裏的include是動態包含,不建議使用include。
ServletContext application域,整個web應用,servletContext中存的數據在整個應用程序範圍內均可以取出 session session域,一次會話,/session中存的數據在會話範圍內均可以取出 request request域,一次請求,request中存的數據在請求範圍內均可以取出 pageContext page域,當前頁面,pageContext中存的數據在頁面範圍均可以取出
它用於在JSP頁面中提供業務邏輯功能,避免在JSP頁面中直接編寫java代碼形成JSP頁面難以維護。
1.
<jsp:include page="index.html"></jsp:include>
至關於調用pageContext.include("relativeURL")
2.
<jsp:forward page=""></jsp:forward>
3.
<jsp:include page="index.jsp"> <jsp:param value="" name=""/> </jsp:include>
或者
<jsp:forward page="index.jsp"> <jsp:param value="" name=""/> </jsp:forward>
JSP也能夠像Servlet那樣映射,由於JSP原本就是Servlet。
<servlet> <servlet-name>SimpleJspServlet</servlet-name> <jsp-file>/jsp/simple.jsp</jsp-file> </servlet> <servlet-mapping> <servlet-name>SimpleJspServlet</servlet-name> <url-pattern>/xxx/yyy.html</url-pattern> </servlet-mapping>
/jsp/simple.jsp表示在webRoot/jsp目錄下的simple.jsp文件
include指令:<%@include file="top.jsp" %>
include標準動做:<jsp:include page="top.jsp"></jsp:include>
include指令:是在編譯以前就把包含文件的代碼合併在了一塊兒,共同生成一個.java文件,因此在編譯的時候會出現重複定義了本地變量的狀況。而include動做先將主頁面獨立生成一個.class文件,運行時候和包含的文件合併在一塊兒,因此不會出現重複定義變量的錯誤信息。
在xml中加入:
<error-page> <error-code>404</error-code> <location>/error404.jsp</location> </error-page>
而後在錯誤指定的頁面page指令中輸入isErrorPage="true"