jsp的常用知識點:
- jsp的三種注釋
- 三種scriptlet及其區別
- page指令
- jsp中連接數據庫
- 包含指令
- 跳轉指令
- 登陸程序
jsp的介紹:
jsp是在sun公司吸收了asp的特點,在html中加入了java代碼,形成了jsp。任何的語言都有自己的語法,jsp雖然是在java基礎上的應用,但是依然有其自己擴充的語法,而且在jsp中,所有的java語言都可以使用。
jsp的注釋
jsp的注釋分為兩類三種:
- ·顯示注釋:使用html的注釋風格<!-- 注釋的內容-->
- ·隱式注釋
- ·java注釋
- ·<%--需要注釋的額內容--%>
觀察三種注釋的區別:
以發現顯示注釋和隱式注釋的區別,所謂的顯示注釋就是在查看網頁源文件的時候可以看到注釋的內容,隱式注釋在查看網頁源文件的時候看不到注釋的內容。
2.scriptlet
從使用上來理解,在整個的jsp中scriptlet有三種形式:
- <%java程序%>
- ·<%! java程序%>
- ·<%= java表達式%>
第一種script:使用的<%java程序%>,這種scriptlet一般使用定義變量和編寫語句。
<% int sum = 0; int sumA = ++sum; System.out.println(sumA); %>
以上程序可以在控制台輸出,如果我想要在頁面上輸出內容呢?這個時候我們必須使用out對象,out是jsp的內置對象之一,也就是說不需要實例化就可以使用的對象。
<% int sum = 0; int sumA = ++sum; System.out.println(sumA); out.print("<h1>"+sumA+"<h1>");//向瀏覽器輸出 %>
第二種scriptlet:<%! java程序%>在此種scriptlet中可以聲明常量,編寫方法,編寫類,但是一般情況下,我們不會在一個jsp中編寫一個類的。而且在此種的scriptlet中不會單獨的編寫語句。
<%! //定義常量 //編寫方法 //一般不會定義一個類 //也不會單獨的編寫語句 public static final String DRIVER = "oracle.jdbc.driver.OracleDriver"; public static final String URL = "jdbc:oracle:thin:@192.168.1.102:1521:wanczy"; public static final String USERNAME = "scott"; public static final String PASSWORD = "wanczy"; public int cheng(int x,int y){ return x*y; } %> <% out.print("<h1>"+DRIVER+"</h1>"); out.print("<h1>"+URL+"</h1>"); out.print("<h1>"+USERNAME+"</h1>"); out.print("<h1>"+PASSWORD+"</h1>"); int z = cheng(10,20); out.print("<h1>"+z+"</h1>"); %>
第三種scriptlet:<%=java表達式%>,此種scriptlet有一個別名,叫做表達式輸出,可以使用此種形式的scriptlet輸出一個變量或者一個具體的額內容。
<%! //定義常量 //編寫方法 //一般不會定義一個類 //也不會單獨的編寫語句 public static final String DRIVER = "oracle.jdbc.driver.OracleDriver"; public static final String URL = "jdbc:oracle:thin:@192.168.1.102:1521:wanczy"; public static final String USERNAME = "scott"; public static final String PASSWORD = "wanczy"; public int cheng(int x,int y){ return x*y; } %> <h1><%= DRIVER%></h1> <h1><%= URL%></h1> <h1><%= USERNAME%></h1> <h1><%= PASSWORD%></h1> <h1><%= cheng(10,200)%></h1>
在開發中一般使用第三種
動態打印表格
定義輸入的表單
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>inputTable.html</title> </head> <body> <center> <form action = "jspDemo05.jsp" method="post" onsubmit="return checkValue(this)"> <!-- action 表示的是次表單提交的路徑 --> <!-- method 表示的提交方式,有兩種(post、get) --> <!-- onsubmit表示提交出發的事件 --> <table> <caption>輸入行和列</caption> <tr> <td align="right">輸入行:</td> <td align="left"><input type="text" name="rows"/></td> </tr> <tr> <td align="right">輸入列:</td> <td align="left"><input type="text" name="cols"/></td> </tr> <tr> <td align="right"><input type="submit" value="提交"/></td> <td align="left"><input type="reset" value="重置"/></td> </tr> </table> </form> </center> </body> <script type="text/javascript"> function checkValue(f){ var rows = f.rows.value;//取得輸入的行 var cols = f.cols.value; if(isNaN(rows)){//使用正則 alert("行必須輸入數字"); f.rows.focus();//此標簽得到焦點 return false; } if(isNaN(cols)){//使用正則 alert("列必須輸入數字"); f.cols.focus();//此標簽得到焦點 return false; } return true; } </script> </html>
定義jsp打印表格
<% //接收表單傳遞的參數,使用request.getParemeter(參數名稱) int rows = Integer.parseInt(request.getParameter("rows")); int cols = Integer.parseInt(request.getParameter("cols")); %> <table border="1"> <% for(int i = 1;i<= rows;i++){ %> <tr> <% for(int j = 1;j<=cols;j++){ %> <td><%=i*j %></td> <% } %> </tr> <% } %> </table>
4.page指令
page表示的是當前的jsp的頁面,可以理解為一個對象,就是說可以將jsp頁面當做一個對象來看待,page指令的主要功能有兩個:
·設置MIME類型
·導包指令
MIME:多功能網際郵件擴充協議,主要的功能就是制定瀏覽器的訪問形式及編碼格式。
<%@page contentType="text/html; charset=utf-8" %>
設置編碼格式,防止亂碼
們之前說過html和htm都是靜態網頁的后綴,處理的形式是完全一樣的,這就是因為其內部的MIME類型設置是相同的。我們可以通過Tomcat/conf/web.xml查看所有的MIME類型。
<mime-mapping> <extension>abs</extension> <mime-type>audio/x-mpeg</mime-type> </mime-mapping> <mime-mapping> <extension>ai</extension> <mime-type>application/postscript</mime-type> </mime-mapping> <mime-mapping> <extension>aif</extension> <mime-type>audio/x-aiff</mime-type> </mime-mapping> <mime-mapping> <extension>aifc</extension> <mime-type>audio/x-aiff</mime-type> </mime-mapping>
MIME類型有很多,只要合理的設置了MIME類型,則一個頁面理論上是可以顯示成任意的風格
使用page進行導包
使用import指令完成導包,而且import是jsp中唯一一個可以設置多次的指令。
<%@page contentType="text/html; charset=utf-8"%> <%@page import="java.sql.*,java.util.*"%> <%@page import = "java.io.*"%> <%@page import="com.wanczy.*"%>
既然我們在jsp中可以導入sql包,也就是意味着jsp可以鏈接數據庫了,既然jsp要鏈接數據庫的話,必須要導入Oracle驅動包,實際上只需要在tomcat/lib目錄中加入驅動程序就可以了。如果是通過快速部署項目的話,驅動程序還必須導入到工程中去,有兩種方式:
·類似與java工程一樣進行導入
·將驅動程序放入到web-inf/lib目錄中
范例:查詢dept表中的所有的數據
<%@page contentType="text/html; charset=utf-8"%> <%@page import="java.sql.*"%> <%! //定義常量 //編寫方法 //一般不會定義一個類 //也不會單獨的編寫語句 public static final String DRIVER = "oracle.jdbc.driver.OracleDriver"; public static final String URL = "jdbc:oracle:thin:@192.168.1.103:1521:wanczy"; public static final String USERNAME = "scott"; public static final String PASSWORD = "wanczy"; %> <table> <caption>部門信息表</caption> <tr> <th>部門編號</th> <th>部門名稱</th> <th>部門位置</th> </tr> <% Class.forName(DRIVER); Connection conn = DriverManager.getConnection(URL,USERNAME,PASSWORD); String sql = "select deptno,dname,loc from dept"; PreparedStatement pstate = conn.prepareStatement(sql); ResultSet res = pstate.executeQuery(); while(res.next()){ %> <tr> <td><%=res.getInt(1) %></td> <td><%=res.getString(2) %></td> <td><%=res.getString(3) %></td> </tr> <% } res.close(); pstate.close(); conn.close(); %> </table>
5.包含指令
頭部信息 |
|
操作菜單 |
實際的操作區域 |
尾部信息 |
如果想要實現以上的網頁的布局,有兩種方式:
·分別將頭信息,操作菜單,實際操作區域和尾部信息寫在不同的界面里面,用包含的方式進行包含(框架布局,包含)
·所有的內容寫在一個頁面中(響應式布局)
以上的兩種形式,現在最流行的是響應式布局,但是響應式布局存在問題就是維護不方便,一個頁面中的內容太多了
在jsp中使用include進行包含,語法有兩種格式:
·@include指令
·<jsp:include> jsp的include標簽
第一種包含:使用include指令,這種包含叫做靜態包含,主頁面不能夠向被包含的頁面傳遞參數,可以包含任意類型的文件,將包含文件的內容加載。
<%@page contentType="text/html; charset=utf-8"%> <h1>includeDemo01.jsp</h1> <%@include file="content.html"%> <%@include file="content.txt"%> <%@include file="content.jsp"%> <%@include file="content.ini"%>
現在我們新建了幾個不同類型的文件,使用包含語句將這幾個文件全部包含到jsp中。程序顯示的效果是將這幾個不同類型文件的內容加載進來。
第二種包含:使用<jsp:include page=”被包含界面”>,這種包含稱為動態包含,如果被包含的界面是jsp,則先處理之后將jsp的結果進行包含,如果是非jsp的頁面的話,則和靜態的包含是一致。語法格式有兩種:
·<jsp:include page =”被包含頁面”/>
·<jsp:include page=”被包含的頁面”>
<jsp:param name=”參數名稱” value=”參數的值”/>
<jsp:param name=”參數名稱” value=”參數的值”/>
…
</jsp:include>
范例:使用第一種語法格式
<%@page contentType="text/html; charset=utf-8"%> <h1>includeDemo01.jsp</h1> <jsp:include page="content.html"/> <jsp:include page="content.txt"/> <jsp:include page="content.jsp"/> <jsp:include page="content.ini"/>
以上的包含和使用include指令包含效果是相似的,我們把這種包含也成為靜態包含。
范例:第二種語法格式,如果要向被包包含的頁面傳遞參數的話,那么必須被包含的界面是jsp界面
以上的包含和使用include指令包含效果是相似的,我們把這種包含也成為靜態包含。
范例:第二種語法格式,如果要向被包包含的頁面傳遞參數的話,那么必須被包含的界面是jsp界面
<%@page contentType="text/html; charset=utf-8"%> <h1>includeDemo02.jsp</h1> <!-- 傳遞參數 --> <jsp:include page="includeDemo03.jsp"> <jsp:param value="DH15" name="className"/> <jsp:param value="FangLinTang,QiCao" name="classMo"/> </jsp:include>
<%@page contentType="text/html; charset=utf-8"%> <h1>includeDemo03.jsp</h1> <!-- 接收參數 --> <h1><%=request.getParameter("className") %></h1> <h1><%=request.getParameter("classMo") %></h1>
兩種包含的區別:我們知道包含有include指令和jsp的include標簽,那么我們要通過代碼來觀察兩種包含的區別:
·第一種包含
<%@page contentType="text/html; charset=utf-8"%> <h1>includeDemo01.jsp</h1> <% int i = 0; %> <%@include file="content.jsp" %> <h1><%=i %></h1>
<h1>Content.jsp</h1> <% int i = 0; %> <h1><%=i %></h1>
發現提出錯誤:重復定義了變量i,因為include指令格式的包含是將內容進行包含。
<%@page contentType="text/html; charset=utf-8"%> <h1>includeDemo01.jsp</h1> <% int i = 0; %> <jsp:include page="content.jsp"/> <h1><%=i %></h1>
現在第第二種包含可以正確的顯示,不會收到包含與包含程序的影響,通過以上的兩個程序我們可以得出include指令包含和jsp:include包含的區別:
·指令包含是將被包含頁面的內容進行包含
·標簽包含是將被包含頁面的結果進行包含
6.跳轉指令
頁面和頁面之間的跳轉,我們目前知道的有兩種:
·通過超鏈接
·表單提交
今天我們來講到第三種:使用<jsp:forward>標簽完成跳轉功能,當我們程序執行到語句的時候,會立刻無條件的跳轉,跳轉指令也屬於標簽指令格式。語法有兩種:
·<jsp:forward page=”跳轉后的界面”/>
·<jsp:forward page=”跳轉后的界面” >
<jsp:param name=”參數名稱” value=”參數的值”/>
…
</jsp:forward>
所有的jsp的標簽都需要完結的,在開發中,我們盡量將所有的標簽都進行完結。
范例:完成跳轉的功能
<%@page contentType="text/html; charset=utf-8"%> <h1>這是frowardDemo01.jsp</h1> <jsp:forward page="forwardDemo2.jsp"> <jsp:param value="DH15" name="className"/> </jsp:forward>
<%@page contentType="text/html; charset=utf-8"%> <h1>這是frowardDemo2.jsp</h1> <h1><%=request.getParameter("className") %></h1>
發現我們的程序進行了跳轉,而且向跳轉后的頁面傳遞了參數,從頁面顯示來看,雖然完成了跳轉功能,但是地址欄依然顯示的forwardDmeo01.jsp,也就是說地址欄沒有發生改變,以后碰到如果跳轉后地址欄顯示的是跳轉前的地址,那么這種跳轉我們叫做是服務端跳轉,只要是服務端跳轉,地址欄是永遠不會發生變化的。像a標簽和表單提交,我們都知道地址欄會發生變化,這種跳轉我們叫做客戶端跳轉。以上的程序進行了服務端跳轉而且向跳轉后的頁面傳遞了參數。
7.小結
·jsp中三種注釋和三種script
·可以通過設置mime類型完成瀏覽器訪問時的編碼的設置
·導包指令的話可以導入任意的存在包
·jsp鏈接數據庫
·對於包含,要了解包含的語法格式並且要知道兩種不同語法包含的區別
·對於跳轉來說,一定要區分清楚什么是服務端跳轉,什么是客戶端跳轉