天天看點

JSP一、jsp基礎二、EL表達式(重點)三、自定義标簽四、JSTL核心标簽庫五、javaBean六、系統開發模型

文章目錄

  • 一、jsp基礎
    • 1、jsp簡介
    • 2、jsp注釋
    • 3、jsp的java代碼塊
    • 4、jsp的聲明語句塊
    • 5、jsp的表達式語句塊
    • 6、jsp内置對象
      • 1.pageContext
      • 2.out
    • 7、jsp指令
      • 1、page指令
      • 2、include指令
    • 8、jsp動作
      • 1、forword動作
      • 2、include動作
  • 二、EL表達式(重點)
    • 1、擷取資料
      • 1.從四大域中查找值
      • 2.從指定域擷取值
      • 3.通路bean的屬性
      • 4.EL通路數組
      • 5.EL通路List
      • 6.EL通路Map
    • 2、EL中的運算符
    • 3、EL内置對象
      • 1.pageContext
      • 2.param
      • 3.paramValues
      • 4.initParam
    • 4、自定義EL函數
    • 5、JSTL的EL函數庫\
  • 三、自定義标簽
    • 1.自定義标簽的基本用法
    • 2.帶标簽體的标簽
    • 3.帶屬性的标簽
    • 4.自定義标簽周遊所有類型的集合和數組
  • 四、JSTL核心标簽庫
    • 1.五大标簽庫
  • 五、javaBean
  • 六、系統開發模型
    • 1.純JSP開發
    • 2.JSP+JavaBean的Model1
    • 3.MVC的Model2
    • 4.三層架構
    • 5.MVC+三層架構

一、jsp基礎

1、jsp簡介

JSP即:Java Server pages(java 伺服器頁面),運作在服務端的頁面,是sun公司和多家大公司共同開發的一種動态網頁技術,它是在靜态的html檔案中插入java代碼段和jsp标簽形成的檔案,字尾為.jsp

當使用者第一次通路jsp頁面的時候,會由tomcat伺服器生成一個servelt檔案,使用者通路的頁面其實就是通路的這個servlet

idea下jsp通路産生的路徑C:\Users\79894.IntelliJIdea2019.3\system\tomcat_javeWeb\work\Catalina\localhost\JSP\org\apache\jsp

JSP一、jsp基礎二、EL表達式(重點)三、自定義标簽四、JSTL核心标簽庫五、javaBean六、系統開發模型

裡面的内容

/*
 * Generated by the Jasper component of Apache Tomcat
 * Version: Apache Tomcat/8.5.65
 * Generated at: 2021-04-30 06:43:43 UTC
 * Note: The last modified time of this file was set to
 *       the last modified time of the source file after
 *       generation to assist with modification tracking.
 */
