模拟笔试1

1.什么是B/S技术?B/S技术与C/S技术的区别?

B/S架构原理图

即Browser/Server (浏览器/服务器) 结构

模拟笔试1

C/S结构

Client/Server (客户机/服务器) 结构

模拟笔试1

第一层是在客户机系统上结合了表示与业务逻辑,第二层是通过网络结合了数据库服务器。简单的说就是第一层是用户表示层,第二层是数据库层。客户端和服务器直接相连,这两个组成部分都承担着重要的角色。

区别:B/S架构是C/S架构的一种改进,可以说属于三层C/S架构。


2.什么是URL?URL由几部分组成?

是互联网上标准资源的地址。

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

从上面的URL可以看出,一个完整的URL包括以下几部分:

1.协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符

2.域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用

3.端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口

4.虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”

5.文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名

6.锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分

7.参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。


3.JSP注释分为几种情况?有何区别?

HTML注释  <!-- 注释内容 -->

 当它出现在JSP页面时,微蘑菇将不被原样地加入JSP响应中,而且将出现在生成的HTML代码中,此代码将发送给浏览器;然后有浏览器负责忽略此注释。由于 HTML注释不是简单地被JSP忽略,因此它们可以包含内嵌的动态内容。HTML注释内的JSP表达式将被计算和执行,并送给浏览器的响应。


JSP页面中的普通注释 <% // 注释内容 %> <% /* 注释内容 */ %>

  以上两个注释都将由浏览器忽略。

JSP页面中的隐藏注释 <%-- 注释内容 --%>

SP语句中的隐藏注释嵌入在JSP程序的源代码中,使用隐藏注释的目的并不是提供给用户的,它可以达到两种目的:JSP语句中的隐藏注释目的之一,是为 了程序设计和开发人员阅读程序的方便,增强程序的可读性。一个优秀程序员的良好注释风格对于整个项目开发组以及长远使用来说,很重要。
JSP语句中的隐藏注释目的之二,是在增强程序可读性的同时又顾及程序系统的安全性,用户如果通过Web浏览器查看该JSP页面,看不到隐藏注释中注释的内容。


4.JSP页面组成?

1、指令元素
    指令元素主要用于为转换阶段提供JSP页面的相关信息,指令不会产生任何输出到当前的输出流中,它指定了有关页面本身的信息,这些信息在请求之间一直保持不变。指令元素语法为<%@ directive{attr="value"}%>。指令元素有三种:page、include、taglib。
    1)page
        该指令用于整个页面,定义与页面相关的属性,它是JSP页面和容器的通信员,一般放在JSP页面的第一行。与page相关的属性如下:
属性 描述
buffer 指定out对象使用缓冲区的大小
autoFlush 控制out对象的 缓存区
contentType 指定当前JSP页面的MIME类型和字符编码
errorPage 指定当JSP页面发生异常时需要转向的错误处理页面
isErrorPage 指定当前页面是否可以作为另一个JSP页面的错误处理页面
extends 指定servlet从哪一个类继承
import 导入要使用的Java类
info 定义JSP页面的描述信息
isThreadSafe 指定对JSP页面的访问是否为线程安全
language 定义JSP页面所用的脚本语言,默认是Java
session 指定JSP页面是否使用session
isELIgnored 指定是否执行EL表达式
isScriptingEnabled 确定脚本元素能否被使用
        a、import="导包列表",可以多次导入,也可以用逗号分隔开。
        b、language=“scriptingLangeuage”,指定在脚本元素使用的脚本语言,默认是Java。
        c、contentType="cinfo",指定HTTP响应的头部的Content-Type值。客户端的浏览器会根据我们在contentType中指定的MIME类型和字符集代码来显示Servlet输出的内容。
