广东海洋大学JSP程序设计期末复习总结及模拟试题
广东海洋大学jsp复习资料
JSP运行原理
当服务器上的一个 JSP 页面被第一次请求执行时,服务器上的 JSP 引擎首先将 JSP页面文件转译成一个 java 文件,再将这个 java 文件编译生成字节码文件,然后通过执行字节码文件响应客户的请求,而当这个 JSP 页面再次被请求执行时,JSP 引擎将直接执行这个字节码文件来响应客户,这也是 JSP 比ASP 速度快的一个原因。而 JSP 页面的首次执行往往由服务器管理者来执行。这个字节码文件的主要工作是:
1、把 JSP 页面中普通的 HTML 标记符号(页面的静态部分)交给用户的浏览器负责显示。
2、负责处理JSP标记,并将有关的处理结果发送到用户的浏览器.
3、执行“<%”和“%>”之间的 java 程序片(JSP 页面中的动态部分),并把执行结果交给用户的浏览器显示。
4、当多个用户请求一个 JSP 页面时,Tomcat服务器为每个用户启动一个线程而不是启动一个进程,这些线程由 Tomcat服务器来管理,与传统的 CGI 为每个客户启动一个进程相比较,效率要高的多。
注意:如果对JSP页面进行了修改、保存,那么服务器会生成新的字节码。我们可以在服务器下的\work\Catalina\localhost\_\org\apache\jsp目录下找到服务器生成的JSP页面对应的JAVA文件,以及编译JAVA文件得到的字节码文件。
JSP指令标记
<%@ page contentType=”text/html;charset=GB2312”%>
<%@ page import= “java.util.*”,“java.io.*”%>
如果需要在JSP页面的某处整体插入一个文件,可以使用include指令标记,其标记语法为:<%@ include file=”文件的URL”%>
该指令标记的作用是在JSP页面出现该指令的位置处,静态插入一个文件。
include 动作标签格式为:
或
param子标记
该动作标签告诉 JSP 页面动态包含一个文件,即 JSP 页面运行时才将文件加入。与静态插入文件的 include 指令标签不同;当
JSP 引擎把 JSP 页面转译成 Java 文件时,不把 JSP页面中动作
指令 include 所包含的文件与原 JSP 页面合并成一个新的 JSP
页面,而是告诉Java 解释器,这个文件在 JSP 运行时(Java 文
件的字节码文件被加载执行)才包含进来。
一个JSP页面可由5种元素组成普通的HTML标记、JSP标记(如指令标记、动作标记)、变量和方法的声明、Java程序片、Java表达式。
Tag标记
<%@ taglib tagdir=”/WEB-INF/tags” prefix=”show”%>
<%@ tag pageEncoding=”utf-8”%>
<%@ attribute name=”result” required=”true” type=”
https://www.wendangku.net/doc/2b11650804.html,ng.Double”%>
<%@ variable name-given=”time” variable-class=”java.util.Date”scope=”AT_END”%>
JSP内置对象
pageContext.setAttribute(“page”,”hello”);
getParameter(String s)方法获取表单提交过来的信息。
request.setCharacterEncoding(“utf-8”);
response.setContentType(“utf-8”);
request对象获取请求所提交的各类信息。
getMethod():获取用户提交信息的方式。例如post或get.
getSchema():获得当前页面使用的协议:例如http.
getRemoteHost():获取用户机的名称(如果获取不到,就获取IP地址)。
getParameterNames():获取用户提交的信息体部分中name参数值的一个枚举。标记
复选框checkbox
隐藏hidden
response对象的sendRedirect(URL url)方法实现用户的重定向。
response对象调用encodeURL()或encodeRedirectURL()方法实现URL重写。
使用Java数据库驱动程序
1.加载Java数据库驱动程序
try{Class.forName(“com.microsoft.sqlserver.jdb-
c.SQLServerDriver”);
}catch(Exccption e){
System.out.println(e);
}
2.建立连接
try{ String uri=
“jdbc:sqlserver://192.168.100.1:1433;Database-Name=Warehouser”;
String user=””;
String password=”sa”;
con=DriverManager.getConnection(uri,user,passw-
ord);
}catch(Exccption e){
System.out.println(e);
}
随机查询
Statement stmt=con.createStatement(int type,int concurrency);
ResultSet re=stmt.executeQuery(SQL语句);
type的取值决定滚动方式,取值可以是:
ResultSet.TYPE_FORWORD_ONLY;
ResultSet.TYPE_SCROLL_INSENSITIVE;
ResultSet.TYPE_SCROLL_SENSITIVE;
concurrency取值决定是否可以用结果集更新数据库,取值可以是:
ResultSet.CONCUR_READ_ONLY;
ResultSet.CONCUR_UPDATABLE;
获取和修改bean的属性
fei.Circle” scope=”page”/> 通过HTTP表单的参数的值来设置bean的相应属性的值 编写web.xml getInitParameter(“”);获得配置文件web.xml中的参数. 重定向与转发 重定向方法:void sendRedirect(String location),对于浏览器来说是将不同的请求。 RequestDispatcher对象 RequestDispatcher dispatcher=request.getRequesDispatcher(“a.jsp”); dispatcher.forward(request,response); HttpSession session=request.getSession(true); MVC模式 模型:一个或多个Javabean对象,用于存储数据。 视图:一个或多个JSP页面,其作用是向控制器提交必要的数据和为模型提供数据显示,JSP页面使用HTML标记和Javabean标记来显示数据。 控制器:一个或多个servlet对象,根据视图提交的要求进行数据处理操作,并将有关的结果存储到Javabean中,然后servlet使用转发的方式请求视图中的某个JSP页面更新显示。 一、选择题 1.在JSP中如果要导入 java.io.* 包,应该使用( A )指 令。 A. page B. taglib C. include D. forward 2.下面哪一个不是JSP本身已加载的基本类?(B) https://www.wendangku.net/doc/2b11650804.html,ng.* B.java.io.* C.javax.servlet.* D.javax.servlet.jsp.* 3.如果当前JSP页面出现异常时需要转到一个异常页,需要设置page 指令的(B)属性。 A. Exception B. isErrorPage C. error D. errorPage 4.对于预定义<%!预定义%>的说法错误的是:(C) A、一次可声明多个变量和方法,只要以“;”结尾就行 B、一个声明仅在一个页面中有效 C、声明的变量将作为局部变量 D、在预定义中声明的变量将在JSP页面初始化时初始化 5.Page指令用于定义JSP文件中的全局属性,下列关于该指令用法的描述不正确的是:(D ) A. <%@ page %>作用于整个JSP页面。 B. 可以在一个页面中使用多个<%@ page %>指令。 C. 为增强程序的可读性,建议将<%@ page %>指令放在JSP文件的开头,但不是必须的。 D.<%@ page %>指令中的属性只能出现一次。 6.JSP中的隐式注释为 (C )。 A. // 注释内容 B. C. <%--注释内容 --%> D. /* 注释内容*/ 7.在JSP中,( A )动作用于将请求转发给其他JSP页面。 A.forward B.include https://www.wendangku.net/doc/2b11650804.html,eBean D.setProperty 8.使用response对象进行重定向时使用的方法为( B )。 A.getAttribute( ) B.sendRedirect( ) C. setContentType( ) D.setAttribute( ) 9.如果把用户名变量UserName放在session对象中,下面语句正确的 是( ) A.session.setName(UserName) B.session.setName(“name”,User Name) C.session.setAttribute(UserName) D.session.setAttribute( “name”,UserName) 10.在JSP中,test.jsp文件中有如下一行代码: /> 要使user对象中一直存在于对话中,直至其终止或被删除为止,下划 线中应填入( C )。 A.page B.request C.session D.application 11.下述选项中不属于JDBC基本功能的是:( D )。 A.与数据库建立连接 B.提交SQL语句 C.处理查询结果 D.数据库维护管理 12.在JSP中,使用 A. page B. request C. response D. application 13.在JSP中调用JavaBean时不会用到的标记是( A )。 A. B. C. D. 14.关于JavaBean正确的说法是:( A) A.Java文件与Bean所定义的类名可以不同,但一定要注意区分字母的大小写 B.在JSP文件中引用Bean,其实就是用 C.被引用的Bean文件的文件名后缀为.java D.Bean文件放在任何目录下都可以被引用 15.JSP中使用 https://www.wendangku.net/doc/2b11650804.html, B.property C.value D.以上皆不会出现 16.在 A.case B.choose C.check D.when 17.下面哪个标记产生的结果同<%=var%>( C )。 A. B. C. D. 18.每次传递请求或响应时调用Filter的( B )方法。 A.init() B.doFilter() C.destroy() D.getInitParameter 19.Struts Bean的( C )标记从已定义的资源包中检索某键的值。 A.define B.parameter C.message D.write 20.Servlet程序的入口点是:(A ) A.init() B.main() C.service() D.doGet() 30.不能在不同用户之间共享数据的方法是(A ) A.通过cookie B.利用文件系统 C.利用数据库 D.通过ServletContext对象 二、填空题 1.Tomcat服务器的默认端口是8080 。 2.Servlet的生命周期分三个时期:装载Servlet 、创建一个Servlet实例、销毁。 3.在JSP中,当执行了查询操作时,一般将查询结果保存在 ResultSet 对象中。 4.在JSP内置对象中,与请求相关的对象是 Request 对象。 5.在JSP中,可以使用 可以使用 6.异常的处理,可在该方法的代码段中包含3类代码:try 、 catch和finally代码块。 7.在JSP中,连接数据库的方式通常有两种:一种是通过JDBC-ODBC桥连接;另一种是通过JDBC驱动程序连接。 8.JDBC中为Statement接口提供了3种执行方法,它们是:executeUpdate 方法、executeQuery方法、execute方法。 9.取表单( 10.JSP内置对象共有四种Scope,它们是page、request、session、application。 11.事务处理技术包括数据查询和数据更新。 12.在JSP中使用Javabean可以通过 13.如果你只希望你的Javabean在当前页面有效,应该设置scope=”page”。 14.如果你想使用Javabean设计一个网站计数器,那么该bean的scope应当 设为application。 15.从本质上讲,Servlet是Java类。 16.JavaBean一般将属性设置成私有的,通过使用getXXX()方法和setXXX() 方法来进行属性的取得和设置。 17.可以通过response对象的sendRedirect方法设置页面重定向,实现页面 跳转, 18.JavaBean的应用语言是Java。 三、简答题 1.JSP有哪些内置对象?作用分别是什么? 答:JSP共有以下9种基本内置组件: 1.request用户端请求,此请求会包含来自GET/POST请求的参数 2.response网页传回用户端的回应 3.pageContext网页的属性是在这里管理 4.session与请求有关的会话期 5.Application servlet正在执行的内容 6.out用来传送回应的输出 7.configservlet的构架部件 8.pageJSP网页本身 9.exception针对错误网页,未捕捉的例外 2.说明MVC设计模式中,M、V、C分别代表什么,有什么作用。 答案: M代表Model(模型),该组件是对软件所处理问题逻辑的一种抽象,封装了问题的核心数据,逻辑和功能实现,独立于具体的界面显示以及I/O操作。 V代表View(视图),该组件将表示模型数据,逻辑关系以及状态信息,以某种形式展现给用户。视图组件从模型组件获得显示信息,并且对于相同的显示信息可以通过不同的显示形式或视图展现给用户。 C代表Controller(控制器),该组件主要负责用户与软件之间的交互操作,控制模型状态变化的传播,以确保用户界面与模型状态的统一。5.JavaBean 的主要规范是什么? 3.如何连接数据库? 答案: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:数据源名称 "; DriverManager.getConnection(url, "sa", ""); 4.简述使用JDBC技术的主要步骤? 答案: 1.注册和加载驱动器; 2.与数据库建立连接; 3.发送SQL语句; 4.处理结果; 5.关闭连接; 5.简述JavaBean的书写规范。 答案: (1)JavaBean是一个public的类。 (2)类要实现Serializable接口 (3)要有一个默认构造函数,以便任何一个容器都可以创建JavaBean的实例。 (4)存放属性的变量为protected或private特性。 (5)设置和获取属性时,使用setXXX()和getXXX()方法。 56、读下列程序并写出程序的结果 <%@ page language="java" autoFlush="false"%>
<%
out.println("你好!");
out.clear();
out.println("after clear:
");
char a='h';
int m=8;
double f=3.1415926;
out.print("a="+a+" ");
out.print("m="+m+" ");
out.print("f="+f+"
");
out.print("BufferSize:"+out.getBufferSize()+"
");
out.print("Remaining:"+out.getRemaining()+"
");
%>
结果为:after clear:
a=h m=8 f=3.1415926
BufferSize:8192
Remaining:8131
1.本程序段完成每隔5秒刷新一下页面,并在页面上显示系统当前时间。<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.util.Date" %>
本页用来说明response对象
当前时间为:
<%response.setHeader("Refresh","5");%>
<%
out.println(""+new Date());
%>
2.本程序用于获取用于访问页面的次数。
<%@ page contentType="text/html;charset=GB2312" page
language="java" %>
<%int Num = 0;
Object obj = session.getAttribute("Num");
if(obj == null)
{session.setAttribute("Num",Num);}
else
{Num=Integer.parseInt(obj.toString());
Num+=1;
session.setAttribute("Num",String.valueOf(Num));
}
%>
session中的Num的值为:<%=Num%>
四、编程题
1.创建一个名为worker.java的Bean,用来描述工人的信息,分别是姓名,工号,身高,体重,在一个名为work.jsp的页面中使用这个Bean,通过
答案:
Work.java
package ccc;
public class Worker{
String name=null;
long number;
double height,weight;
public String getName() {return name; }
/*public String getName()
{try{byte b[]=name.getBytes("ISO-8859-1");
name=new String(b);
return name;}
catch(Exception e)
{return name;} }*/
public void setName(String newName){name=newName;}
public long getNumber(){return number;}
public void setNumber(long newNumber){ number=newNumber;}
public double getHeight(){return height;}
public void setHeight(double newHeight) {height=newHeight;}
public double getWeight(){return weight;}
public void setWeight(double newWeight)
{weight=newWeight;}}
Work.jsp
<%@ page contentType="text/html;charset=GB2312" %>
名字是:
工号是:
<% double height=1.70;%>
value="<%=height+0.05%>" /> 身高是: 体重是:
2、要求在页面上有两个文本框,用户在文本框中输入姓名和电话号码,单击“提交”按钮后,由服务器应用程序接受并处理用户信息。例中ex8-01.html通过表单向ex8-01.jsp提交信息。
ex8-01.html
ex8-01.jsp :
<% String str1=request.getParameter("RdName");%>
<% String str2=request.getParameter("PhName");%>
<% String str3=request.getParameter("submit");%>
姓名文本框信息:
<%=str1%>
电话文本框信息:
<%=str2%>
提交按钮的面值:
<%=str3%>
1.设计如右图形式的表单页面,页面对应的文件名为form.jsp。
2.当用户单击上面表单中的提交按钮时,在当前页面中显示出用户提交的所有信息。本页面对应的文件名为information.jsp。