package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent,
                 org.apache.jasper.runtime.JspSourceImports {

  private static final javax.servlet.jsp.JspFactory _jspxFactory =
          javax.servlet.jsp.JspFactory.getDefaultFactory();

  private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;

  private static final java.util.Set<java.lang.String> _jspx_imports_packages;

  private static final java.util.Set<java.lang.String> _jspx_imports_classes;

  static {
    _jspx_imports_packages = new java.util.HashSet<>();
    _jspx_imports_packages.add("javax.servlet");
    _jspx_imports_packages.add("javax.servlet.http");
    _jspx_imports_packages.add("javax.servlet.jsp");
    _jspx_imports_classes = null;
  }

  private volatile javax.el.ExpressionFactory _el_expressionfactory;
  private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;

  public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
    return _jspx_dependants;
  }

  public java.util.Set<java.lang.String> getPackageImports() {
    return _jspx_imports_packages;
  }

  public java.util.Set<java.lang.String> getClassImports() {
    return _jspx_imports_classes;
  }

  public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
    if (_el_expressionfactory == null) {
      synchronized (this) {
        if (_el_expressionfactory == null) {
          _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
        }
      }
    }
    return _el_expressionfactory;
  }

  public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
    if (_jsp_instancemanager == null) {
      synchronized (this) {
        if (_jsp_instancemanager == null) {
          _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
        }
      }
    }
    return _jsp_instancemanager;
  }

  public void _jspInit() {
  }

  public void _jspDestroy() {
  }

  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {

    final java.lang.String _jspx_method = request.getMethod();
    if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
      response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 隻允許 GET、POST 或 HEAD。Jasper 還允許 OPTIONS");
      return;
    }

    final javax.servlet.jsp.PageContext pageContext;
    javax.servlet.http.HttpSession session = null;
    final javax.servlet.ServletContext application;
    final javax.servlet.ServletConfig config;
    javax.servlet.jsp.JspWriter out = null;
    final java.lang.Object page = this;
    javax.servlet.jsp.JspWriter _jspx_out = null;
    javax.servlet.jsp.PageContext _jspx_page_context = null;


    try {
      response.setContentType("text/html;charset=UTF-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

      out.write("\n");
      out.write("\n");
      out.write("<html>\n");
      out.write("  <head>\n");
      out.write("    <title>$Title$</title>\n");
      out.write("  </head>\n");
      out.write("  <body>\n");
      out.write("  這是一個jsp檔案\n");
      out.write("  </body>\n");
      out.write("</html>\n");
    } catch (java.lang.Throwable t) {
      if (!(t instanceof javax.servlet.jsp.SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
          try {
            if (response.isCommitted()) {
              out.flush();
            } else {
              out.clearBuffer();
            }
          } catch (java.io.IOException e) {}
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
        else throw new ServletException(t);
      }
    } finally {
      _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }
}

           

2、jsp注釋

1.html注釋

2.jsp注釋

<%--這是jsp注釋,jsp注釋不顯示在前台頁面上,僅僅顯示在jsp源碼中--%>
           

例如:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  這是一個jsp檔案
  <!--html注釋-->
  <%--jsp注釋,僅在這個檔案下顯示--%>
  </body>
</html>
           

前台頁面源碼:

<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>f
  這是一個jsp檔案
  <!--html注釋-->
  </body>
</html>
           

3、jsp的java代碼塊

文法:

<%
	System.out.println("java代碼塊");
%>
           

注意:不可以寫方法,變量名前不可以加通路修飾符,因為這些代碼都會被插入到jsp_service()方法中

4、jsp的聲明語句塊

文法:

<%!
	private int a = 0;
%>
           

這裡的代碼将會被插入到類中,是以可以加通路修飾符,也可以在這裡面寫方法,寫靜态代碼塊

5、jsp的表達式語句塊

文法:

<%=
	表達式,可以将變量寫在這裡,然後會在浏覽器中顯示
%>
           

這行代碼會被插入到service方法中

6、jsp内置對象

在jsp的java代碼塊、表達式塊等可以直接使用的被成為jsp内置對象,常用的内置對象有9個

内置對象名 類型
pageContext javax.servlet.jsp.PageContext
request javax.servlet.http.HttpServletRequset
session javax.servlet.http.HttpSession
application javax.servlet.ServeltContext
response javax.servelt.http.HttpServletResponse
config javax.servelt.ServletConfig
out javax.servlet.jsp.JspWriter
page java.lang.Object
exception java.lang.Throwable

1.pageContext

頁面上下文,四大域中的一個,雖然是域,但一般不用,因為作用域隻能在目前頁面有效

但是可以通過它擷取其他八個内置對象

2.out

out是JspWriter的子類,是一個輸出流,可以将資料輸出到浏覽器

7、jsp指令

jsp指令作用:為目前頁面提供一些基礎屬性設定,為目前頁面的運作體提供基礎的環境

一共有三種指令:page指令,include指令,taglib指令。這裡暫時先描述前兩種

文法:<%@ 指令名稱 屬性名=屬性值 屬性名=屬性值 …%>

1、page指令

**pageEncoding:**指定目前頁面編碼方式,如果使用這個,那麼contentType預設是text/html

contentType:可以指定text/html解析方式,與pageEncoding用一個就行

**import:**導包

<%@ page import="java.util.*"%>
<%@ page import="java.util.*,java.text.*"%>
           

errorPage:

頁面出錯後跳轉到指定頁面

<%@ page errorPage="error.jsp"%>
           

isErrorPage:

指定目前頁面為錯誤處理頁面,那麼就會顯示錯誤資訊

<%@ page isErrorPage="true"%>
ex= <%= exception.getMessage()%>
           

**session:**一般讀資料的時候設定成false,否則沒有讀取到的話就會建立一個新的session,占記憶體

session的使用原則:存:getSession(),取:getSession(false);有老的就用老的,沒老的也不建新的

<%@ page session="false"%>
<%
	HttpSession session = request.getSession(false);	
	if(session!=null){
        String user = (String)session.getAttribute("user");
        out.print(user);
    }
%>
           

2、include指令

<%@ include file="/test.jsp"%>
           

這叫做靜态聯編:編譯之前就将内容合并到了一起

作用:一個頁面可以多次使用

8、jsp動作

由于大量的使用java代碼塊,表達式塊等内容,使得頁面雜亂無章

有些公司明文規定不可以使用java代碼塊和表達式塊

推薦使用EL表達式 JSTL标簽,jsp動作

文法:

<jsp:動作名稱 屬性=屬性值 屬性=屬性值 ......></jsp:動作名稱>
或者
<jsp:動作名稱 屬性=屬性值 屬性=屬性值 ....../>
           

1、forword動作

不可以向标準輸出流寫入資料

<jsp:forward page="/next.jsp"/><%--會直接跳到next.jsp--%>
           

2、include動作

可以向标準輸出流寫入資料

<jsp:include page="/next.jsp"/><%--頁面會合并起來--%>
           

動态聯編:編譯的時候會生成多個servlet,不可以共享變量

推薦使用靜态聯編,因為隻會生成一個servlet,對資源的消耗比較小

二、EL表達式(重點)

定義:是一種擷取資料的簡單方式(隻能從四大域擷取)

文法:${exprition}

1、擷取資料

1.從四大域中查找值

<%
	String user = "張三";
	pageContext.setAttribute("user",user);
    requset.setAttribute("user",user);
	session.setAttribute("user",user);
	application.setAttribute("user",user);
%>
user = ${user}
           

擷取值的時候會從四大域由小到大查找

查找資料的順序:pageContext,requset,session,application

2.從指定域擷取值

${pageScope.value}<%--指定從pageContext擷取值--%>
${requestScope.value}<%--指定從request擷取值--%>
${sessionScope.value}<%--指定從session中擷取值--%>
${applicationScope.value}<%--指定從application中擷取值--%>
           

3.通路bean的屬性

EL表達式如果使用為null的對象的屬性,EL是不會抛出空指針異常的,其僅僅是不顯示而已

<% page import="com.bean.*"%>
schoolName = ${student.school.schoolName}
           

4.EL通路數組

<%
	String[] names = ["test01","test02"];
	pageContext.setAttribute("names",names);
%>
names[0] = ${names[0]}
names[1] = ${names[1]}
           

若通路的數組下标超出了長度,EL不會抛出數組越界異常

5.EL通路List

<%
	List<String> names = new ArrayList<>();//jdk8支援這樣寫
	names.add("張三");
	names.add("李四");
	pageContext.setAttribute("names",names);
%>
names[0] = ${names[0]}
           

EL無法通路Set

6.EL通路Map

<%
	Map<String,Object> map = new HashMap<>();
	map.put("school",new School("河北科技大學","石家莊市"));
	map.put("age",21);
%>
school.name = ${map.school.sname}<%--這裡會自動做一個向下轉型--%>
age = ${map.age}
           

2、EL中的運算符

序号 種類 運算符
1 算術運算符 + - * / % (不支援++ --)
2 關系運算符 == != > < >= <=
3 邏輯運算符 ! && || not and or
4 條件運算符 ? :
5 取值運算符 [] 點号.

除了以上的運算符,還有一個重要的運算符 empty

用法:${empty 變量}

如果變量為空,空字元串,空的引用,空集合或者空數組,那麼就傳回true,否則傳回false

<%
    String userName = "張三";
    Integer age = null;
    pageContext.setAttribute("userName",userName);
    pageContext.setAttribute("age",age);
  %>
  userName = ${userName}<br>
  age = ${(empty age)?"暫無資料":age}
           

3、EL内置對象

上面從指定域擷取資料用到了四個,下面介紹一些其他常用的

1.pageContext

對于這個對象,用的最多的地方就是

<form action="${pageContext.request.contextPath}/registerServlet" method="GET">
    
</form>
           

${pageContext.request.contextPath} 擷取目前網站路徑

2.param

擷取請求中的指定參數值,其底層調用的是request.getParamter()

可用于頁面之間傳值

姓名:${param.userName}
           

3.paramValues

擷取多個值用paramValues ,其底層調用的是requset.getParamterValues()

愛好:${empty paramValues.hobby[0]?"":paramValues.hobby[0]}<br>
愛好:${empty paramValues.hobby[1]?"":paramValues.hobby[1]}<br>
愛好:${empty paramValues.hobby[2]?"":paramValues.hobby[2]}<br>
           

4.initParam

web.xml

<context-param>
	<param-name>company1</param-name>
    <param-value>aaa</param-value>
</context-param>
<context-param>
	<param-name>company2</param-name>
    <param-value>bbb</param-value>
</context-param>
           

擷取初始化參數

${initParam.company1}
${initParam.company2}
           

其底層調用的是servletContext.getInitParamter()

4、自定義EL函數

注意:EL表達式不支援字元串的拼接

例子:

實作字元串小寫變大寫

步驟:

1.建立一個自定義的方法

package com.fjh.test01;

public class ElFunction {
    //将字元串小寫變大寫
    public static String lowerToUpper(String source){
        return source.toUpperCase();
    }
}

           

2.需要在在一個拓展名為.tld的xml檔案中進行注冊

tld tag library definition 标簽庫定義

xml檔案是需要限制的,需要配置檔案的頭部,這個頭部可以在tomcat中進行複制

在tomcat安裝路徑下E:\program\apache-tomcat-8.5.65\webapps\examples\WEB-INF\jsp2

<?xml version="1.0" encoding="ISO-8859-1"?>

<taglib xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
        version="2.1">

    <tlib-version>1.0</tlib-version>
    <short-name>my</short-name>
    <uri>http://mycompany.com</uri>

    <!-- Invoke 'Generate' action to add tags or functions -->
<!--    注冊函數-->
    <function>
        <name>lowerToUpper</name>
        <function-class>com.fjh.test01.ElFunction</function-class>
        <function-signature>java.lang.String lowerToUpper(java.lang.String)</function-signature>
    </function>
</taglib>
           

3.使用函數

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://mycompany.com" prefix="my"%>
<html>
  <head>
    <title>index</title>
  </head>
  <body>  
  ${my:lowerToUpper("ABC")}
  </body>
</html>
           

5、JSTL的EL函數庫\

JSTL:jsp Standard tag library 這是Apache定義好的一套标準的标簽庫規範

需要引入jar包 jstl.jar和standard.jar

三、自定義标簽

1.自定義标簽的基本用法

步驟

1.定義一個類實作 javax.servlet.jsp.tagext.SimpleTag 這個類成為标簽處理器類

package com.fjh.test02;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;

public class GetIp extends SimpleTagSupport {
    @Override
    public void doTag() throws JspException, IOException {
        //擷取pageContext對象
        PageContext pc = (PageContext) this.getJspContext();
        //擷取請求對象
        ServletRequest request = pc.getRequest();
        //擷取用戶端ip
        String ip = request.getRemoteAddr();
        pc.getOut().print(ip);
    }
}
           

2.注冊

<?xml version="1.0" encoding="ISO-8859-1"?>

<taglib xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
        version="2.1">

    <tlib-version>1.0</tlib-version>
    <short-name>myTag</short-name>
    <uri>http://my.com</uri>

    <!-- Invoke 'Generate' action to add tags or functions -->
    <tag>
        <name>getIp</name>
        <tag-class>com.fjh.test02.GetIp</tag-class>
        <body-content>empty</body-content>
    </tag>
</taglib>

           

3.使用

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://my.com" prefix="myTag"%>
<html>
  <head>
    <title>index</title>
  </head>
  <body>
  <myTag:getIp/>
  </body>
</html>

           

2.帶标簽體的标簽

步驟

1定義标簽處理器

public class TagTest01 extends SimpleTagSupport {
    @Override
    public void doTag() throws JspException, IOException {
        //StringWriter可以擷取流中的内容
        StringWriter sw = new StringWriter();
        //擷取标簽體内容
        JspFragment jspBody = this.getJspBody();
        //擷取标準輸出流
        JspWriter out = this.getJspContext().getOut();
        //将标簽體内容寫入到流中
        jspBody.invoke(sw);
        //擷取流中的内容
        String content = sw.toString().toUpperCase();
        //将内容用标準輸出流顯示在頁面上
        out.print(content);
    }
}
           

2注冊标簽

<tag>
        <name>show</name>
        <tag-class>com.fjh.test02.TagTest01</tag-class>
        <!--
         empty:表示目前沒有标簽體
         scriptless:表示有标簽體,但是該标簽體不會出現java代碼塊,jsp表達式,但是可以出現EL表達式
         jsp:已經棄用,具有标簽體,會将标簽體内容原樣顯示在浏覽器
         tagdependent:表示目前标簽具有标簽體,将标簽内容原樣顯示在浏覽器中,但是不會對EL表達式進行計算
         -->
        <body-content>scriptless</body-content>
    </tag>
           

3使用标簽

<%
    pageContext.setAttribute("content","zhangsan");
  %>
  <myTag:show>${content}</myTag:show>
           

3.帶屬性的标簽

1.定義标簽處理器類

public class TagTest02 extends SimpleTagSupport {
    private boolean test;

    public void setTest(boolean test) {
        this.test = test;
    }

    @Override
    public void doTag() throws JspException, IOException {
        if (test) {
//            //擷取标簽體
//            JspFragment jf = this.getJspBody();
//            //将标簽體寫入到标準輸出流
//            jf.invoke(this.getJspContext().getOut());

        this.getJspBody().invoke(null);
        //這一句等價于上面,參數為空的時候自動會有一個标準的輸出流
        }
    }
}
           

2.注冊

<!--    帶屬性的标簽-->
    <tag>
        <name>if</name>
        <tag-class>com.fjh.test02.TagTest02</tag-class>
        <body-content>tagdependent</body-content>
        <attribute>
            <name>test</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
            <!--
                runtime expression value
                若為true 則屬性支援EL和jsp表達式
            -->
        </attribute>
    </tag>
           

3.使用

<%
    pageContext.setAttribute("gender",true);
  %>
  <myTag:if test="${gender}">男</myTag:if>
  <myTag:if test="${not gender}">女</myTag:if>
           

4.自定義标簽周遊所有類型的集合和數組

1.标簽處理器

package com.fjh.test02;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.*;

public class ForEach extends SimpleTagSupport {
    private Object items;
    private String var;

    public void setItems(Object items) {
        this.items = items;
    }

    public void setVar(String var) {
        this.var = var;
    }
    //可以處理任何集合或者數組
    public Collection getColl(){
        if(items instanceof List){
            return (List)items;
        }else if(items instanceof Set){
            return (Set)items;
        }else if(items instanceof Map){
            return ((Map) items).entrySet();
        }else if(items.getClass().isArray()){
            List nums = new ArrayList();
            for(int i = 0;i< Array.getLength(items);i++){
                    nums.add(Array.get(items,i));
            }
            return nums;
        }
        return null;
    }

    @Override
    public void doTag() throws JspException, IOException {
        for(Object obj:getColl()){
            this.getJspContext().setAttribute(var,obj);
            this.getJspBody().invoke(null);
        }
    }
}

           

2.注冊

<tag>
        <name>forEach</name>
        <tag-class>com.fjh.test02.ForEach</tag-class>
        <body-content>scriptless</body-content>
        <attribute>
            <name>items</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>var</name>
            <required>true</required>
            <rtexprvalue>false</rtexprvalue>
        </attribute>
    </tag>
           

3.使用

----------周遊List------------
  <br>
  <%
    List users = new ArrayList();
    users.add("張三");
    users.add("李四");
    users.add("王五");
    pageContext.setAttribute("users",users);
  %>
  <myTag:forEach items="${users}" var="user">
    ${user}<br>
  </myTag:forEach>

  ----------周遊Set------------
  <br>
  <%
    Set set = new HashSet();
    set.add("張三");
    set.add("李四");
    set.add("王五");
    pageContext.setAttribute("set",set);
  %>
  <myTag:forEach items="${set}" var="s">
    ${s}<br>
  </myTag:forEach>
  ----------周遊Map------------
  <br>
  <%
    Map map = new HashMap();
    map.put("name","123");
    map.put("age",12);
    pageContext.setAttribute("map",map);
  %>
  <myTag:forEach items="${map}" var="m">
    ${m}<br>
  </myTag:forEach>
  ----------周遊數組------------
  <br>
  <%
    int[] age = {12,13,14};
    pageContext.setAttribute("age",age);
  %>
  <myTag:forEach items="${age}" var="a">
    ${a}<br>
  </myTag:forEach>
           

4.結果

----------周遊List------------
張三
李四
王五
----------周遊Set------------
李四
張三
王五
----------周遊Map------------
name=123
age=12
----------周遊數組------------
12
13
14
           

四、JSTL核心标簽庫

1.五大标簽庫

核心标簽庫:完成基本的邏輯運算,重點

格式化标簽庫:主要用于日期和數字的格式化

EL函數标簽庫:定義了若幹EL函數

SQL函數标簽庫:完成SQL操作,不使用了,現在使用java代碼完成

XML操作标簽庫:完成XML操作,不使用了,現在使用java代碼完成

最近時間比較緊,而且jsp程式設計用的不是很多了,是以後面的就省略了

放個連結,可以看看

click這兒

五、javaBean

分類

廣義javaBean

​ 資料承載bean

​ 業務處理bean

狹義javaBean

​ 狹義的javaBean是指符合sun公司提出的javaBean規範的java類,javaBean規範規定,滿足以下四點的java類稱為javaBean

1.該類需要時公共的

2.該類需要實作Serilizable接口

3.該類需要具備無參構造器

4.該類有成員變量,這些成員變量必須是私有的,且需要提供這些屬性的setter和getter方法

在實際項目中,實體類一般會被定義為狹義的javaBean,即廣義的javaBean的資料承載Bean一般會被定義為滿足JavaBean規範的狹義javaBean

六、系統開發模型

1.純JSP開發

2.JSP+JavaBean的Model1

3.MVC的Model2

JSP一、jsp基礎二、EL表達式(重點)三、自定義标簽四、JSTL核心标簽庫五、javaBean六、系統開發模型

MVC,即mode模型,View視圖,Controller控制器

View:視圖,為使用者提供界面,與使用者進行互動.

Model:模型,承載資料,并對使用者送出的請求進行計算的子產品,其分為兩類,一類稱為資料承載Bean,一類稱為業務處理Bean.所謂的資料承載Bean是指實體類,專門用于承載業務資料的,而業務處理Bean則書指Serbice或者Dao對象,專門用于處理使用者送出的請求的.

Controller:控制器,使用者将使用者請求轉發給相應的Model處理,指Servlet

4.三層架構

JSP一、jsp基礎二、EL表達式(重點)三、自定義标簽四、JSTL核心标簽庫五、javaBean六、系統開發模型

三層架構是指:視圖層View,服務層Service,持久層Dao,它們分别完成不同的功能

View層:表現層,視圖層,對于Web開發,也稱為Web層,用于接收使用者送出的代碼

Service層:服務層,邏輯層,系統的業務邏輯主要在這裡完成

Dao層,持久層,資料通路層,直接操作資料庫的代碼在這裡編寫DAO即Data Access Object,資料通路對象

為了更好的降低各層之間的耦合度,在三層架構的設計中,采用面向抽象程式設計,即上層對下層調用是通過接口實作的,而下層對上層是真正的服務提供者,是下層接口的實作類.

5.MVC+三層架構

JSP一、jsp基礎二、EL表達式(重點)三、自定義标簽四、JSTL核心标簽庫五、javaBean六、系統開發模型

注意:MVC和三層架構是不同的不要混淆