JSP總結

JSP

第三章 JSP語法

  1. HTML創建表單表格

    <form action="<%=request.getContextPath() %>/loginservlet" method="post" >
         ...
    	賬戶:
         <input type="text" name="userid" id="userid" >
         密碼:
    	<input type="Password" name="userpwd" id="userpwd">
    	<input type=submit> 
    	<input type=reset>
    </form>
    
    
    <form name="form1" method="post" action="login_deal.jsp">
        用戶名:<input name="username" type="text" /><br />  
        密碼:<input name="pwd" type="password" id="pwd" /><br />
      	<input type="submit" name="Submit" value="提交" />
      	<input type="reset" name="Submit2" value="重置" />
    </form>
    
    request.setCharacterEncoding(“utf-8");
    String username= request.getParameter("username");
    String pwd= request.getParameter("pwd");
    out.println("用戶名爲:"+username);
    if ( pwd!=null && pwd!=“” ) {
       int int_pwd = Integer.parseInt(pwd);
       out.println("密碼爲:"+int_pwd);    
    }
    
    <%String path=request.getContextPath();%>
    <a href="<%=path%>/a.jsp">aaa</a>
    
    
  2. 腳本元素:

    • 隱藏註釋、<%-- --%>

    • 聲明、<%! %>

      變量可以用訪問修飾符如private修飾、可以聲明方法,方法能被代碼塊調用、可以定義靜態語句塊

    • 腳本片段、<% %>

      不能添加訪問控制修飾符、不能定義方法、不能定義static語句塊

    • 表達式、<%= %>

      不以 ;結尾,out.write(表達式);

  3. 指令元素:<%@ %>

    • 頁指令 <%@page %>

      <%@page import="dao.UserDao" %>導包

      設置當前JSP頁面的相關信息、一個JSP頁面可以包含多個Page指令。

    • 包含指令<%@include %>

      用於在當前JSP頁面中,在當前使用該指令的位置嵌入其他的文件

      合併顯示兩個頁面內容、形成一個.java文件,一個.class文件

      靜態聯編兩個文件間可以共享同一變量

    • 標籤庫指令<%@taglib %>

  4. 動作元素:< jsp:useBean >< jsp:setProperty >< jsp:getProperty >< jsp:include >< jsp:forward >< jsp:param >

    • < jsp:forward page = “next.jsp”/>

      發起頁面內容不能顯示到瀏覽器中,程序直接跳轉next.jsp,顯示內容。運行後形成2個.java文件,2個.class文件

    • < jsp:include page = “next.jsp”/>

      發起頁面和目標頁面都能顯示在瀏覽器中。程序顯示兩個文件內容。運行後形成2個.java文件,2個.class文件。
      運行時把兩個.class文件內容顯示到瀏覽器中,動態聯編。

    PS:動態聯編,兩個文件之間不共享同名變量,因爲是兩個獨立的類。

    • <jsp:param name=“參數 ” value=“值"/>用來提供key/value 的信息,不單獨使用

    • <jsp:useBean id="Goods" scope="page" class="handle.shangping"/>

      id:變量名

      scope: 存儲範圍,page: 頁面直接使用,scope指定範圍內,id指定的實例不存在,則生成實例

      class: 完整類名

    • <jsp:setProperty>通常與<jsp:useBean>標識一起使用,它將調用Bean中的setXxx()方法給Bean的簡單或索引屬性賦值。賦的值可以是請求中攜帶的參數。

  5. <%@include page=”文件”%><jsp:include></jsp:include>的區別

    1. 執行時間上:
      • 前者在翻譯階段
      • 後者在請求處理階段
    2. 引入內容不同
      • 前者引入靜態文本(html,jsp),在JSP頁面被轉化成servlet之前和它融和到一起。
      • 後者引入執行頁面或servlet所生成的應答文本。

第四章 內置對象

HTTP–無狀態的

  • request對象獲取客戶瀏覽器的請求
  • response對客戶瀏覽器進行響應
  • session保存着會話期間所需要傳遞的數據信息,基於用戶,隨用戶的斷開而消失,可在多個頁面之間傳遞一個用戶的特定信息
  • application提供應用程序在服務器中運行時的全局信息,實現用戶之間共享數據,基於服務器,隨服務的關閉而消失,可在一個頁面上保留多個用戶的信息
  • out
  1. 重定向

    response對象中的sendRedirect(url)方法

    兩次請求和響應,不是一個request,地址變化

  2. 定時刷新

    response.setHeader("Refresh","1");

    response.setHeader(“Refresh”,“3;url=index.jsp");跳轉新頁面

第五章JavaBean

分離靜態工作部分和動態工作部分。

1. 值Bean

嚴格遵循了JavaBean的命名規範,通常用來封裝表單數據、數據庫數據,作爲信息的容器

2. 工具Bean

可以不遵循JavaBean規範,通常用於封裝業務邏輯,數據操作等,例如連接數據庫,對數據庫進行增、刪、改、查和解決中文亂碼等操作。

3. JavaBean規範

  1. 實現java.io.Serializable接口:實現對象在網絡不同操作系統中傳輸、對象存儲等。

  2. JavaBean是一個public的類

  3. 類中必須存在一個public無參的構造函數

  4. 如果類的成員變量的名字是xxx(通常private),則類中可(不必須)使用兩個方法:

    1. public 類型 getXxx():用來獲取屬性xxx

    2. pubic void setXxx(類型 值) :用來修改屬性xxx

4. JavaBean屬性

  1. 簡單屬性(Simple): getxxx() / setxxx()
  2. 索引屬性(Indexed): 通常爲數組類型的屬性
  3. 綁定屬性(Bound)
  4. 約束屬性(Constrained)

5. Bean的存放目錄:

Bean的源文件連同包放在src下,編譯成功的Bean連同包放在站點\WEB-INF\classes目錄下。

6. 使用

  • <jsp:usebean>定義要用的JavaBean

  • <jsp:setproperty>存儲屬性值

  • <jsp:getproperty>提取屬性值

  • <jsp:useBean id="Goods" scope="page" class="handle.shangping"/>

    id:變量名

    scope: 存儲範圍,page: 頁面直接使用,scope指定範圍內,id指定的實例不存在,則生成實例

    取值 獲取方式 描述
    page 頁面直接使用 創建的JavaBean實例只能夠在當前的JSP文件中使用,包括通過include靜態指令包含的頁面中有效
    request request對象的getAttribute方法獲取 創建的JavaBean實例可以在請求範圍內進行存取
    session session對象的getAttribute方法獲取 創建的JavaBean實例可以在session範圍內進行存取
    application application對象的getAttribute方法獲取 創建的JavaBean實例可以在application範圍內進行存取

    class: 完整類名

  • <jsp:setProperty>通常與<jsp:useBean>標識一起使用,它將調用Bean中的setXxx()方法給Bean的簡單或索引屬性賦值。賦的值可以是請求中攜帶的參數。

    <%-- 單獨用 --%>
    <jsp:useBean ……/> 
    <jsp:setPropery  ……/> 
    <%-- 作爲子標籤:只有bean實例是新創建的情況才執行setProperty --%>
    <jsp:useBean ……>         
    	<jsp:setPropery ……/> 
    </jsp:useBean>
    
  • <jsp:getProperty name="Bean實例名" property="propertyName"/>讀取屬性值,輸出到頁面

第六章 Servlet

1. 生命週期

  1. 客戶端請求服務器,服務器加載Servlet,並創建一個Servlet實例;
  2. 容器調用Servlet的init()方法;
  3. 容器封裝請求響應對象,調用service()方法;
  4. 請求處理結束後,將結果返回給容器;
  5. 容器將結果返回給客戶端進行顯示;
  6. Web服務器關閉時,調用destroy()銷燬Servlet實例。
在這裏插入圖片描述

2. 會創建doGet / doPost

protected void doPost(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, I0Exception {
	doGet(request, response);
}

3. 獲取客戶端提交的信息

4. 調用JavaBean處理結果返回客戶端

第八章

JavaWeb應用程序

<%--login.jsp--%>

<form action="<%=request.getContextPath() %>/loginservlet" method="post" >
    用戶名:<input name="username" type="text" /><br/>  
    密碼:<input name="pwd" type="password" id="pwd" /><br/>
  	<input type="submit" name="Submit" value="提交" />
  	<input type="reset" name="Submit2" value="重置" />
</form>
//loginservlet.java

@WebServlet("/loginservlet")
public class loginservlet extends HttpServlet {
    public loginservlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getSession().invalidate();//清除session的所有信息
        response.sendRedirect(request.getContextPath() + "/index.jsp");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        String userid = request.getParameter("userid");
        String userpwd = request.getParameter("userpwd");

        UserDao uDao = new UserDao();
        if (uDao.queryByUserNameAndPass(userid, userpwd))
            response.sendRedirect(request.getContextPath() +"sy444/index.jsp");
        else
            response.sendRedirect(request.getContextPath() +"sy444/login.jsp");
    }
}
//UserDao.java
    
public class UserDao {
    //根據用戶名和密碼查找,如果找到返回true,否則返回false
    public boolean queryByUserNameAndPass(String u_name,String u_pass) {
        Connection conn = null;
        ResultSet rs = null;
        PreparedStatement stmt = null;
        try {
            conn = JdbcUtils.getCon();
            // ②創建連接。
            String sql ="SELECT * from user where username=? and password=?";
            // ③創建執行SQL語句的對象。
            stmt = conn.prepareStatement(sql);
            stmt.setString(1,u_name);
            stmt.setString(2,u_pass);
            // ④執行查詢數據。
            rs = stmt.executeQuery();
            // ⑤處理查詢結果。
            if (rs.next()) {
                return true;
            }
        } catch (SQLException e) { }finally {JdbcUtils.release(stmt, rs, conn);}
        return false;
    }
    public shangping selsectOne(int id) {
        Connection conn = null;ResultSet rs = null;PreparedStatement stmt = null;
        shangping goods = new shangping();
        try{
            conn = JdbcUtils.getCon();
            String sql ="SELECT * from shangping WHERE id = ?";
            stmt = conn.prepareStatement(sql);
            stmt.setInt(1,id);
            rs = stmt.executeQuery();
            while(rs.next()) {
                String name = rs.getString("name");
                int price = rs.getInt("price");
                int number = rs.getInt("number");
                String picture = rs.getString("picture");

                goods = new shangping(id,name,price,number,picture);
            }
            return goods;
        } catch (SQLException e) { }finally {JdbcUtils.release(stmt, rs, conn);}
        return null;
    }
    
    public boolean addIt(shangping goods, int Num){
        Connection conn = null;
        ResultSet rs = null;
        PreparedStatement stmt = null;
        try{
            conn = JdbcUtils.getCon();
            String sql ="insert into car values(? , ? )";
            stmt = conn.prepareStatement(sql);
            stmt.setInt(1,goods.getId());
            stmt.setString(2,goods.getName());

            int ans = stmt.executeUpdate();
            if(ans>0) return true;
            else return false;
            
        } catch (SQLException e) { }finally {JdbcUtils.release(stmt, rs, conn);}
        return false;
    }

    public boolean updateit(int id, int num){
        Connection conn = null;
        ResultSet rs = null;
        PreparedStatement stmt = null;

        try{
            conn = JdbcUtils.getCon();
            String sql ="update car set num=? where id=?";
            stmt = conn.prepareStatement(sql);
            stmt.setInt(1,num);
            stmt.setInt(2,id);

            int ans = stmt.executeUpdate();
            if(ans>0) {
                return true;
            }else {
                return false;
            }
        } catch (SQLException e) { }finally {JdbcUtils.release(stmt, rs, conn);}
        return false;
    }

    public boolean delit(int id){
        Connection conn = null;ResultSet rs = null;PreparedStatement stmt = null;

        try{
            conn = JdbcUtils.getCon();
            String sql ="delete from car where id=?";
            stmt = conn.prepareStatement(sql);
            stmt.setInt(1,id);

            int ans = stmt.executeUpdate();
            if(ans>0) {
                return true;
            }else {
                return false;
            }
        } catch (SQLException e) { }finally {JdbcUtils.release(stmt, rs, conn);}
        return false;
    }
}
//JdbcUtils

public class JdbcUtils {
    // 加載驅動
    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) { }
    }
    // 創建連接
    public static Connection getCon() {
        Connection conn = null;
        String url = "jdbc:mysql://localhost:3306/php?useUnicode=true&characterEncoding=UTF-8";
        try {
            conn = DriverManager.getConnection(url, "root", "mysqll");
        } catch (SQLException e) { }
        return conn;
    }

    // 釋放資源
    public static void release(Statement st, ResultSet rs, Connection con) {
        try {
            if (rs != null)
                rs.close();
        } catch (SQLException e) { }
        try {
            if (st != null)
                st.close();
        } catch (SQLException e) { }
        try {
            if (con != null)
                con.close();
        } catch (SQLException e) { }

    }
}

分值

填空 10*2

選擇 10*2

判斷 10*1

簡答2*5

程序 1*40

發佈了178 篇原創文章 · 獲贊 72 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章