javascript
JSP程序设计第二版--附带实验代码
1. JSP概述
JSP頁(yè)面的運(yùn)行原理
(1) 把JSP頁(yè)面的HTML標(biāo)記(頁(yè)面的靜態(tài)部分)發(fā)送給用戶的瀏覽器, 由瀏覽器中的HTML解釋器負(fù)責(zé)解釋執(zhí)行HTML標(biāo)記
(2) 負(fù)責(zé)處理JSP標(biāo)記, 并將相關(guān)的處理結(jié)果發(fā)送給用戶的瀏覽器
(3) 執(zhí)行"<%“和”%>"之間的Java程序片(JSP頁(yè)面的動(dòng)態(tài)部分),并把執(zhí)行結(jié)果交給用戶的瀏覽器顯示
(4) 當(dāng)多個(gè)用戶請(qǐng)求一個(gè)JSP頁(yè)面時(shí),Tomcat服務(wù)器為每個(gè)用戶啟動(dòng)一個(gè)線程, 該線程負(fù)責(zé)執(zhí)行常駐內(nèi)存的字節(jié)碼文件來(lái)響應(yīng)相關(guān)用戶的請(qǐng)求. 這些線程由tomcat服務(wù)器來(lái)管理, 將CPU的使用權(quán)在各個(gè)線程之間切換, 以保證每個(gè)線程都有機(jī)會(huì)執(zhí)行字節(jié)碼文件, 這與傳統(tǒng)的CGI為每個(gè)用戶啟動(dòng)一個(gè)進(jìn)程相比, 效率要高得多.
怎么開(kāi)啟和關(guān)閉tomcat服務(wù)器
如果想要修改Tomcat服務(wù)器的端口號(hào), 應(yīng)該修改哪一個(gè)文件? 能否將端口號(hào)修改為80?
修改tomcat服務(wù)器安裝目錄中conf文件夾中的配置文件: server.xml.只要沒(méi)有其他應(yīng)用程序正在占用80端口, 就可以將端口設(shè)置為80
2. JSP頁(yè)面與JSP標(biāo)記
<%!%>與<%%>之間聲明的變量有什么不同
<%!%>聲明的變量在整個(gè)JSp頁(yè)面都是有效, 是JSP的成員變量,所有用戶共享成員變量
<%%>之間聲明的變量是局部變量, 只能在當(dāng)前JSP頁(yè)面的猴急程序片以及表達(dá)式部分中有效
是否允許一個(gè)JSP頁(yè)面同時(shí)含有以下兩種page指令
原因: 在一個(gè)JSP頁(yè)面中, 可以使用多個(gè)Page指令來(lái)指定屬性以及他的值,. 需要注意的是: 可以使用多個(gè)page指令指定import屬性幾個(gè)值, 但是其他屬性只能使用page指令指定一個(gè)值
這兩條是不允許的 <% @ page contentType="text/html; charset=GB2312" %> <% @ page contentType = "application/msword" %>是否允許JSP頁(yè)面同時(shí)含有如下兩個(gè)page指令
這兩條是允許的 <% @ page import="java.util.*" %> <% @ page import="java.sql.*" %>假設(shè)有兩個(gè)用戶訪問(wèn)下列JSP頁(yè)面hello.jsp, 請(qǐng)問(wèn)第一個(gè)訪問(wèn)和第二個(gè)訪問(wèn)hello.jsp頁(yè)面的用戶看到的頁(yè)面效果有何不同
<%!%>是方法和變量聲明, <%%>是對(duì)Java程序片進(jìn)行執(zhí)行, 其中<%!%>中的變量是成員變量, 可以多個(gè)JSp頁(yè)面共享, 而<%%>中的只是局部變量
<% ! int sum=10;void add(int m){sum= sum + m; } %> <% int n = 600;add(n); %> <% =sum %>第一個(gè)用戶看到的sum是610, 第二個(gè)用戶看到的是1210
請(qǐng)簡(jiǎn)單敘述include指令標(biāo)記和include動(dòng)作的不同
include指令標(biāo)記的作用是在JSP頁(yè)面出現(xiàn)該指令的位置處, 靜態(tài)插入一個(gè)文件, 即JSP頁(yè)面與插入的文件合并成為一個(gè)新的JSP頁(yè)面, 然后JSP引擎再將這個(gè)新的JSP頁(yè)面轉(zhuǎn)義成Java文件. 因此在插入文件之后, 必須保證新合成的JSp頁(yè)面符合JSP語(yǔ)法規(guī)則, 即能夠成為一個(gè)JSp頁(yè)面文件. include動(dòng)作標(biāo)記告訴JSP頁(yè)面動(dòng)態(tài)加載一個(gè)文件, 不把JSP頁(yè)面中動(dòng)作指令include所指定的文件與原JSP頁(yè)面合并成一個(gè)新的JSP頁(yè)面, 而是告訴Java解釋器, 這個(gè)文件在JSp運(yùn)行時(shí)才被處理. 如果包含的文件是JSP文件, JSp引擎就會(huì)執(zhí)行這個(gè)文件, 然后將執(zhí)行結(jié)果發(fā)送到客戶端, 并且有客戶端負(fù)責(zé)顯示這些結(jié)果.;如果包含的文件是普通文件, 就將文件內(nèi)容發(fā)送到客戶端, 有客戶端負(fù)責(zé)顯示
3. TAg文件與Tag標(biāo)志
用戶可以通過(guò)瀏覽器直接訪問(wèn)一個(gè)tag 文件嗎
不可以, tag文件可以被JSP頁(yè)面動(dòng)態(tài)調(diào)用, 但是用戶不能夠通過(guò)該tag文件所在的web服務(wù)目錄直接訪問(wèn)這個(gè)文件
Tag文件應(yīng)該存放在怎樣的目錄中
如果某個(gè)Web服務(wù)目錄下的JSp頁(yè)面準(zhǔn)備調(diào)用一個(gè)tag文件, 那么必須在該Web服務(wù)目錄之下, 建立Web服務(wù)目錄\WEB-INF\tags, 其中WEB-INF, tags都是固定的子目錄名稱, 而tags下的子目錄名字可以由用戶給定, 一個(gè)tags文件必須保存到tags目錄或者旗下的子目錄中
4. JSP內(nèi)置對(duì)象
如果表單中提交的信息有漢字應(yīng)該怎么處理
將獲取的字符串用ISO-8859-1進(jìn)行編碼,并且將編碼存放到一個(gè)字節(jié)數(shù)組中, 然后再將這個(gè)數(shù)組轉(zhuǎn)換為字符串對(duì)象
response調(diào)用sendRedirect(URL url)方法的作用是什么
實(shí)現(xiàn)用戶的重定向
回答下列問(wèn)題
(1) 一個(gè)用戶在不同的web服務(wù)目錄中的session對(duì)象相同嗎?
不相同
(2) 一個(gè)用戶在同一個(gè)web目錄下的不同子目錄中的session對(duì)象相同嗎
相同
(3) 如果用戶長(zhǎng)時(shí)間不關(guān)閉瀏覽器, 用戶的session對(duì)象可能消失嗎?
可能消失
(4)用戶關(guān)閉瀏覽器之后,用戶的session一定消失嗎?
一定消失
5.JSp的文件操作
File對(duì)象能讀寫(xiě)文件嗎
不能
File對(duì)象怎么獲取文件的長(zhǎng)度
調(diào)用public long length()獲取
準(zhǔn)備讀取文件A.java, 正確的是?
一下兩個(gè)
FileInputStream in = new FileInputStream("A.java"); FileReader fr = new FileReader(new File("A.java"));6. 在JSP中使用數(shù)據(jù)庫(kù)
什么是JDBC(Java Database Connecivity)
jdbc提供訪問(wèn)數(shù)據(jù)庫(kù)的API,即一些由Java類和接口組成,是Java運(yùn)行平臺(tái)的核心庫(kù)的一部分.
7. JSP與JavaBean
設(shè)Web服務(wù)目錄mymoon中的JSP頁(yè)面使用的一個(gè)bean,該bean的包名為blue.sky,請(qǐng)說(shuō)明, 應(yīng)當(dāng)怎樣保存bean的字節(jié)碼
把創(chuàng)建bean的字節(jié)碼保存到mymoon\WEB-INF\classes\blue\sky中
創(chuàng)建一個(gè)名字為moon的bean, 該bean含有一個(gè)String類型, 名字為number的屬性.如果創(chuàng)建moon的java類沒(méi)有提供public String getNumber()方法, 在JSp頁(yè)面中是否允許使用getProperties標(biāo)記獲取moon屬性的值?
不允許
tom.jiafei.cirlce是創(chuàng)建bean的類, 下列A-D中哪一個(gè)標(biāo)記是正確創(chuàng)建session周期bean 的標(biāo)記?
<jsp: useBean id = "cirlce" class="tom.jiafei.circle" scope="session">假設(shè)創(chuàng)建bean的類有一個(gè)int型的屬性number,下列A-D中哪一個(gè)方法是設(shè)置該屬性值的方法
public void setNumber(int number){this.number = number; }8. Java Servlet基礎(chǔ)
9. MVC與數(shù)據(jù)庫(kù)操作
在JSP中, MVC操作模式中的數(shù)據(jù)模型的角色有誰(shuí)擔(dān)當(dāng), 控制器, 視圖呢?
數(shù)據(jù)模型由JavaBean擔(dān)當(dāng), 控制器又Servlet擔(dān)當(dāng), 視圖由JSP頁(yè)面擔(dān)當(dāng)
MVC有什么好處
MVC的結(jié)構(gòu)可以使Web程序更加具有對(duì)象化特征, 也更加容易維護(hù)
附加實(shí)驗(yàn)代碼
<%@ page import="java.util.TreeSet" %> <%@ page import="java.util.Iterator" %> <%@ page import="java.io.File" %> <%@ page import="java.io.FileReader" %> <%@ page import="java.lang.reflect.Field" %> <%@ page import="java.io.BufferedReader" %><%-- Created by IntelliJ IDEA. --%><!-- 實(shí)驗(yàn)1開(kāi)始 --> <%--<%@ page contentType="text/html; ISO-8859-1" language="java"%>--%> <%--<html>--%> <%--<body bgcolor="yellow">--%> <%--<font size="3">--%> <%-- <%--%> <%-- for (int i = 1; i < 10; i ++)--%> <%-- for (int j = 1; j <= i ;j ++){--%> <%-- int mul = i * j;--%> <%-- out.print(i+"*"+j+"="+mul);--%> <%-- }--%> <%-- out.print("<br>");--%> <%-- %>--%> <%--</font>--%> <%--</body>--%> <%--</html>--%> <%--<%@ page contentType="text/html; ISO-8859-1" language="java"%>--%> <%--<html>--%> <!-- 實(shí)驗(yàn)1結(jié)束 --><%--<h2>實(shí)驗(yàn)二----輸入單詞程序開(kāi)始</h2>--%> <%--<body bgcolor="yellow">--%> <%--<font size="3">--%> <%-- <form action="showDirectory.jsp" method="post">\--%> <%-- 請(qǐng)輸入單詞(用空格間隔):<input type="text" name="word"><br>--%> <%-- <input type="submit" name="submit" value="送出">--%> <%-- </form>--%> <%--</font>--%> <%--</body>--%> <%--</html>--%> <%--<%@ page contentType="text/html; ISO-8859-1" language="java"%>--%> <%--<html>--%> <%--<h2> 實(shí)驗(yàn)2---展示單詞列表程序</h2>--%> <%--<body bgcolor="yellow">--%> <%--<font size="3">--%> <%-- <%!--%> <%-- TreeSet<String> dictionary = new TreeSet<>();--%> <%-- public void addWord(String s){--%> <%-- String word[] = s.split(" ");--%> <%-- for (int i = 0; i < word.length; i ++){--%> <%-- dictionary.add(word[i]);--%> <%-- }--%> <%-- }--%> <%-- %>--%> <%-- <%--%> <%-- String str = request.getParameter("word");--%> <%-- addWord(str);--%> <%-- Iterator<String> te = dictionary.iterator();--%> <%-- while (te.hasNext()){--%> <%-- String word = te.next();--%> <%-- out.print(" "+word);--%> <%-- }--%> <%-- --%> <%-- %>--%> <%--</font>--%> <%--</body>--%> <%--</html>--%> <%--<h2>實(shí)驗(yàn)二----輸入單詞程序結(jié)束</h2>--%><!--------------------實(shí)驗(yàn)3開(kāi)始-----------------------> <!--leader.txt靜態(tài)文本實(shí)驗(yàn)--> <%--<%@ page contentType="text/html; ISO-8859-1" language="java"%>--%> <%--<a href="first.jsp">鏈接到頁(yè)面1</a>--%> <%--<a href="second.jsp">鏈接到頁(yè)面2</a>--%> <%--<a href="third.jsp">鏈接到頁(yè)面3</a>--%><%--<%@ page contentType="text/html; ISO-8859-1" language="java" %>--%> <%--<html>--%> <%--<body bgcolor="yellow">--%> <%--<P> 這是頁(yè)面1--%> <%--<%@ include file="leader.txt"%>--%> <%--</body>--%> <%--</html>--%> <%--<%@ page contentType="text/html; ISO-8859-1" language="java" %>--%> <%--<html>--%> <%--<body bgcolor="yellow">--%> <%--<P> 這是頁(yè)面2--%> <%-- <%@ include file="leader.txt"%>--%> <%--</body>--%> <%--</html>--%> <%--<%@ page contentType="text/html; ISO-8859-1" language="java" %>--%> <%--<html>--%> <%--<body bgcolor="yellow">--%> <%--<P> 這是頁(yè)面3--%> <%-- <%@ include file="leader.txt"%>>--%> <%--</body>--%><%--</html>--%> <!--------------------實(shí)驗(yàn)3結(jié)束-----------------------><!--------------------實(shí)驗(yàn)4開(kāi)始-----------------------> <%@page contentType="text/html; ISO-8859-1" language="java" %> <html> <body>讀取名字是ok.txt的文件<jsp:include page="readFile.jsp"><jsp:param name="file" value="xxxx"/></jsp:include> </body> </html><%@ page contentType="text/html; ISO-8859-1" language="java" %> <html> <body> <P> <FONT size="4">this is ReadFile.jsp</FONT> <%String s = request.getParameter("file");File file = new File(s);if (file.exists()){out.print("<BR>文件"+s+"的內(nèi)容是:");FileReader in = new FileReader(file);BufferedReader bin = new BufferedReader(in);String line = null;while ((line=bin.readLine() )!= null){out.print("<br>"+line);}}else{%><jsp:forward page="error.jsp"><jsp:param name="mess" value="File Not Found"/></jsp:forward><%}%></body> </html> <%@ page contentType="text/html; ISO-8859-1" language="java"%> <html> <body>< </body> </html> <!--------------------實(shí)驗(yàn)4結(jié)束-----------------------><!--------------------實(shí)驗(yàn)5開(kāi)始-----------------------> <%@ page contentType="text/html; ISO-8859-1" language="java"%> <h2>動(dòng)態(tài)加載tag的jsp文件</h2> <%@ taglib prefix="rili" tagdir="/WEB-INF/tags" %> <html> <body><P>調(diào)用tag文件來(lái)顯示日歷<rili:showCalendar year="2012" month="12"/></body> </html><%@ tag pageEncoding="GB2312" %> <%@ tag import="java.util.*" %> <%@ page import="java.util.regex.Pattern" %> <%@ page import="javax.sound.midi.Soundbank" %> <%@ attribute name="year" required="true" %> <%@ attribute name="month" required="true" %> <%int y = 1999, m = 1;String [] day = new String[42];try{y = Integer.parseInt(year);m = Integer.parseInt(month);Calendar rili = Calendar.getInstance();rili.set(y, m-1 ,1);//0表示1月, 11表示12月int 星期幾 = rili.get(Calendar.DAY_OF_WEEK)-1;int dayAmount = 0;if (m == 1 || m==3 || m==5 || m==7 || m==8 || m == 12){dayAmount=31;}if (m == 4 || m == 6 || m == 9 || m == 11){dayAmount=30;}if (m == 2){if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0){dayAmount=29;}else{dayAmount=28;}}for (int i = 0; i < 星期幾; i++){day[i] = "--";}for (int i = 星期幾, n=1; i < 星期幾+dayAmount; i ++){day[i] = String.valueOf(n);n ++;}for (int i = 0; i < 星期幾; i++){day[i]="--";}}catch (Exception e){e.printStackTrace();out.print("年份或者月份不合理");} %> <h3><%=year%>年<%=month%>>月的日歷:</h3> <table border="1"><tr><th>星期一</th><th>星期二</th><th>星期三</th><th>星期四</th><th>星期五</th><th>星期六</th><th>星期天</th></tr><%for (int n = 0; n < day.length; n +=7){%><tr><%for (int i = n ; i < n+7; i ++){%><td><%= day[i]%></td><% }}%></tr>}%> </table> <!--------------------實(shí)驗(yàn)5結(jié)束-----------------------> <!--------------------實(shí)驗(yàn)6開(kāi)始-----------------------> <%@ page contentType="text/html; ISO-8859-1" language="java" %> <html> <body><form action="receiveNumber" method="post">輸入運(yùn)算數(shù), 選擇運(yùn)算符號(hào): <br><input type="text" name="numberOne" size="6"><select name="operator"><option value="+">+</option><option value="-">-</option><option value="*">*</option><option value="/">/</option></select><input type="text" name="numberTwo" size="6"><br><input type="submit" name="submit" value="提交你的選擇"></form> </body> </html><%@ page contentType="text/html; ISO-8859-1" language="java" %> <%@ taglib prefix="computer" tagdir="/WEB-INF/tags" %> <html> <body> <%String a = request.getParameter("numberOne");String b = request.getParameter("numberTwo");String operator = request.getParameter("operator");if (a == null || b == null){a = ""; b = "";}if (a.length() > 0 && b.length() > 0){%><computer: Computer numberA = "<%=a%>" numberB = "<%=b%>" operator="<%=operator%>"計(jì)算結(jié)果: <%=a%><%=operator%><%=b%>=<%=result%><%} %><a href="inputNumber.jsp">返回輸入數(shù)據(jù)界面</c omputer:> </body> </html><%@ tag pageEncoding="GB2312" %> <%@ attribute name="numberA" required="true"%> <%@ attribute name="numberB" required="true"%> <%@ attribute name="result" required="true"%> <%@ variable name-given="result" scope="AT_END"%><%try{double a = Double.parseDouble(numberA);double b = Double.parseDouble(numberB);double r = 0;if (operator.equals("+")){r= a+b;}else if(operator.equals("-")){r=a-b;}else if(operator.equals("*")){r=a*b;}else if(operator.equals("/")){r=a/b;}jspContext.setAttribute("result", String.valueOf(r));}catch (Exception e){e.printStackTrace();jspContext.setAttribute("result", "發(fā)生異常:"+e);} %> <!--------------------實(shí)驗(yàn)6結(jié)束-----------------------> <!--------------------實(shí)驗(yàn)7開(kāi)始-----------------------><%@ page contentType="text/html; ISO-8859-1" language="java"%> <html> <body><font><form action = "draeCircle.jsp" method="post">輸入園的半徑: <input type="text" name="radius" size="6"><input type="submit" name="submit"></form></font></body> </html> <%@ page contentType="text/html; ISO-8859-1" language="java"%> <%@ page import="java.awt.*"%> <%@ page import="java.util.*"%> <%@ page import="java.io.*"%> <%@ page import="java.awt.image.*"%> <%@ page import="java.awt.geom.*"%> <%@ page import="com.sun.image.codec.jpeg.*"%> <%@ page import="java.nio.Buffer" %> <html> <body> <%String R = request.getParameter("radius");try{double number = Double.parseDouble(R);if (number < 0 || number > 100){response.setContentType("text/plain;charset=GB2312");out.print(number+"作為園的半徑不合理");}else if (number > 0 && number <= 100){response.setContentType("image/jpeg");int width = 100, height = 100;BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics graphics = image.createGraphics();graphics.setColor(Color.WHITE);graphics.fillRect(0, 0, width, height);Graphics2D graphics2D = (Graphics2D) graphics;Ellipse2D circle = new Ellipse2D.Double(0, 0, number, number);graphics2D.setColor(Color.BLUE);graphics2D.fill(circle);graphics.dispose();OutputStream outputStream = response.getOutputStream();JPEGImageEncoder encoder = JPEGImageEncoder.createJPEGEncoder(outputStream);encoder.encode(image);}}catch (Exception e){e.printStackTrace();response.sendRedirect("inputRadius.jsp");} %> </body> </html> <!--------------------實(shí)驗(yàn)7結(jié)束-----------------------> <!--------------------實(shí)驗(yàn)8開(kāi)始-----------------------> <%@ page contentType="text/html; ISO-8859-1" language="java"%> <html><P>選擇所有圖書(shū) <table><tr><td><a href="orderForm.jsp ? bookMess=Java面向?qū)ο?span id="ze8trgl8bvbq" class="token punctuation">"></a> </td></tr></table> </html><%@ page contentType="text/html; ISO-8859-1" language="java"%> <%@ page import="java.util.*"%> <%String book = request.getParameter("bookMess");if (book != null){StringTokenizer fenxi = new StringTokenizer(book, "@");String bookName = fenxi.nextToken();String bookISBN = fenxi.nextToken();session.setAttribute(bookISBN, book);} %> <html><%@ page contentType="text/html; ISO-8859-1" language="java"%> <%Enumeration keys = session.getAttributeNames();while (keys.hasMoreElements()){String key = (String) keys.nextElement();book = session.getAttribute(key);if (book != null){StringTokenizer fexi = new StringTokenizer(book, "@");}} %> </html> <!--------------------實(shí)驗(yàn)8結(jié)束----------------------->總結(jié)
以上是生活随笔為你收集整理的JSP程序设计第二版--附带实验代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 工作61:动态绑定
- 下一篇: 前端学习(2617):删除品牌