1. JSP概述

JSP页面的运行原理

(1) 把JSP页面的HTML标记(页面的静态部分)发送给用户的浏览器, 由浏览器中的HTML解释器负责解释执行HTML标记
(2) 负责处理JSP标记, 并将相关的处理结果发送给用户的浏览器
(3) 执行"<%“和”%>"之间的Java程序片(JSP页面的动态部分),并把执行结果交给用户的浏览器显示
(4) 当多个用户请求一个JSP页面时,Tomcat服务器为每个用户启动一个线程, 该线程负责执行常驻内存的字节码文件来响应相关用户的请求. 这些线程由tomcat服务器来管理, 将CPU的使用权在各个线程之间切换, 以保证每个线程都有机会执行字节码文件, 这与传统的CGI为每个用户启动一个进程相比, 效率要高得多.

怎么开启和关闭tomcat服务器

  1. 确保tomcat服务器使用的是JAVA_HOME环境变量设置的JDK
  2. 进入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程序设计第二版--附带实验代码相关推荐

  1. C语言程序设计(第二版) 主编:余贞侠 何钰娟 课后习题 代码题答案

    C语言程序设计(第二版) 主编:余贞侠 何钰娟 (课后习题 代码题答案) ps.由于没有官方答案,博主将自己写的代码分享出来,若有错误之处请多多谅解,转载注明出处! 版权声明:本文为CSDN博主「Ra ...

  2. Python 程序设计(第二版)董付国_清华大学出版社_习题答案与分析【针对8.4及其之前的】

    更多精彩内容:(没有设置公众号获得,麻烦动动小手~谢谢) CSDN下载:Python编程无师自通电子书,[美]科里·奥尔索夫(Cory Althoff)-文档类-CSDN下载 百度云:链接:https ...

  3. [转载]汇编语言程序设计第二版答案  沈美明

    原文地址:汇编语言程序设计第二版答案  沈美明作者:相约爱情海 file:///C|/Users/CaoFan/Desktop/IBM-PC汇编语言程序设计(第二版)答案.txt[2010/4/24 ...

  4. Python 程序设计(第二版)董付国_清华大学出版社_习题答案【未处理1-9章】

    CSDN下载:https://download.csdn.net/download/weixin_42859280/11254583 百度云:链接:https://pan.baidu.com/s/1i ...

  5. 模式对话框和非模式对话框的区别(出自MFC windows程序设计第二版p370)

    模式对话框和非模式对话框的区别:(出自<MFC windows程序设计>第二版p370) 1.显示模式对话框需要调用CDialog::DoModal,而显示无模式对话框则要调用CDialo ...

  6. Javascript高级程序设计第二版第十一章--DOM2,DOM3--笔记

    今天跟诸位分享一下,高程,第二版,11章,dom2,dom3 纵观这一章,一个概念,dom在变,现在变,未来变,反正不断的变. 不过变来变去,ie是不支持dom2,dom3,可能未来新版本支持部分do ...

  7. MFC应用程序设计(第二版)学习笔记

    第一章, Windows应用开发基础 基本概念 windows API函数按功能大体分为以下: 窗口管理函数 WUI 图形设备管理函数 GUI 系统服务函数 SUI 早期开发使用软件开发工具包sdk, ...

  8. java语言程序设计第二版课后答案吴倩_java语言程序设计课后答案 郞波 第二版 清华大学出版社...

    展开全部 我有 Java面向对象程序设计 清华大学出版社 (编著 耿祥义 张跃平) 习题解答 建议e69da5e887aa62616964757a686964616f31333330326632使用文 ...

  9. C语言程序设计第二版 甘勇, 李烨 , 卢冰

    C 语言是一种通用的.面向过程式的计算机程序设计语言.1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言. C 语言是一种广泛使用的计算机语言,它与 J ...

  10. C++面对对象程序设计(第二版)

    本人是一个学习C++不久的小菜鸟,这些题目都是自己打出来(有些不会的去网上查出来的),如果有哪里写的不对的地方,欢迎各位指正. 第二章课后习题 P-66 第一题 改之前的代码 #include< ...

最新文章

  1. 分享我第一次做项目的感受
  2. DeepMind:所谓SACX学习范式
  3. 官方野生蝇群流口水分数
  4. 抢先试用ReSharper UnitRun™ 1.0
  5. Haproxy实现负载均衡
  6. jetbrains全家桶中好用的快捷键插件:Key Promoter X
  7. Python内置GUI模块Tkinter的几点笔记
  8. LCD 驱动的整体分析。
  9. latex 插入Python代码
  10. oracle11g安装卡在94,winserver2008R2 安装64位 oracle 11G R2 卡在2%,求解
  11. 【吐血整理】一份完备的集成学习手册!(附Python代码)
  12. 数梦工场:我们帮你实现你驾驭数据的梦想
  13. U盘中毒后,手把手教你恢复文件
  14. 环境变量用来保存java虚拟机_____环境变量用来存储Java的编译和运行工具所在的路径,而____环境变量则用来保存保存Java虚拟机要运行的“.class”文件路径。(填英文)...
  15. 设计模式—策略模式(Strategy Pattern)
  16. 【三维概念】【Cesium】 Camera控制-视角-roll,pitch,heading的含义
  17. SVN管理文件的步骤
  18. Java 工程师成神之路 | 2019正式版 1
  19. 三菱,FX3U,plc程序模板和触摸屏程序模板,适用于运动轴控制,程序可以在自动的时候暂停进行手动控制
  20. Windows系统资源监控

热门文章

  1. mschart走势图 vc_VC++6.0中MsChart控件的用法
  2. 用Python实现简单的人脸识别,10分钟搞定!(附源码)
  3. 【Java学习笔记】之家庭账目管理系统
  4. 计算机没有本地网络,网络连接里没有本地连接
  5. 【数据治理】数据元、元数据、主数据、参考数据概述
  6. 计算机代数与数论pdf,计算机代数与数论.pdf
  7. linux 查看当前表空间大小,查看表空间和表的使用率
  8. Python实现图形学DDA算法
  9. 古代汉语(王力版)笔记 绪论
  10. Linux上配置Gaussian的方法