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结束----------------------->