常见的MIME类型有:
MIME类型 文件格式
application/msword Microsoft Word文档
application/pdf Acrobat PDF文件
application/vnd.ms-excel Microsoft Excel表格
audio/x-wav WAV格式的音频文件
text/html HTML格式的文本文档
text/css HTML层叠样式表
text/plain 普通文本文档
image/jpeg JPEG格式图片
video/mpeg MPEG格式视频文件

        d、pageEncoding="peingo",指定页面的字符编码,如果设置了这个属性,则JSP页面的字符编码就是它指定的字符集,如果没有则默认的是ISO-8859-1。

    2)include
        该指令用于在JSP页面中包含一个文件,该文件可以是JSP页面、HTML网页、文本文件或一段Java代码。
            <%@ include file="相对于当前文件的" %>
    3)taglib
        该指令允许页面使用用户定制的标签。
            <%@taglib prefix="前缀" uri="具有唯一标识和前缀相关的标签描述符地址" %>
 
2、脚本元素
    使用JSP脚本元素可以将Java代码嵌入到JSP页面里,这些Java代码将出现在由当前JSP页面生成的Servelt中,使JSP将静态内容与动态内容分离出来。脚本元素包含表达式、脚本和声明等。
    1)表达式
        表达式是对数据的表示,系统将其作为一个值进行计算。
            <%= expression%>
        例如<%= user.getName()%>在将JSP转换成Servlet后,使用out.print()将表达式的值输出。所以如果表达式是调用一个方法的话,那方法必须要有返回值,而且在方法的后面不能有分号。
     2)脚本
        脚本是在<% ... %>里嵌入的Java代码,这里的Java代码与一般的Java代码没有什么区别,所以每一条语句同样要以分号“;”结束,这和表达式是不同的。
            <%  code  %>
    3)声明
        声明就是允许用户定义Servlet中的变量、方法。
            <%! code %>
        例如:<%! String getName(){return name; }%>,声明的本质其实就是将声明的变量加入到Servlet类(在任何方法之外)中,方法就成了Servlet的方法。

5.JSP是如何响应客户端的请求并向客户端输出信息?

1.HTML表单

一个表单至少应该包括说明性文字、表单控件、提交和重填等内容。表单的首要标记是<form>,它有两个重要参数:action和method。Action表示表单要提交到的地点,method表示表单发送的方法,有两种:get(默认方法)和post。

<fotm name=”form1” method=”post” action=”xinxin.jsp”>

post:post方式会将表单的内容通过http发送,在地址栏中看不到表单的提交信息,比较安全,而且使用post方式发送信息没有字符长度的限制。

get方式:表单内容经过编码之后,通过URL发送,可以在地址栏中看到表单信息,不安全。使用get方式发送信息时有255个字符的限制。get请求的页面可以设置为书签或使用邮件发送,而post不可以。

 2.JSP内置对象

内置对象:内置对象就是由Web容器加载的一组类的实例,它不像一般的Java对象那样用“new”去获取实例,而是可以直接在JSP页面使用的对象。

JSP内置对象out

Out对象用于在客户端输出数据,out对象常用的方法是:print(),这个方法用于在页面中打印出字符串信息。

<%

       out.print(“嗨!我叫新新!”);

%>

JSP内置对象request

request对象主要用于处理客户端请求,可以在JSP页面中通过调用request对象的方法来获取请求的相关数据,其中包含有关浏览器请求的信息。

request对象的几个常用方法

方法名称

说明

String getParameter(String name)

根据页面表单组件名称获取页面提交数据

String[] getParameterValues(String name)

获取一个页面表单组件对应多个值时的用户的请求数据。例如:获取多个复选框的值。

void setCharacterEncoding(String charset)

指定每个请求的编码,在调用request.getParameter()方法之前进行设定,可以用于解决中文乱码问题。

request.getRequestDispatcher(String path)

返回一个javax.servlet.RequestDispatchar对象,该对象的forward方法用于转发请求。

页面跳转

request.getRequestDispatcher(“success.jsp”).forward(request, response);


       <%

              request..setCharacterEncoding(“GBK”);

       String name = request.getParameter(“name”);

       String pwd = request.getParameter(“pwd”);

       String [] channels = request.getParameterValues(“channel”);

  %>

