JSP學習筆記

JSP(Java Server Page)和Servlet是JavaEE的兩個基本成員,二者本質相同,JSP最終也是要被編譯成Servlet之后才能運行。

1、Web應用和web.xml文件

web應用的文件結構如下:

<webDemo>
|-WEB-INF
|          |- classes
|          |-lib
|          |-web.xml
|-<xx.jsp>

2 Jsp的四中基本語法

  • JSP注釋:<%-- 注釋內容 --%>
  • JSP聲明:<%!申明部分 %>

聲明部分可以使用private,public等訪問控制符修飾,但是不能使用abstract。

  • 輸出JSP表達式:<%= 表達式 %>
  • JSP腳本:<% 腳本 %>

在腳本部分可以申明變量,但是不能使用訪問控制符來修飾。

3 Jsp中的2個編譯指令

1.page指令

<%@ 編譯指令名 屬性名=“屬性值”
屬性值包含如下:
language:默認java,無需設置
extends:JSP編譯產生的Java類要繼承的父類或者接口
import:用來導入包,java.lang.,javax.servlet.,javax.servlet.jsp.,javax.servlet.http.都已經默認導入
session:是否需要session
buffer:緩沖區大小,默認8K
autoFlush:當緩沖區即將溢出的時候,是否需要強制輸出緩沖區內容
info:說明,可以通過getServletInfo()來調用
errorPage:錯誤處理頁面
contentType:生成網頁的文件格式和編碼字符集

2.include指令

<%@include file ="filename"%>

4 Jsp中的7個動作指令

1.forward
<jsp:forward page="result.jsp">
  <jsp:param name="aa" value="bb"/>
</jsp:forward>

使用forward指令后瀏覽器地址不會發生變化,并且不會丟失請求的參數。

2.include
<jsp:include page="result.jsp">
  <jsp:param name="aa" value="bb"/>
</jsp:forward>

動態include導入和上面的靜態include導入的方法不同之處在于:

  • 靜態導入是將兩個頁面融合成一個servlet
  • 靜態導入時候編譯指令會琪作用
  • 動態包含還可以增加額外參數

可以發現,include和forward的很相似,區別只是在于include是局部的引入

3.useBean setProperty getProperty指令

這三個都是和JavaBean相關的指令

<jsp:useBean id="p1" class="kevin.Person" scope="page"/>
<jsp:setProperty name="p1" property="name" value="kevin"/>
<jsp:getProperty name="p1" property="name"/>

scope范圍有以下四個:

  • page:該頁有效
  • request:本次請求有效
  • session:本次session有效
  • application:應用中一直有效
4.plugin

用于下載服務端的JavaBean或者Applet到客戶端執行

5.param

<jsp:param name="" value = ""/>

5 JSP腳本中的9個內置對象

這9個內置對象都是Servlet API的接口的實例,只是JSP規范對他們進行了默認初始化

5.1 application

application有兩個作用:
(1)讓jsp與Servlet之間共享參數

<!-- 設置 -->
<% application.setAttribute("counter",String.valueOf(++i)); %>
<!-- 讀取 -->
<%= application.getAttribute("counter") %>
//在Servlet里面共享
ServletContext sc = getServletConfig().getServletContext();
out.println(sc.getAttribute("counter"))

(2)獲得Web應用配置參數
需要的參數都在web.xml中給出

<context-param>
  <param-name>driver</param-name>
  <param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<%
String driver = application.getInitParameter("driver");
5.2 config

jsp頁面通常無需配置,在servlet中比較多用到

5.3 exception

編譯指令page的isErrorPage的屬性為true時,才可以使用

<% exception.getClass() %>
<% exception.getMessage() %>
5.3 out

頁面輸出流,直接調用out.println()

5.4 page

相當于this,通常沒有太大作用

5.5 pageContext

代表頁面上下文,可以訪問page,request,session,application范圍的變量
getAttribute(String name, int scope)
scope可以是:PAGE_SCOPE,REQUEST_SCOPE, SESSION_SCOPE, APPLICATION_SCOPE
還可以通過pageContext來獲取其他內置對象。

5.6 request

request中封裝著一次用戶請求,并且所有的請求參數都被封裝在request中
(1)獲取請求頭/請求參數

<%
//有中文等非西歐字符必須先指定編碼
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
//針對多選框等多個值得
String[] color = request.getParameterValues("color");

(2)操作request范圍的屬性

request.setAttribute("name","value");
request.getAttribute("name");

(3)執行forward和include

getRequestDispatcher("/a.jsp").include(request,response);
getRequestDispatcher("/a.jsp").forward(request,response);
5.7 response

response代表服務器對客戶端的響應
大部分情況下使用out生成響應更簡單,但是有些時候則必須使用response
(1)響應生成非字符響應
response.getOutputStream()
(2)重定向
response.sendRedirect("xx.jsp")
重定向會更改URL,并且會丟失所有參數
(3)增加cookie

Cookie c = new Cookie("username",name);
c.setMaxAge(24*3600);
response.addCookie(c);

下面是訪問cookie的代碼

Cookie[] cookies = request.getCookies();
for (Cookie c:cookies)
{
  if(c.getNames.equals("username")){
    out.println(c.getValue());
  }
}
//如果用到了中文,則需要使用java.net.URLEncoder進行編解碼

5.8 session

session是一個非常有用的對象,代表用戶的一次會話,session的屬性值可以是任何可序列號的Java對象

session.getAttribute("name");
session.setAttribute("name","value");
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Servlet不支持HTML語法,生成網頁需要通過response輸出流輸出,導致生成頁面的代碼非常復雜.JSP支...
    羅志贇閱讀 646評論 0 50
  • 1.什么是JSP (1)jsp全稱是Java Server Pages,它和Servlet技術一樣都是sun公司定...
    yjaal閱讀 3,681評論 5 99
  • 1.學習內容 JSP技術入門和常用指令 JSP的內置對象&標簽介紹 EL表達式&EL的內置對象 2.JSP技術入門...
    WendyVIV閱讀 2,161評論 1 18
  • 一、JSP基礎 1.1什么是JSP JSP(Java ServerPage)是Java服務器端動態頁面技術。是su...
    晨星資源閱讀 1,171評論 0 6
  • 每一個離開家的人最高興的事就是有時間回家。雖然回家的旅途可能充滿險阻,但是一顆歸心似箭的心卻無堅不摧,萬水千山只等...
    八七在路上閱讀 399評論 0 1