JavaEE(9)——JSTL與標籤檔案
實驗9 JSTL與標籤檔案 一、實驗目的
- 瞭解什麼是JSTL?
- 掌握JSTL的核心庫標籤的使用。
- 掌握標籤檔案的開發和使用。 二、實驗原理 JSP標準標籤庫(JSP Standard Tag Library,簡稱JSTL)是一個為實現Web應用程式的常用功能而開發的標籤庫集合。功能包括基本輸入輸出、流程控制、XML檔案解析、資料庫查詢、國際化和文字格式化等。JSTL主要由下面幾個庫組成: 核心標籤庫;XML標籤庫;格式化/國際化標籤庫;資料庫標籤庫;函式標籤庫。 這些庫都很有用,但我們這裡只學習核心庫的使用。核心庫的標籤又可以分成四類,如表9.1所示: 表9.1 按功能分類的核心庫的標籤 JSTL標籤類別 JSTL標籤 標籤說明 通用目的 <c:out> <c:catch> 在頁面中顯示內容 捕獲異常 變數支援 <c:set> <c:remove> 設定一個EL變數值 清除一個EL變數 流程控制 <c:if> <c:choose> <c:forEach> <c:forTokens> 根據一個屬性等於一個值改變處理 根據一個屬性等於一組值改變處理 對集合中的每個物件作重複處理 對給定一個文字域中的每個子串執行處理 URL處理 <c:url> <c:import> <c:redirect> 重寫URL並對它們的引數編碼 訪問web應用程式外部的內容 告訴客戶瀏覽器訪問另一個URL
標籤檔案(tag file)也是JSP 2.0新增的功能,它的目的是使JSP頁面開發人員僅使用JSP語法就能開發標籤庫而無須編寫Java程式。所謂標籤檔案就是直接使用JSP語法編寫的標籤。標籤檔案的副檔名一般為.tag或.tagx,如果標籤檔案包含其他完整的或片段的標籤檔案,JSP 2.0建議其副檔名為.tagf。
在JSP頁面中使用標籤檔案,需要在taglib動作中使用tagdir屬性指定標籤檔案所在的目錄,例如:
<%@ taglib prefix=“mytag” tagdir="/WEB-INF/tags"%>
三、實驗任務與步驟
(一)JSTL的安裝和測試
【步驟1】要在JSP頁面中使用JSTL標籤,首先必須安裝JSTL庫。可以到Jakarta網站下載最新版本的JSTL,網址為http://jakarta.apache.org/。
如果安裝了Tomcat,可以在示例應用程式中獲得JSTL,它位於<CATALINA_HOME>\webapps\ examples\WEB-INF\lib目錄中,共有兩個檔案:jstl.jar和standard.jar。將這兩個檔案複製到你的Web應用程式的WEB-INF\lib目錄中,就安裝了JSTL。
【步驟2】一個簡單的測試JSP頁面JSTLTest.jsp
<%@ page contentType=“text/html;charset=gb2312” %>
<%@ taglib uri=“
圖9-1
說明:使用JSTL我們不用建立標籤庫描述檔案,因為該檔案已經包含在standard.jar檔案中了,JSP容器可以找到該檔案。另外,也可以不用配置web.xml檔案,因為JSP容器使用隱含對映的方式可以將標準的URI對映到適當的標籤庫上。
(二)表示式相關標籤的使用
下面的core_expression.jsp演示了<c:out>、<c:set>和<c:remove>標籤的使用,程式碼如下:
<%@ page contentType=“text/html;charset=UTF-8” %>
<%@ taglib prefix=“c” uri=“
使用的例子
不同作用域的number變數的初始值 pageScope.number = requestScope.number = sessionScope.number = pageScope.number = requestScope.number = sessionScope.number = (三)流程控制標籤的使用。本實驗包括2個頁面,一個是flowControl.html,一個是flowControl.jsp。 【步驟1】flowControl.html的程式碼如下:使用JSTL流程控制標籤
請選擇一個填入文字框中:Tom\Jerry\Mike\Ben姓名:
【步驟2】flowControl.jsp的程式碼如下: <%@ page contentType="text/html;charset=GB2312" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>標籤c:if的使用
您好,Tom 您好,Jerry 您好,Mike 您好,Ben標籤c:choose c:when c:otherwise使用
您好,Tom 您好,Jerry 您好,Mike 您好,Ben 執行flowControl.jsp的結果如下圖所示:圖9-2 在文字框中輸入Tom後,點選“傳送”按鈕,則出現下面的結果:
圖9-3 (四)URL相關標籤的使用 【步驟1】included.jsp是被包含的頁面,程式碼如下: <%@ page contentType=“text/html;charset=gb2312” %> <%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
這是被包含頁面中的內容
使用者名稱:<c:out value="${param.userName}" />
【步驟2】import_test.jsp是包含頁面,程式碼如下: <%@ page contentType=“text/html;charset=UTF-8” %> <%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
這是包含頁面中的內容
<c:import url=“included.jsp” charEncoding = “UTF-8”> <c:param name=“userName” value=“Harry Porter” /> </c:import>
執行該頁面,結果如下圖所示:圖9-4 【步驟3】redirect_test.jsp測試了重定向標籤的使用,其程式碼如下: <%@ page contentType=“text/html;charset= UTF-8” %> <%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
使用redirect標籤
> 該頁面的執行結果與前面的圖一樣。 (五)建立簡單的標籤檔案 【步驟1】建立一個名為example.tag的簡單的標籤檔案,程式碼如下: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 注意:將該檔案存放在Web應用程式的WEB-INF/tags目錄中。 【步驟2】建立一個名為example.jsp的頁面,程式碼如下: <%@ taglib prefix="ex" tagdir="/WEB-INF/tags" %> The first six numbers in the Fibonacci sequence are: 執行該JSP頁面,結果如下:圖9-5 (六)獲取域中的值 【步驟1】建立Person.java、Address.java和testAttribute.jsp。 Address.java參考程式碼如下: package beans; public class Address { private String name; private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
} Person參考程式碼如下: package beans;
public class Person { private int age; private Address address; private String name; private String sex; public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public int getAge() { return age; } public String getName() { return name; } public String getSex() { return sex; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } public void setSex(String sex) { this.sex = sex; } } testAttribute.jsp參考程式碼如下: <%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%> <%@taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %> <%@page import=“beans.Person”%> <%@page import=“beans.Address”%>
Person p2 = new Person();
p2.setName("楊和");
List<Person> list = new ArrayList<Person>();
list.add(p1);
list.add(p2);
request.setAttribute("list",list);
%>
<!-- 取list指定位置的資料 -->
${list[1].name}
<!-- 迭代List集合 -->
<c:forEach var="person" items="${list}">
${person.name}
</c:forEach>
<hr>
<!-- 在jsp頁面中,使用el表示式獲取map集合的資料 -->
<%
Map<String,String> map = new LinkedHashMap<String,String>();
map.put("a","aaaaxxx");
map.put("b","bbbb");
map.put("c","cccc");
map.put("1","aaaa1111");
request.setAttribute("map",map);
%>
<!-- 根據關鍵字取map集合的資料 -->
${map.c}
${map["1"]}
<hr>
<!-- 迭代Map集合 -->
<c:forEach var="me" items="${map}">
${me.key}=${me.value}<br/>
</c:forEach>
<hr>
【步驟2】使用下面的URL訪問之。
http://localhost:8080/prac04_servlet_param/servlet/postForm.html
將出現如圖9-6所示表單介面。
圖9-6 (七)在JSP頁面中使用Java函式 設要在JSP頁面中使用一個add()函式,實現兩個整數的加法運算。在JSP中使用Java函式要經過如下3個步驟: 【步驟1】函式的定義,建立類檔案Compute.java。它定義了要在JSP中使用的add()方法。 package cn.edu.el;
public class Compute{ public static int add(String x,String y){ int a = 0; int b = 0; try{ a = Integer.parseInt(x); b = Integer.parseInt(y); }catch(Exception e){ System.err.println(“Number format is illegal.”); } return a+b; } }
package beans;
import java.util.*;
public class Functions { public static String reverse( String text ) { return new StringBuffer( text ).reverse().toString(); }
public static int numVowels( String text ) {
String vowels = "aeiouAEIOU";
int result = 0;
for( int i = 0; i < text.length(); i++ ) {
if( vowels.indexOf( text.charAt( i ) ) != -1 ) {
result++;
}
}
return result;
}
public static String caps( String text ) {
return text.toUpperCase();
}
} 【步驟2】建立標籤庫描述檔案taglib.tld,該檔案放到應用程式WEB-INF目錄中。 。它實現將每個Java方法與函式名相匹配。
<?xml version="1.0" encoding="UTF-8" ?><description>A Simple Taglib File.</description>
<tlib-version>1.0</tlib-version>
<short-name>addTag</short-name>
<function>
<description>Adding two numbers</description>
<name>add</name>
<function-class>cn.edu.el.Compute</function-class>
<function-signature>
int add( java.lang.String, java.lang.String)
</function-signature>
</function>
<function>
<description>Reverses the characters in the given String</description>
<name>reverse</name>
<function-class>cn.edu.el.Functions</function-class>
<function-signature>java.lang.String reverse( java.lang.String )</function-signature>
</function>
<function>
<description>Counts the number of vowels (a,e,i,o,u) in the given String</description>
<name>countVowels</name>
<function-class>beans.Functions</function-class>
<function-signature>java.lang.String numVowels( java.lang.String )</function-signature>
</function>
<function>
<description>Converts the string to all caps</description>
<name>caps</name>
<function-class>cn.edu.el.Functions</function-class>
<function-signature>java.lang.String caps( java.lang.String )</function-signature>
【步驟3】編寫JSP檔案sum.jsp,使用標籤庫URI以及函式名呼叫Java函式,程式碼如下:
<%@ page contentType="text/html;charset=gb2312" %>
<%@ taglib prefix="demo" uri="http://www.mydomain.com/function" %>
計算兩個整數之和
X = Y =
兩個整數的和為:${demo:add(param["x"],param["y"])} 字串逆置:${demo:reverse()}
該頁面執行結果為:圖9-7 (八)自定義分頁標籤 1.實驗內容 (1)在MySQL新建資料庫books,在資料庫books中新建表格titles,並輸入部分內容,其SQL指令碼如下: /* Navicat MySQL Data Transfer
Source Server : localhost_3306 Source Server Version : 50170 Source Host : localhost:3306 Source Database : books
Target Server Type : MYSQL Target Server Version : 50170 File Encoding : 65001
Date: 2017-09-20 08:38:35 */
SET FOREIGN_KEY_CHECKS=0;
– Table structure for titles
DROP TABLE IF EXISTS titles
;
CREATE TABLE titles
(
isbn
varchar(15) DEFAULT NULL,
title
varchar(20) DEFAULT NULL,
copyright
varchar(15) DEFAULT NULL,
editionNumber
int(11) DEFAULT NULL,
publisherId
int(11) DEFAULT NULL,
price
float DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
– Records of titles
INSERT INTO titles
VALUES (‘01359098’, ‘c++程式設計’, ‘清華大學’, ‘2’, ‘7826’, ‘50’);
INSERT INTO titles
VALUES (‘978965’, ‘Java語言程式設計’, ‘人民大學’, ‘2’, ‘8866’, ‘99’);
INSERT INTO titles
VALUES (‘9785566’, ‘Java Web設計’, ‘人民大學’, ‘1’, ‘5566’, ‘98’);
INSERT INTO titles
VALUES (‘9783355’, ‘SSH2技術’, ‘西北大學’, ‘3’, ‘6688’, ‘88’);
(2)設計資料庫訪問工具類,包括DBConn.java、Title.java、TitleDao.java、TitleDaoImpl.java。
(3)設計JSP自定義標籤並進行測試。
2.實驗步驟
【步驟1】設計相關類及JSP頁面
(1)設計實體類Title.java
Title.java參考程式碼如下:
package bean; public class Title { private String isbn; private String title; private String copyright; private String imageFile; private int editionNumber; private int publisherId; private float price; public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getCopyright() { return copyright; } public void setCopyright(String copyright) { this.copyright = copyright; } public String getImageFile() { return imageFile; } public void setImageFile(String imageFile) { this.imageFile = imageFile; } public int getEditionNumber() { return editionNumber; } public void setEditionNumber(int editionNumber) { this.editionNumber = editionNumber; } public int getPublisherId() { return publisherId; } public void setPublisherId(int publisherId) { this.publisherId = publisherId; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; }
} (2)設計輔助類PageResult.java。 PageResult.java參考程式碼如下: package tag;
import java.util.ArrayList; import java.util.List; public class PageResult { private List list = new ArrayList(); //查詢結果 private int pageNo = 1; //實際頁號 private int pageSize = 4; //每頁記錄數 private int recTotal = 0; //總記錄數
public List getList() {
return list;
}
public void setList(List<E> list) {
this.list = list;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getRecTotal() {
return recTotal;
}
public void setRecTotal(int recTotal) {
this.recTotal = recTotal;
}
public int getPageTotal() { //根據記錄數計算總的頁數
int ret = (this.getRecTotal() - 1) / this.getPageSize() + 1;
ret = (ret<1)?1:ret;
return ret;
}
public int getFirstRec() //計算第一頁的記錄數
{
int ret = (this.getPageNo()-1) * this.getPageSize();// + 1;
ret = (ret < 1)?0:ret;
return ret;
}
} (3)設計輔助類PaginationTag.java。 PaginationTag.java參考程式碼如下: package tag;
import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; public class PaginationTag extends TagSupport { private static final long serialVersionUID = -5904339614208817088L; public int doEndTag() { try { PageResult pageResult = null; pageResult = (PageResult) pageContext.getRequest().getAttribute(“pageResult”); if (pageResult!=null){ StringBuffer sb = new StringBuffer(); sb.append("<div style=“text-align:right;padding:6px 6px 0 0;”>\r\n") .append(“共”+pageResult.getRecTotal()+“條記錄 \r\n”) .append(“每頁顯示<input name=“pageResult.pageSize” value=”"+pageResult.getPageSize()+"" size=“3” />條 \r\n") .append(“第<input name=“pageResult.pageNo” value=”"+pageResult.getPageNo()+"" size=“3” />頁") .append(" / 共"+pageResult.getPageTotal()+“頁\r\n”) .append("<a href=“javascript:page_first();”>第一頁 \r\n") .append("<a href=“javascript:page_pre();”>上一頁\r\n") .append("<a href=“javascript:page_next();”>下一頁 \r\n") .append("<a href=“javascript:page_last();”>最後一頁\r\n") .append("<input type=“button” onclick=“javascript:page_go();” value=“轉到” />\r\n") .append("\r\n"); JspWriter out = pageContext.getOut(); out.println(sb.toString()); } } catch (Exception e) { } return EVAL_PAGE; } } 注意:Pagination.java標籤處理類繼承了TagSupport,而pageContext屬性是在TagSupport中定義的,所以在類中可以直接使用這個物件。 (4)設計Servlet程式碼(ToViewBooks.java) ToViewBooks.java參考程式碼如下: package servlet;
import java.io.IOException; import java.io.PrintWriter; import java.util.List;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
import tag.PageResult; import bean.TitleDao; import bean.TitleDaoImpl;
public class ToViewBooks extends HttpServlet { public ToViewBooks() { super(); } public void destroy() { super.destroy(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PageResult pageResult=new PageResult();
TitleDao dao=new TitleDaoImpl();
List list=dao.getTitles(); //得到圖書列表
int pageSize=pageResult.getPageSize();//每頁顯示的記錄數
int pageNo; //當前頁號
if(request.getParameter("pageResult.pageNo")!=null){
//從請求中獲取當前頁號
pageNo=Integer.parseInt(request.getParameter("pageResult.pageNo"));
}
else
pageNo=pageResult.getPageNo(); //採用預設頁號
if(request.getParameter("pageResult.pageSize")!=null)
//獲取請求中每頁顯示的記錄數
pageSize=Integer.parseInt(request.getParameter("pageResult.pageSize"));
int len=list.size();
len=len>(pageNo)*pageSize?(pageNo)*pageSize:len; //顯示到當前頁時的記錄數
List list1=list.subList((pageNo-1)*pageSize,len); //將第pageNo的資料從list複製到list1陣列中
//將要顯示的當前頁得資料,當前頁數,總記錄數儲存在pageResult物件中
pageResult.setList(list1); //用list1初始化pageResult物件中的list屬性
pageResult.setPageNo(pageNo);
pageResult.setRecTotal(list.size());
pageResult.setPageSize(pageSize);
request.setAttribute("pageResult",pageResult);//將pageResult物件儲存到request物件中
System.out.println("hello,servlet");
request.getRequestDispatcher("/tag/viewBookByPageTag.jsp").forward(request,response);
//請求轉發到tag資料夾下的viewBookByPageTag.jsp
}
public void init() throws ServletException {
}
} (5)設計資料庫連結類(DBcon.java) DBcon.java參考程式碼如下: package bean; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;
public class DBcon {
private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
private static final String DATABASE_URL =
"jdbc:mysql://localhost:3306/books?useUnicode=true&characterEncoding=utf-8";
private static final String DATABASE_USRE = "root";
private static final String DATABASE_PASSWORD = "";
public static Connection getConnction() {
Connection dbConnection = null;
try {
Class.forName(DRIVER_CLASS);
dbConnection = DriverManager.getConnection(DATABASE_URL,
DATABASE_USRE, DATABASE_PASSWORD);
} catch (Exception e) {
e.printStackTrace();
}
return dbConnection;
}
public static void closeConnection(Connection dbConnection) {
try {
if (dbConnection != null && (!dbConnection.isClosed())) {
dbConnection.close();
}
} catch (SQLException sqlEx) {
sqlEx.printStackTrace();
}
}
public static void closeResultSet(ResultSet res) {
try {
if (res != null) {
res.close();
res = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void closeStatement(PreparedStatement pStatement) {
try {
if (pStatement != null) {
pStatement.close();
pStatement = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
} (6)設計DAO(DBcon.java) TitleDao.java參考程式碼如下: package bean; import java.util.List; public interface TitleDao { public List
package bean;
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.*;
public class TitleDaoImpl implements TitleDao { private Connection connection; private PreparedStatement titlesQuery; private ResultSet results;
public List<Title> getTitles() {
List<Title> titlesList = new ArrayList<Title>();
try {
connection = DBcon.getConnction();
titlesQuery = connection.prepareStatement("SELECT isbn, title, editionNumber,copyright,"
+ " publisherID, imageFile, price " + " FROM titles ORDER BY title");
ResultSet results = titlesQuery.executeQuery();
System.out.println("hello");
while (results.next()) {
Title book = new Title();
book.setIsbn(results.getString("isbn"));
book.setTitle(results.getString("title"));
book.setEditionNumber(results.getInt("editionNumber"));
book.setCopyright(results.getString("copyright"));
book.setPublisherId(results.getInt("publisherID"));
book.setImageFile(results.getString("imageFile"));
book.setPrice(results.getFloat("price"));
titlesList.add(book);
}
}
catch (SQLException exception) {
exception.printStackTrace();
}
finally {
DBcon.closeResultSet(results);
DBcon.closeStatement(titlesQuery);
DBcon.closeConnection(connection);
}
return titlesList;
}
public int add(Title titlebean) {
int result = 0;
try {
connection = DBcon.getConnction();
String sql = "insert into titles(isbn, title, editionNumber, ";
sql += "copyright, publisherID, imageFile, price) values(?,?,?,?,?,?,?)";
titlesQuery = connection.prepareStatement(sql);
titlesQuery.setString(1, titlebean.getIsbn());
titlesQuery.setString(2, titlebean.getTitle());
titlesQuery.setInt(3, titlebean.getEditionNumber());
titlesQuery.setString(4, titlebean.getCopyright());
titlesQuery.setInt(5, titlebean.getPublisherId());
titlesQuery.setString(6, titlebean.getImageFile());
titlesQuery.setFloat(7, titlebean.getPrice());
result = titlesQuery.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
finally {
DBcon.closeResultSet(results);
DBcon.closeStatement(titlesQuery);
DBcon.closeConnection(connection);
}
return result;
}
public int delete(String isbn) {
int result = 0;
try {
connection = DBcon.getConnction();
String sql = "delete from titles where isbn='" + isbn + "'";
titlesQuery = connection.prepareStatement(sql);
result = titlesQuery.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
finally {
DBcon.closeResultSet(results);
DBcon.closeStatement(titlesQuery);
DBcon.closeConnection(connection);
}
return result;
}
public int update(Title titlebean) { // 更新titles表中的資料
int result = 0;
try {
connection = DBcon.getConnction();
String sql = "update titles set title=?, editionNumber=?, ";
sql += "copyright=?, publisherID=?, imageFile=?, price=? where isbn=?";
titlesQuery = connection.prepareStatement(sql);
titlesQuery.setString(1, titlebean.getTitle());
titlesQuery.setInt(2, titlebean.getEditionNumber());
titlesQuery.setString(3, titlebean.getCopyright());
titlesQuery.setInt(4, titlebean.getPublisherId());
titlesQuery.setString(5, titlebean.getImageFile());
titlesQuery.setFloat(6, titlebean.getPrice());
titlesQuery.setString(7, titlebean.getIsbn());
result = titlesQuery.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
//釋放資源
finally {
DBcon.closeResultSet(results);
DBcon.closeStatement(titlesQuery);
DBcon.closeConnection(connection);
}
return result;
}
public Title findByIsbn(String isbn) { // 根據ISBN查詢
Title book = null;
try {
connection = DBcon.getConnction();
String sql = "SELECT * FROM titles where isbn='" + isbn + "'";
titlesQuery = connection.prepareStatement(sql);
results = titlesQuery.executeQuery();
if (results.next()) {
book = new Title(); //例項化book物件
// 用結果集中的資料初始化book物件
book.setIsbn(results.getString("isbn"));
book.setTitle(results.getString("title"));
book.setEditionNumber(results.getInt("editionNumber"));
book.setCopyright(results.getString("copyright"));
book.setPublisherId(results.getInt("publisherID"));
book.setImageFile(results.getString("imageFile"));
book.setPrice(results.getFloat("price"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBcon.closeResultSet(results);
DBcon.closeStatement(titlesQuery);
DBcon.closeConnection(connection);
}
return book;
}
} (7)編寫viewBookByPageTag.jsp頁面 參考程式碼如下: <%@ page language=“java” contentType=“text/html; charset=utf-8” pageEncoding=“utf-8”%> <%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %> <%@ taglib uri="/WEB-INF/page-common.tld" prefix=“page” %>
瀏覽圖書
ISBN | 書名 | 版本 | 釋出時間 | 價格 |
${titles.title} | ${titles.editionNumber} | ${titles.copyright} | ${titles.price} |
圖9-8 四、思考題
- 什麼是Servlet?
- 理解web.xml中如下配置的含義 web.xml(下面內容需要背下來) hello servlet.HelloServlet hello /helloworld
- ServletConfig物件中的getInitParameter()與ServletContext物件中的getInitParameter()的區別?
- ServletContext物件的獲取方式? 五、實驗總結
- 通過本實驗,要求掌握JSTL四大標籤庫常用標籤的用法。
- 通過本實驗,要求掌握JSTL與EL結合起來訪問相關物件中的資料。
- 通過本實驗,掌握呼叫Java方法。 EL表示式允許使用者開發自定義EL函式,以在JSP頁面中通過JSTL結合EL表示式呼叫Java類的方法。