JAVAEE之jsp語法基礎

jsp的經常使用知識點:

  • jsp的三種註釋
  • 三種scriptlet及其區別
  •       page指令
  •       jsp中鏈接數據庫
  •       包含指令
  •       跳轉指令
  •       登錄程序

jsp的介紹:

jsp是在sun公司吸取了asp的特色,在html中加入了java代碼,造成了jsp。任何的語言都有本身的語法,jsp雖然是在java基礎上的應用,可是依然有其本身擴充的語法,並且在jsp中,全部的java語言均可以使用。javascript

jsp的註釋

jsp的註釋分爲兩類三種:
  •       ·顯示註釋:使用html的註釋風格<!-- 註釋的內容-->
  •       ·隱式註釋
  •            ·java註釋
  •            ·<%--須要註釋的額內容--%>

觀察三種註釋的區別:html

以發現顯示註釋和隱式註釋的區別,所謂的顯示註釋就是在查看網頁源文件的時候能夠看到註釋的內容,隱式註釋在查看網頁源文件的時候看不到註釋的內容。java

2.scriptlet

從使用上來理解,在整個的jsp中scriptlet有三種形式:web

  •   <%java程序%>
  •       ·<%! java程序%>
  •       ·<%= java表達式%>

第一種script:使用的<%java程序%>,這種scriptlet通常使用定義變量和編寫語句。sql

<%
    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輸出一個變量或者一個具體的額內容。tomcat

<%!
    //定義常量
    //編寫方法
    //通常不會定義一個類
    //也不會單獨的編寫語句
    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>

在開發中通常使用第三種oracle

動態打印表格

定義輸入的表單app

<!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連接數據庫

       ·對於包含,要了解包含的語法格式而且要知道兩種不一樣語法包含的區別

       ·對於跳轉來講,必定要區分清楚什麼是服務端跳轉,什麼是客戶端跳轉

相關文章
相關標籤/搜索