JSP程序设计第二版--附带实验代码
1. JSP概述
JSP页面的运行原理
(1) 把JSP页面的HTML标记(页面的静态部分)发送给用户的浏览器, 由浏览器中的HTML解释器负责解释执行HTML标记
(2) 负责处理JSP标记, 并将相关的处理结果发送给用户的浏览器
(3) 执行"<%“和”%>"之间的Java程序片(JSP页面的动态部分),并把执行结果交给用户的浏览器显示
(4) 当多个用户请求一个JSP页面时,Tomcat服务器为每个用户启动一个线程, 该线程负责执行常驻内存的字节码文件来响应相关用户的请求. 这些线程由tomcat服务器来管理, 将CPU的使用权在各个线程之间切换, 以保证每个线程都有机会执行字节码文件, 这与传统的CGI为每个用户启动一个进程相比, 效率要高得多.
怎么开启和关闭tomcat服务器
- 确保tomcat服务器使用的是JAVA_HOME环境变量设置的JDK
- 进入tomcat安装目录, 在bin目录下找到startup.bat, 双击即可启动, 找到shutdown.bat, 双击即可关闭
如果想要修改Tomcat服务器的端口号, 应该修改哪一个文件? 能否将端口号修改为80?
修改tomcat服务器安装目录中conf文件夹中的配置文件: server.xml.只要没有其他应用程序正在占用80端口, 就可以将端口设置为80
2. JSP页面与JSP标记
<%!%>与<%%>之间声明的变量有什么不同
<%!%>声明的变量在整个JSp页面都是有效, 是JSP的成员变量,所有用户共享成员变量
<%%>之间声明的变量是局部变量, 只能在当前JSP页面的猴急程序片以及表达式部分中有效
是否允许一个JSP页面同时含有以下两种page指令
原因: 在一个JSP页面中, 可以使用多个Page指令来指定属性以及他的值,. 需要注意的是: 可以使用多个page指令指定import属性几个值, 但是其他属性只能使用page指令指定一个值
这两条是不允许的
<% @ page contentType="text/html; charset=GB2312" %>
<% @ page contentType = "application/msword" %>
是否允许JSP页面同时含有如下两个page指令
这两条是允许的
<% @ page import="java.util.*" %>
<% @ page import="java.sql.*" %>
假设有两个用户访问下列JSP页面hello.jsp, 请问第一个访问和第二个访问hello.jsp页面的用户看到的页面效果有何不同
<%!%>是方法和变量声明, <%%>是对Java程序片进行执行, 其中<%!%>中的变量是成员变量, 可以多个JSp页面共享, 而<%%>中的只是局部变量
<% ! int sum=10;void add(int m){sum= sum + m;
}
%>
<% int n = 600;add(n); %>
<% =sum %>
第一个用户看到的sum是610, 第二个用户看到的是1210
请简单叙述include指令标记和include动作的不同
include指令标记的作用是在JSP页面出现该指令的位置处, 静态插入一个文件, 即JSP页面与插入的文件合并成为一个新的JSP页面, 然后JSP引擎再将这个新的JSP页面转义成Java文件. 因此在插入文件之后, 必须保证新合成的JSp页面符合JSP语法规则, 即能够成为一个JSp页面文件. include动作标记告诉JSP页面动态加载一个文件, 不把JSP页面中动作指令include所指定的文件与原JSP页面合并成一个新的JSP页面, 而是告诉Java解释器, 这个文件在JSp运行时才被处理. 如果包含的文件是JSP文件, JSp引擎就会执行这个文件, 然后将执行结果发送到客户端, 并且有客户端负责显示这些结果.;如果包含的文件是普通文件, 就将文件内容发送到客户端, 有客户端负责显示
3. TAg文件与Tag标志
用户可以通过浏览器直接访问一个tag 文件吗
不可以, tag文件可以被JSP页面动态调用, 但是用户不能够通过该tag文件所在的web服务目录直接访问这个文件
Tag文件应该存放在怎样的目录中
如果某个Web服务目录下的JSp页面准备调用一个tag文件, 那么必须在该Web服务目录之下, 建立Web服务目录\WEB-INF\tags, 其中WEB-INF, tags都是固定的子目录名称, 而tags下的子目录名字可以由用户给定, 一个tags文件必须保存到tags目录或者旗下的子目录中
4. JSP内置对象
如果表单中提交的信息有汉字应该怎么处理
将获取的字符串用ISO-8859-1进行编码,并且将编码存放到一个字节数组中, 然后再将这个数组转换为字符串对象
response调用sendRedirect(URL url)方法的作用是什么
实现用户的重定向
回答下列问题
(1) 一个用户在不同的web服务目录中的session对象相同吗?
不相同
(2) 一个用户在同一个web目录下的不同子目录中的session对象相同吗
相同
(3) 如果用户长时间不关闭浏览器, 用户的session对象可能消失吗?
可能消失
(4)用户关闭浏览器之后,用户的session一定消失吗?
一定消失
5.JSp的文件操作
File对象能读写文件吗
不能
File对象怎么获取文件的长度
调用public long length()获取
准备读取文件A.java, 正确的是?
一下两个
FileInputStream in = new FileInputStream("A.java");
FileReader fr = new FileReader(new File("A.java"));
6. 在JSP中使用数据库
什么是JDBC(Java Database Connecivity)
jdbc提供访问数据库的API,即一些由Java类和接口组成,是Java运行平台的核心库的一部分.
7. JSP与JavaBean
设Web服务目录mymoon中的JSP页面使用的一个bean,该bean的包名为blue.sky,请说明, 应当怎样保存bean的字节码
把创建bean的字节码保存到mymoon\WEB-INF\classes\blue\sky中
创建一个名字为moon的bean, 该bean含有一个String类型, 名字为number的属性.如果创建moon的java类没有提供public String getNumber()方法, 在JSp页面中是否允许使用getProperties标记获取moon属性的值?
不允许
tom.jiafei.cirlce是创建bean的类, 下列A-D中哪一个标记是正确创建session周期bean 的标记?
<jsp: useBean id = "cirlce" class="tom.jiafei.circle" scope="session">
假设创建bean的类有一个int型的属性number,下列A-D中哪一个方法是设置该属性值的方法
public void setNumber(int number){this.number = number;
}
8. Java Servlet基础
9. MVC与数据库操作
在JSP中, MVC操作模式中的数据模型的角色有谁担当, 控制器, 视图呢?
数据模型由JavaBean担当, 控制器又Servlet担当, 视图由JSP页面担当
MVC有什么好处
MVC的结构可以使Web程序更加具有对象化特征, 也更加容易维护
附加实验代码
<%@ 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. --%><!-- 实验1开始 -->
<%--<%@ 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>--%>
<!-- 实验1结束 --><%--<h2>实验二----输入单词程序开始</h2>--%>
<%--<body bgcolor="yellow">--%>
<%--<font size="3">--%>
<%-- <form action="showDirectory.jsp" method="post">\--%>
<%-- 请输入单词(用空格间隔):<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> 实验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>实验二----输入单词程序结束</h2>--%><!--------------------实验3开始----------------------->
<!--leader.txt静态文本实验-->
<%--<%@ page contentType="text/html; ISO-8859-1" language="java"%>--%>
<%--<a href="first.jsp">链接到页面1</a>--%>
<%--<a href="second.jsp">链接到页面2</a>--%>
<%--<a href="third.jsp">链接到页面3</a>--%><%--<%@ page contentType="text/html; ISO-8859-1" language="java" %>--%>
<%--<html>--%>
<%--<body bgcolor="yellow">--%>
<%--<P> 这是页面1--%>
<%--<%@ include file="leader.txt"%>--%>
<%--</body>--%>
<%--</html>--%>
<%--<%@ page contentType="text/html; ISO-8859-1" language="java" %>--%>
<%--<html>--%>
<%--<body bgcolor="yellow">--%>
<%--<P> 这是页面2--%>
<%-- <%@ include file="leader.txt"%>--%>
<%--</body>--%>
<%--</html>--%>
<%--<%@ page contentType="text/html; ISO-8859-1" language="java" %>--%>
<%--<html>--%>
<%--<body bgcolor="yellow">--%>
<%--<P> 这是页面3--%>
<%-- <%@ include file="leader.txt"%>>--%>
<%--</body>--%><%--</html>--%>
<!--------------------实验3结束-----------------------><!--------------------实验4开始----------------------->
<%@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+"的内容是:");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>
<!--------------------实验4结束-----------------------><!--------------------实验5开始----------------------->
<%@ page contentType="text/html; ISO-8859-1" language="java"%>
<h2>动态加载tag的jsp文件</h2>
<%@ taglib prefix="rili" tagdir="/WEB-INF/tags" %>
<html>
<body><P>调用tag文件来显示日历<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>
<!--------------------实验5结束----------------------->
<!--------------------实验6开始----------------------->
<%@ page contentType="text/html; ISO-8859-1" language="java" %>
<html>
<body><form action="receiveNumber" method="post">输入运算数, 选择运算符号: <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%>"计算结果: <%=a%><%=operator%><%=b%>=<%=result%><%}
%><a href="inputNumber.jsp">返回输入数据界面</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", "发生异常:"+e);}
%>
<!--------------------实验6结束----------------------->
<!--------------------实验7开始-----------------------><%@ 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>
<!--------------------实验7结束----------------------->
<!--------------------实验8开始----------------------->
<%@ page contentType="text/html; ISO-8859-1" language="java"%>
<html><P>选择所有图书
<table><tr><td><a href="orderForm.jsp ? bookMess=Java面向对象"></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>
<!--------------------实验8结束----------------------->
JSP程序设计第二版--附带实验代码相关推荐
- C语言程序设计(第二版) 主编:余贞侠 何钰娟 课后习题 代码题答案
C语言程序设计(第二版) 主编:余贞侠 何钰娟 (课后习题 代码题答案) ps.由于没有官方答案,博主将自己写的代码分享出来,若有错误之处请多多谅解,转载注明出处! 版权声明:本文为CSDN博主「Ra ...
- Python 程序设计(第二版)董付国_清华大学出版社_习题答案与分析【针对8.4及其之前的】
更多精彩内容:(没有设置公众号获得,麻烦动动小手~谢谢) CSDN下载:Python编程无师自通电子书,[美]科里·奥尔索夫(Cory Althoff)-文档类-CSDN下载 百度云:链接:https ...
- [转载]汇编语言程序设计第二版答案 沈美明
原文地址:汇编语言程序设计第二版答案 沈美明作者:相约爱情海 file:///C|/Users/CaoFan/Desktop/IBM-PC汇编语言程序设计(第二版)答案.txt[2010/4/24 ...
- Python 程序设计(第二版)董付国_清华大学出版社_习题答案【未处理1-9章】
CSDN下载:https://download.csdn.net/download/weixin_42859280/11254583 百度云:链接:https://pan.baidu.com/s/1i ...
- 模式对话框和非模式对话框的区别(出自MFC windows程序设计第二版p370)
模式对话框和非模式对话框的区别:(出自<MFC windows程序设计>第二版p370) 1.显示模式对话框需要调用CDialog::DoModal,而显示无模式对话框则要调用CDialo ...
- Javascript高级程序设计第二版第十一章--DOM2,DOM3--笔记
今天跟诸位分享一下,高程,第二版,11章,dom2,dom3 纵观这一章,一个概念,dom在变,现在变,未来变,反正不断的变. 不过变来变去,ie是不支持dom2,dom3,可能未来新版本支持部分do ...
- MFC应用程序设计(第二版)学习笔记
第一章, Windows应用开发基础 基本概念 windows API函数按功能大体分为以下: 窗口管理函数 WUI 图形设备管理函数 GUI 系统服务函数 SUI 早期开发使用软件开发工具包sdk, ...
- java语言程序设计第二版课后答案吴倩_java语言程序设计课后答案 郞波 第二版 清华大学出版社...
展开全部 我有 Java面向对象程序设计 清华大学出版社 (编著 耿祥义 张跃平) 习题解答 建议e69da5e887aa62616964757a686964616f31333330326632使用文 ...
- C语言程序设计第二版 甘勇, 李烨 , 卢冰
C 语言是一种通用的.面向过程式的计算机程序设计语言.1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言. C 语言是一种广泛使用的计算机语言,它与 J ...
- C++面对对象程序设计(第二版)
本人是一个学习C++不久的小菜鸟,这些题目都是自己打出来(有些不会的去网上查出来的),如果有哪里写的不对的地方,欢迎各位指正. 第二章课后习题 P-66 第一题 改之前的代码 #include< ...
最新文章
- 分享我第一次做项目的感受
- DeepMind:所谓SACX学习范式
- 官方野生蝇群流口水分数
- 抢先试用ReSharper UnitRun™ 1.0
- Haproxy实现负载均衡
- jetbrains全家桶中好用的快捷键插件:Key Promoter X
- Python内置GUI模块Tkinter的几点笔记
- LCD 驱动的整体分析。
- latex 插入Python代码
- oracle11g安装卡在94,winserver2008R2 安装64位 oracle 11G R2 卡在2%,求解
- 【吐血整理】一份完备的集成学习手册!(附Python代码)
- 数梦工场:我们帮你实现你驾驭数据的梦想
- U盘中毒后,手把手教你恢复文件
- 环境变量用来保存java虚拟机_____环境变量用来存储Java的编译和运行工具所在的路径,而____环境变量则用来保存保存Java虚拟机要运行的“.class”文件路径。(填英文)...
- 设计模式—策略模式(Strategy Pattern)
- 【三维概念】【Cesium】 Camera控制-视角-roll,pitch,heading的含义
- SVN管理文件的步骤
- Java 工程师成神之路 | 2019正式版 1
- 三菱,FX3U,plc程序模板和触摸屏程序模板,适用于运动轴控制,程序可以在自动的时候暂停进行手动控制
- Windows系统资源监控