request的getParameter()方法可以获得上一页面所提交的参数值。

channel所有复选框的名字,getParameterValues(“channel”)方法可以获取到一个数组,这个数组中存储的就是所有选中的复选框对应的值。

setCharacterEncoding()方法用来指定每个请求的编码。

JSP内置对象response

       response对象与request对象相对应,它用于响应客户请求并向客户端输出信息。

response常用方法:void sendRedirect(String location)。这个方法用来将请求重定向到一个不同的URL。

例如:

       response.sendRedirect(“xinxin.jsp”);

       以上,客户端重新建立链接,URL地址发生了改变。

使用request的getRequestDispatcher()方法进行页面跳转时,客户端并没有重新建立新的链接,客户端的URL地址不会发生改变。


6.什么是重定向?什么是转发?区别是什么?

   在servlet中调用转发、重定向的语句如下:
request.getRequestDispatcher("new.jsp").forward(request, response);//转发到new.jsp

response.sendRedirect("new.jsp");//重定向到new.jsp

转发是服务器行为,重定向是客户端行为.

转发过程:客户浏览器发送http请求----》web服务器接受此请求--》调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器--》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的

区别:重定向,其实是两次request, 

第一次,客户端request   A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。

请求转发,是服务器内部把对一个request/response的处理权,移交给另外一个 
对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D
 传输的信息不会丢失。


7.JSP如何实现数据库访问?请写出相应步骤。

访问数据库要用到jdbc技术。
首先加载驱动:Class.forName("驱动包.类名称");
然后获得连接:Connection conn = DriverManager.getConnection("连接路径,端口,数据库名","数据库用户名","密码");
然后获得PreparedStatement:PreparedStatement pstmt = conn.prepareStatement("sql语句");
之后就按照检索和增删改的区别分别执行不同的代码。

8.0.6332数据类型是?

double类型

9.abstract class 和interface有什么区别?

abstract classinterface是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract classinterface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract classinterface的选择显得比较随意。其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。

 

Abstract class

Interface

实例化

不能

不能

一种继承关系,一个类只能使用一次继承关系。可以通过继承多个接口实现多重继承

一个类可以实现多个interface

数据成员

可有自己的

静态的不能被修改即必须是static final,一般不在此定义

方法

可以私有的,非abstract方法,必须实现

不可有私有的,默认是public,abstract 类型

变量

可有私有的,默认是friendly 型,其值可以在子类中重新定义,也可以重新赋值

不可有私有的,默认是public static final 型,且必须给其初值,实现类中不能重新定义,不能改变其值。

设计理念

表示的是“is-a”关系

表示的是“like-a”关系

实现

需要继承,要用extends

要用implements

1.相同点
  A. 两者都是抽象类,都不能实例化。
  B. interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。

2. 不同点
  A. interface需要实现,要用implements,而abstract class需要继承,要用extends。
  B. 一个类可以实现多个interface,但一个类只能继承一个abstract class。
  C. interface强调特定功能的实现,而abstract class强调所属关系。 
  D. 尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的 (declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现。
  这个选择有两点含义:
    一是Abastract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract的方法,在Abstrct class中必须定义方法体。
    二是abstract class的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。
  E. abstract class是interface与Class的中介。
  interface是完全抽象的,只能声明方法,而且只能声明pulic的方法,不能声明private及protected的方法,不能定义方法体,也 不能声明实例变量。然而,interface却可以声明常量变量,并且在JDK中不难找出这种例子。但将常量变量放在interface中违背了其作为接 口的作用而存在的宗旨,也混淆了interface与类的不同价值。如果的确需要,可以将其放在相应的abstract class或Class中。
  abstract class在interface及Class中起到了承上启下的作用。一方面,abstract class是抽象的,可以声明抽象方法,以规范子类必须实现的功能;另一方面,它又可以定义缺省的方法体,供子类直接使用或覆盖。另外,它还可以定义自己 的实例变量,以供子类通过继承来使用。