计算机等级 百分网手机站

Java代码的基本知识(2)

时间:2017-06-02 14:51:53 计算机等级 我要投稿

Java代码的基本知识

  实现可序列化的方法:实现java.io.Serializable接口。

  7、 代码示例:如何读写对象流

  //读

  try {

  String str = "123";

  FileOutputStream f = new FileOutputStream("test.txt");

  ObjectOutputStream s = new ObjectOutputStream(f);

  s.writeObject(str);

  f.close( );

  }catch(Exception e) {

  e.printStackTrace( );

  }

  //写

  try {

  FileInputStream f = new FileInputStream("test.txt");

  ObjectInputStream s = new ObjectInputStream(f);

  str =(String)s.readObject( );

  f.close( );

  }catch(Exception e){

  e.printStackTrace( );

  }

  8、 简述File类的基本功能

  处理文件和获取文件信息;文件或文件夹的管理。

  概括一句话就是:除了读写文件内容其他的都可以做。

  9、 代码示例:如何使用随机文件读写类来读写文件内容

  RW表示文件时可读写的

  读:

  try{

  RandomAccessFile f = new RandomAccessFile("test.txt", "rw");

  long len = 0L;

  long allLen = f.length();

  int i = 0;

  while (len < allLen) {

  String s = f.readLine();

  if (i > 0) {

  col.add(s);

  }

  i++;

  //游标

  len = f.getFilePointer();

  }

  }catch(Exception err){

  err.printStackTrace();

  }

  写:

  try{

  RandomAccessFile f = new RandomAccessFile("test.txt", "rw");

  StringBuffer buffer = new StringBuffer(" ");

  Iterator it = col.iterator();

  while (it.hasNext()) {

  buffer.append(it.next() + " ");

  }

  f.writeUTF(buffer.toString());

  }catch(Exception err){

  err.printStackTrace();

  }

  10、 代码示例:如何使用流的基本接口来读写文件内容

  try{

  DataInputStream in =

  new DataInputStream(

  new BufferedInputStream(

  new FileInputStream("Test.java")

  )

  );

  String currentLine=null;

  while ((currentLine = in.readLine()) != null){

  System.out.println(currentLine);

  }

  }catch (IOException e){

  System.err.println("Error: " + e);

  }

  多线程

  1、 什么是线程?

  轻量级的进程

  2、 线程的三个部分是?

  处理机

  代码

  数据

  3、 为什么使用多线程

  使UI响应更快

  利用多处理器系统

  简化建模

  4、 代码示例:Java中实现多线程的两种方式,包括如何定义多线程,如何使用多线程

  实现Runnable接口

  class Thread1 implements Runnable{

  public void run( ){

  //run里一般写一个while(true)循环

  System.out.println("Runnable");

  }

  }

  public class Test{

  public static void main(String[] a){

  Thread1 r = new Thread1();

  Thread t1 = new Thread(r);

  Thread t2 = new Thread(r);

  t1.start();

  t2.start();

  }

  }

  继承Thread

  class Thread2 extends Thread{

  public void run(){

  System.out.println("extends");

  }

  }

  public class Test{

  public static void main(String[] a){

  Thread t = new Thread2();

  t.start();

  }

  }

  5、 如何实现线程的调度?如何暂停一个线程的运行

  调度用wait和notify,

  ----

  sleep()

  6、 什么是线程的优先级

  判断哪个线程先执行的级别

  7、 简述sleep方法和wait方法的功能和区别

  sleep是让线程休眠一段时间

  wait是让线程挂起

  8、 什么是守候线程

  隐藏在后台持续运行的线程

  9、 什么是临界资源

  指多个线程共享的资源

  10、 什么是互斥锁,Java中如何实现

  用来保证在任一时刻只能有一个线程来访问临界资源的那个标记

  在Java中使用

  用在对象前面限制一段代码的执行

  用在方法声明中,表示整个方法为同步方法。

  11、 什么是死锁?如何避免?

  如果程序中有多个线程竞争多个资源,就可能会产生死锁。当一个线程等待由另一个线程持有的锁,而后者正在等待已被第一个线程持有的锁时,就会发生死锁。

  要避免死锁,应该确保在获取多个锁时,在所有的线程中都以相同的顺序获取锁。尽量少用临界资源。

  12、 简述wait和notify,notifyAll的使用

  被锁定的对象可以调用wait( )方法,这将导致当前线程被阻塞并放弃该对象的互斥锁,即解除了wait( )方法的当前对象的锁定状态,其他的线程就有机会访问该对象。

  notify使等待队列上的一个线程离开阻塞状态

  notifyAll使等待队列上的所有线程离开阻塞状态

  Socket编程

  13、 什么是url?基本的格式是?

  统一资源定位器

  Http://www.163.com:port

  14、 简述IP,Port,TCP的基本功能

  IP代表网络位置

  Port代表端口号

  TCP可保证不同厂家生产的计算机能在共同网络环境下运行,解决异构网通信问题,是目前网络通信的基本协议

  15、 简述Java网络模型的基本功能

  描述服务端和客户端的连接过程

  16、 简述Java网络编程究竟做些什么?如何做?

  1.建立连接

  2.准备输出的数据,流式输出

  3.流式输入,编程业务需要的格式

  4.关闭连接

  服务器分配一个端口号。如果客户请求一个连接,服务器使用accept( )方法打开socket连接。

  客户在host的port端口建立连接。

  服务器和客户使用InputStream和OutputStream进行通信。

  17、 代码示例:基于Socket编程

  try {

  ServerSocket s = new ServerSocket(8888);

  while (true) {

  Socket s1 = s.accept();

  OutputStream os = s1.getOutputStream();

  DataOutputStream dos = new DataOutputStream(os);

  dos.writeUTF("Hello," +s1.getInetAddress() + "port#" + s1.getPort() + " bye!");

  dos.close();

  s1.close();

  }

  }catch (IOException e) {

  System.out.println("程序运行出错:" + e);

  }

  18、 TCP和UDP区别

  TCP(传输控制协议)和UDP(用户数据报协议)是传输层协议

  TCP是面向连接的可靠数据传输协议,能保证传输内容的完整和准确;数据传输的辅助开销大,效率低

  UDP: 是无连接的,不可靠地传输协议,不能保证传输内容的完整和准确,对信息的适时要求比较高

  设计模式

  1、 什么是设计模式?

  就是经过实践验证的用来解决特定环境下特定问题的解决方案。

  2、 设计模式用来干什么?

  寻找合适的对象

  决定对象的粒度

  指定对象的接口

  描述对象的实现

  运用复用机制

  重复使用经过实践验证的正确的,用来解决某一类问题的解决方案来达到减少工作量、提高正确率等目的

  3、 什么是对象粒度

  对象中方法的大小就是粒度

  4、 基本的Java编程设计应遵循的规则?

  面向接口编程,优先使用对象组合

  5、 设计模式的应用范围

  所能解决的特定的一类问题中

  6、 简述什么是单例模式,以及解决的问题,应用的环境,解决的方案,应用时应注意什么?

  解决的问题:在任何时间内只有一个类实例存在的模式。

  应用环境:需要有一个从中进行全局访问和维护某种类型数据的区域的环境下使用单例模式。

  解决方案:保证一个类只有一个类实例存在。

  本质:控制实例的数量。

  注意:要合理的使用单例,避免单例成为瓶颈。

  7、 代码示例:单例模式的两种实现方法,并说明优缺点

  public class Test{

  private static Test test = new Test();

  public Test(){

  }

  public static Test getInstance(){

  return test;

  }

  }

  public class Test{

  private static Test test = null;

  private Test(){

  }

  public static Test getInstance(){

  if(test==null){

  test = new Test();

  }

  return test;

  }

  }

  第一种方式:装载类的时候就创建类的实例,用空间换时间。

  第二种方式:延迟装载,不需每次都创建一个类实例,而只是在第一次使用时创建,有效的利用资源,用时间换资源。

  8、 简述什么是工厂模式,以及他解决的问题,应用的环境,解决的方案,模式的本质

  利用工厂来解决接口选择的问题的模式。

  应用环境:当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定,创建的对象时,就需要用到工厂模式。

  解决方案:定义一个创建对象的类,在类的方法中决定具体实例化哪一个类。

  本质:就是根据不同的情况来选择不同的实现类,重在选择。

  9、 代码示例:工厂模式的实现方法

  单独是使用工厂:

  public class Factory{

  public static Sample creator(int which){

  if (which==1){

  return new SampleA();

  }else if (which==2)

  return new SampleB();

  }

  }

  }

  工厂+单例:

  public class MyFactory{

  public static MyFactory f = null;

  public MyFactory(){

  }

  public static MyFactory getInstance(){

  if(f==null){

  f=new MyFactory();

  }

  }

  public DBDAO getDAO(){

  return new DBDAOImpl();

  }

  }

  10、 简述什么是值对象模式,以及他解决的问题,应用的环境,解决的方案,模式的本质

  用来把一组数据封装成一个对象的模式

  解决问题:在远程方法的调用次数增加的时候,相关的应用程序性能将会有很大的下降

  解决方案:使用值对象的时候,可以通过仅仅一次方法调用来取得整个对象,而不是使用多次方法调用以得到对象中每个域的数值

  本质:封装数据。

  11、 代码示例:值对象模式的实现方法

  步骤:

  public class UserModel{

  private String userId;

  private String userName;

  public void setUserId(String id){

  this.userId = id;

  }

  public String getUserId(){

  return userId;

  }

  public void setUserName(String name){

  this.userName = name;

  }

  public String getUserName(){

  return userName;

  }

  }

  12、 简述什么是DAO模式,以及他解决的问题,应用的环境,解决的方案,模式的本质

  数据访问对象

  解决问题:根据数据源不同,数据访问也不同。根据存储的类型(关系数据库、面向对象数据库、纯文件等)和供应商实现不同,持久性存储(如数据库)的访问差别也很大。如何对存储层以外的模块屏蔽这些复杂性,以提供统一的调用存储实现。程序的分布式问题

  解决方案:将数据访问逻辑抽象为特殊的资源,也就是说将系统资源的接口从其底层访问机制中隔离出来;通过将数据访问的调用打包,数据访问对象可以促进对于不同数据库类型和模式的数据访问。

  本质:分层,是系统组件和数据源中间的适配器。(一层屏蔽一种变化)

  13、 代码示例:DAO模式的实现方法

  14、 什么是框架?框架的优点?

  框架是能够完成一定功能的半成品

  1.优点:完成一定的功能、提供一个精良的应用程序架构

  2.框架都是以接口的形式出现

  3.应该了解框架完成的功能、框架的API接口、框架的功能是怎么实现的

  15、 什么是开放-封闭法则(OCP)

  可扩展但是不可以更改已有的模块

  对扩展是开放的,对修改是封闭

  16、 什么是替换法则(LSP)

  使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用。

  17、 如何综合使用我们学过的设计模式来构建合理的应用程序结构

  是采用接口进行隔离,然后同时暴露值对象和工厂类,如果是需要数据存储的功能,又会通过DAO 模式去与数据存储层交互。

  18、 构建常用的合理的Java应用包结构

  Ui(表现层)

  business--factory,ebi,ebo

  dao--factory,dao,impl

  awt、swing

  1、 什么是GUI中的容器?什么是GUI中的组件?

  容器:能包含其他container和其他component的component。

  组件:在设计上能实现一定功能的封装体;

  2、 简述AWT中的Frame、Panel和组件的关系

  组件放在Panel上,而多个Panel可以叠加到Frame上,Frame一般只有一个,各个Panel可以互相在Frame上切换

  3、 简述如何使用一个组件

  初始化,加到容器中,注册事件,实现相应的事件

  Panel pan = new Panel();

  TextField td = new TextField();

  td.setText("this is in a TextField.");

  pan.add(td);

  4、 描述一个GUI界面的基本构成?

  Frame,Panel,组件

  Popmenu

  5、 如何控制外观,如颜色、字体等?

  可使用setColor(),setFont()方法

  例如:

  Frame f = new Frame();

  Font font = new Font("TimesRoman", Font.PLAIN, 14);

  f.setColor(Color.red);

  f.setFont(f);

  6、 什么是布局管理器?

  用来管理GUI界面中组件的分布情况,负责决定布局方针以及其容器的每一个子组件的大小

  7、 描述每种布局管理器的基本特点

  FlowLayout 从左到右分布,排满推到下一行

  BorderLayout 上下左右中分布

  CardLayout 卡片式分布

  GridLayout 网格式分布

  XYLayout 坐标分布

  8、 什么是JFC(Java基础类)?

  是关于GUI组件和服务完整集合,

  主要包括5个API:

  AWT,JavaD,Accessibility,Drag&Drop,Swing

  提供了帮助开发人员设计复杂应用程序的一整套应用程序开发包;

  9、 Swing和AWT的区别?

  Swing提供了更完整的组件,引入了许多新的特性和能力。Swing API是围绕着实现AWT 各个部分的API 构筑的。

  AWT 采用了与特定平台相关的实现,而绝大多数Swing 组件却不是这样做的,因此Swing 的外观和感觉是可客户化和可插的。

  10、 什么是双缓冲?

  在后台进行界面的更新,然后在前台进行界面交换

  功能:双缓冲可以改善一个被频繁改变的组件的外观

  11、 描述GUI的事件机制

  事件源:是一个事件的产生者,或产生事件的组件对象

  

  事件处理器:就是一个接收事件、解释事件并处理用户交互的方法。

  12、 描述Swing应用程序的基本结构?

  组件定义

  初始化界面

  各种事件处理方法

  各种适配类

  13、 描述表现层的基本功能?

  展示数据

  人机交互

  收集参数、调用逻辑层api

  14、 描述在开发Swing应用程序中,一般都要写那些代码?都写到什么地方?

  一般要在类的初始化的时候给组件赋值,写在jinit的方法里面

  一般要在按扭的事件处理中写收集参数,组织参数,调用业务接口的方法

  15、 对于GUI组件而言,最主要的方法是哪些?

  初始化

  如何给组件初始化

  如何从组件中取值

  设计组件的属性

  16、 如何学习GUI组件的用法?

  主要学会组件的定义、取值、赋值的方法

  类比学习

  JavaScript

  1、 什么是Javascript

  JavaScript是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的脚本语言。

  2、 Java和Javascript的区别

  1、基于对象和面向对象

  Java是一种真正的面向对象的语言,即使是开发简单的程序,必须设计对象。

  JavaScript是种脚本语言,它可以用来制作与网络无关的,与用户交互作用的复杂软件。它是一种基于对象(Object Based)和事件驱动(Event Driver)的编程语言。因而它本身提供了非常丰富的内部对象供设计人员使用。

  2、解释和编译

  两种语言在其浏览器中所执行的方式不一样。Java的源代码在传递到客户端执行之前,必须经过编译,因而客户端上必须具有相应平台 上的仿真器或解释器,它可以通过编译器或解释器实现独立于某个特定的平台编译代码的束缚。

  JavaScript是一种解释性编程语言,其源代码在发往客户端执行之前不需经过编译,而是将文本格式的字符代码发送给客户编由浏览器 解释执行。

  3、强变量和弱变量

  两种语言所采取的变量是不一样的。

  Java采用强类型变量检查,即所有变量在编译之前必须作声明。

  JavaScript中变量声明,采用其弱类型。即变量在使用前不需作声明,而是解释器在运行时检查其数据类型,

  4、代码格式不一样

  Java是一种与HTML无关的格式,必须通过像HTML中引用外媒体那么进行装载,其代码以字节代码的形式保存在独立的文档中。

  JavaScript的代码是一种文本字符格式,可以直接嵌入HTML文档中,并且可动态装载。编写HTML文档就像编辑文本文件一样方便。

  5、嵌入方式不一样

  在HTML文档中,两种编程语言的标识不同,JavaScript使用来标识,而Java使用来标识。

  6、静态联编和动态联编

  Java采用静态联编,即Java的对象引用必须在编译时的进行,以使编译器能够实现强类型检查。

  JavaScript采用动态联编,即JavaScript的对象引用在运行时进行检查,如不经编译则就无法实现对象引用的检查。

  3、 Javascript的运行环境

  具备javascript运行器的

  4、 如何在web页面加入Javascript,请写出两种方式并示例

  或者

  5、 写出Javascript基本的数据类型

  整型

  实型

  布尔

  字符型

  空值

  特殊字符

  6、 Javascript中如何定义变量,有何规则

  必须是一个有效的变量,即变量以字母开头,中间可以出现数字如test1、text2等。除下划线(-)作为连字符外,变量名称不能有空格、(+)、(-)、(,)或其它符号。

  不能使用javascript中的关键字

  7、 代码示例:Javascript中的if控制语句的结构

  if(i>4){

  alert(11);

  }

  8、 代码示例:Javascript中的for、while循环语句的结构

  for(var i=0;i<10;i++){

  alert(11);

  }

  while(i<10){

  alert(22);

  }

  9、 简述break和continue的'用法和功能

  使用break语句使得循环从For或while中跳出,continue使得跳过循环内剩余的语句而进入下一次循环。

  10、 Javascript中如何定义类,如何定义属性,如何定义方法,请代码示例

  function QuaryArgItem(){

  this.keys = new Array();

  this.values = new Array();

  }

  QuaryArgItem.prototype.push = function(key, value)

  {

  key = (key == null) ? "" : "" + key;

  value = (value == null) ? "" : "" + value;

  this.keys.push(key.toUpperCase());

  this.values.push(value);

  }

  QuaryArgItem是类名

  push相当于方法名

  使用的时候 :

  a = new QuaryArgItem();

  a.push();

  11、 Javascript的function如何定义,有何规则

  Function 方法名 (参数,变元){

  方法体;

  Return 表达式;

  }

  12、 如何触发Javascript的function

  function test(){

  alert(11);

  }

  13、 说出下列String对象的方法的功能和用法:toLowerCase、indexOf、subString、toUpperCase

  toLowerCase将指定字符串转化为小写

  indexOf判断是否包含某一字符或字符串

  substring从字符串中取一段并返回

  toUpperCase将指定字符串转化为大写

  14、 Javascript的日期对象是?如何初始化日期对象?

  提供一个有关日期和时间的对象Date

  date = new Date();

  15、 说出下列Javascript系统方法的功能和用法:eval、unEscape、escape、parseFloat

  eval:返回字符串表达式中的值

  unEscape:返回字符串ASCI码

  escape:返回字符的编码

  parseFloat:返回实数

  16、 Javascript中如何定义数组?如何初始化?如何取值和赋值

  var arrayName = new Array();

  Function arrayName(size){

  This.length=Size;

  for(var x=; x<=size;x++){

  this[x]=0;

  }

  Reture this;

  }

  17、 简要描述Javascript中下列内部对象的功能:Navigator、Window、Location、History、Document

  Navagator:提供有关浏览器的信息

  Window:Window对象处于对象层次的最顶层,它提供了处理Navagator窗口的方法和属性

  Location:提供了与当前打开的URL一起工作的方法和属性,是一个静态的对象

  History:提供了与历史清单有关的信息

  Document:包含与文档元素一起工作的对象,它将这些元素封装起来供编程人员使用

  18、 如何利用Document来从页面上取值和赋值

  取值:var a = document.all("text1").value;

  赋值:document.all("text1").value = '123';

  19、 简要描述Javascript对象层次结构

  window--document--组件

  20、 说出下列常见事件什么时候被触发:onFocus、onBlur、onSelect、onChange、onClick

  onBlur:当失去输入焦点后产生该事件

  onFocus:当输入获得焦点后,产生该文件

  onchange:当文字值改变时,产生该事件

  onselect:当文字加亮后,产生该事件

  onClick:当组件被点击时产生的事件

  21、 代码示例:使用Frame作一个基本的三分页面

  22、 框架如何载入页面

  23、 如何从框架中的一个页面访问另一个页面中的组件

  var value = parent.right.document.all("text1");

  CSS

  1、 如何把样式表加入到html页面中

  在文档中用定义;

  使用元素链接到外部的样式表单。;

  2、 如何链接元素和样式,请写出4种方法,并代码示例

  1、直接连接

  2、class连接

  3、id连接

  4、元素的style=""

  Xml

  1、 XML有几种解析方法,有什么区别?

  有XML DOM解析、SAX解析、StAX解析

  XML DOM:(XML Document Object Model)处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问;

  SAX:(Simple API for XML)不同于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问;

  StAX:(Streaming API for XML)与其他方法的区别就在于应用程序能够把 XML 作为一个事件流来处理,无论从性能还是可用性上都优于其他方法;

  DOM解析代码如下:

  import java.io.*;

  import java.util.*;

  import javax.xml.parsers.*;

  import javax.xml.transform.*;

  import javax.xml.transform.dom.*;

  import javax.xml.transform.stream.*;

  import org.w3c.dom.*;

  public class Fuxi{

  public Fuxi(){}

  public void runXml(){

  File f = new File("f:/test/xmltest/student.xml");

  try{

  //首先创建一个documentbuilderfoctory的工厂

  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

  //利用工厂来创建documengbuilder

  DocumentBuilder db = dbf.newDocumentBuilder();

  //利用db的parse方法来解析xml文件

  Document doc = db.parse(f);

  //将读出来的文件格式化

  doc.normalize();

  //定义一个nodelist数组来存放xml文件中的节点(标签)

  NodeList students = doc.getElementsByTagName("student");

  //从xml文件中读取数据

  for(int i=0;i

  //定义一个元素

  Element student = (Element)students.item(i);

  System.out.println("stu_id :"+student.getElementsByTagName("stu_id").item(0).getFirstChild().getNodeValue());

  System.out.println("name :"+student.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());

  System.out.println("age :"+student.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());

  }

  //向文件中写数据

  String stu_id = "001";

  String name = "xingxing";

  String age = "22";

  Text msg;

  //创建元素

  Element studentNew = doc.createElement("student");

  //创建子元素

  Element stuid = doc.createElement("stu_id");

  //设置元素的值

  msg = doc.createTextNode(stu_id);

  //将值添加 给元素

  stuid.appendChild(msg);

  //将元素添加到节点数组中

  studentNew.appendChild(stuid);

  Element name1 = doc.createElement("name");

  msg = doc.createTextNode(name);

  name1.appendChild(msg);

  studentNew.appendChild(name1);

  Element age1 = doc.createElement("age");

  msg = doc.createTextNode(age);

  age1.appendChild(msg);

  studentNew.appendChild(age1);

  //将元素studentnew添加到document树中

  doc.getDocumentElement().appendChild(studentNew);

  //进行写操作

  TransformerFactory tff = TransformerFactory.newInstance();

  Transformer tfor = tff.newTransformer();

  DOMSource dos = new DOMSource(doc);

  StreamResult result = new StreamResult(f);

  tfor.transform(dos,result);

  }catch(Exception e){

  System.out.println(e.toString());

  }

  }

  public static void main(String[] args){

  Fuxi ff = new Fuxi();

  ff.runXml();

  }

  }

  JEE

  1、 简述JEE

  JEE : JAVA  PLATFORM  ENTERPRISE  EDITION

  JEE是一个规范集;

  JEE是一个框架集;

  JEE是一个技术集或API集;

  适用于创建服务器端的大型的软件服务系统

  2、 C/S B/S 模式

  C/S client/server即客户机/服务器模式,客户端也参与程序的运行与计算(富客户端、胖客户端)

  B/S border/server即浏览器/服务器模式,又称为瘦客户端,客户端不参与程序的运行与计算

  3、 企业级应用(大规模的应用)的特点

  1.生命周期长、稳定、可靠

  2.组件往往分布在异构的环境中,能够跨平台

  3.维护性、扩展性、重用性

  4.有事务、安全、线程

  4、 什么是业务逻辑?

  依照业务逻辑划分模块,

  所谓判定业务 就是具有以下特征:

  1.业务流程

  2.业务判断

  3.功能组合

  5、 平台(角色)的划分

  1.平台供应商。提供满足API集实现的厂商(BEA weblogic IBM webshphere)

  2.组件供应商

  3.组件装配人员

  4.部署人员

  5.系统管理人员

  6.工具供应商 提供开发组件所使用的工具(Jbuilder、eclipse)

  6、 java技术分布(设计架构 模块内部设计)

  1.表现层 Servlet、 Jsp、 JavaBean、 Taglib

  2.逻辑层 EJB(SessionBean)

  3.数据层 ( JDBC  EJB(EntityBean))

  4.服务 JTA(JAVA事务架构) JTS(JAVA事务服务) JAAS(JAVA授权与验证服务)

  5.分布式通讯 RMI(IIOP)+JNDI 、JAXP(JAVA 的 XML 架构)

  JAVAMAIL(邮件服务)、JMS(消息服务)、IDLC、JCA(JAVA连接器框架 (成))

  7、 JEE的体系结构: 是一种组件的体系结构

  1.组件 : 能够完成一定功能的封状体(独立的功能的集合)

  不能单独运行,必须运行在容器上

  分为两类:web组件、ejb组件

  2.容器 : 提供组件的运行环境,并对组件进行管理(一段程序)

  管理组件的生命周期

  不能单独运行,必须运行在服务器上

  程序(组件)通过上下文来调用容器(context)

  组件通过web.xml向容器描述自己,使容器能够认识组件

  容器通过回调方法来调用组件

  分为两类:web容器、ejb容器

  3.服务器 : 提供容器的运行环境,提供大量的JEE基础服务

  web服务器(只提供web服务)

  jee服务器(提供web、jee服务)

  8、 什么是回调方法

  由容器自动调用的方法,就叫回调方法。

  9、 RMI远程方法的调用机制

  例如:A主机有B()方法,C主机有D()方法,A 想调用C主机的D方法

  10、 学习方法

  1.规范(熟记) 2.熟悉API 3.多练 4.多想

  Servlet

  1、 描述war包、jar包、ear包的结构

  war- web文档压缩包

  ---WEB-INF

  ----web.xml web应用部署文件

  ----lib 本web应用需要的jar包(可选)

  ----classes 本web应用需要的类文件(可选)

  jar- java文件压缩包

  ---META-INF

  ----*.MF java包的启动和描述文件

  ear- 企业资源包/企业应用包

  --META-INF

  ---Application.xml 配置文件

  --*.war

  --*.jar

  2、 什么是servlet?servlet主要做什么?

  Servlet是运行在服务器端的小应用程序,是接收网络服务的请求和产生响应的一种方式。

  servlet的功能:接受http请求,产生动态http响应。

  3、 servlet 与cgi相比的优点?servlet的缺点

  优点:

  性能(线程比进程更快)

  可伸缩

  Java强健且面向对象

  Java平台的独立

  缺点:

  处理代码(业务逻辑)与HTML(表现逻辑)混合在一起

  4、 常用的servlet包的名称是?

  javax.servlet

  javax.servlet.http

  5、 描述servlet接口的层次结构?

  Servlet

  --GenericServlet

  --HttpServlet

  --自己的servlet

  ServletRequest

  --HttpServletRequest

  ServletResponse

  --HttpServletResponse

  6、 对比get方法和post方法?

  (1)安全性问题, 通过Get方式提交数据,数据在URL中可以看到;POST方式,数据在URL中不可见。

  (2)GET方式提交的数据最多只能有1024字节,而POST则没有此限制。

  (3)GET方式不可以传输中文,POST方式可以传输中文。

  (4)POST 是被设计用来向上放东西的,而GET是被设计用来从服务器取东西的,GET也能够向服务器传送较少的数据,而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据。POST的信息作为HTTP 请求的内容,而GET是在HTTP 头部传输的。

  7、 归类描述HttpServletRequest接口都完成那些功能

  读取HTTP头标

  读取cookie

  读取路径信息

  标识HTTP会话。

  8、 归类描述HttpServletResponse接口都完成那些功能

  设置HTTP头标

  设置cookie

  设定响应的content类型

  输出返回数据

  9、 描述service方法所完成的基本功能?默认是在那里实现的?

  基本功能:service方法是在servlet生命周期中的服务期,根据HTTP请求方法(GET、POST等),将请求分发到doGet、doPost等方法

  实现:默认在HttpServlet类中实现

  10、 如何开发自己的Servlet?描述应该做的步骤和每步需要完成的工作

  1.引jar包

  1)构建开发环境: 新建工程,把tomcat下lib文件夹下的servlet-api.jar引入到Eclipse的工程中

  2.开发servlet类

  1)首先继承HttpServlet

  2)重写 doGet( ) doPost( )

  3.部署

  安装web服务器,例如Tomcat

  在Tomcat的webapps目录下新建一个文件夹作为web应用的根

  在根下新建一个名为WEB-INF的文件夹,里面建立一个web.xml的文件、一个classes的文件夹、一个lib文件夹

  按照servlet的DTD配置web.xml文件

  把编译好的servlet的class文件复制到classes目录下

  lib文件存放程序所需要的jar包

  4.启动服务器

  11、 为何servlet需要部署描述?

  servlet需要配置web.xml文件来使容器认识servlet程序(web组件)

  12、 Servlet基本的描述应该是?请写出来

  Hello

  com.javakc.web.action.MyServlet

  Hello

  /greeting

  13、 如何在html中使用servlet

  FORM标记

  ACTION– 指定form信息的目的地(相关的URL)

  METHOD – 指定HTTP方法(GET或POST)

  语法:

  {HTML form tags and other HTML content}

  14、 如何接受request中的参数

  String userName = request.getParameter("userName")方法

  15、 如何接受request中header的值

  request.getHeader(name);

  request.getIntHeader(name);

  request.getDateHeader(name);

  request.getHeaderNames();

  16、 如何输出html

  PrintWriter pw = response.getWriter();

  pw.write("");

  pw.write("Hello");

  pw.write("");

  17、 如何设置输出的contentType

  response.setContentType("text/html")

  18、 描述servlet的生命周期?

  生命周期是指servlet实例在web容器中从:首次创建调用init方法开始初始化期,经过service方法运行期,一直到destory方法销毁期 结束。

  servlet实例的生命周期由web容器来管理。

  19、 描述init,service,destroy方法的功能和特点

  init方法: 是在servlet实例创建时调用的方法,用于创建或打开任何与servlet相的资源和初始

  化servlet的状态,Servlet规范保证调用init方法前不会处理任何请求

  service方法:是servlet真正处理客户端传过来的请求的方法,由web容器调用,

  根据HTTP请求方法(GET、POST等),将请求分发到doGet、doPost等方法

  destory方法:是在servlet实例被销毁时由web容器调用。Servlet规范确保在destroy方法调用之

  前所有请求的处理均完成,需要覆盖destroy方法的情况:释放任何在init方法中

  打开的与servlet相关的资源存储servlet的状态

  20、 什么是回调方法?有什么特点?

  由容器来调用程序的方法

  由容器来决定什么时候来调

  21、 如何设置初始化servlet的参数?

  在中添加如下配置

  greetingText

  Hello

  22、 如何获取servlet初始化的参数

  public void init() {

  greetingText = getInitParameter("greetingText");

  System.out.println(">> greetingText = '" + greetingText + "'");

  }

  23、 ServletConfig接口默认实在那里实现的

  GenericServlet类实现ServletConfig接口

  24、 什么是ServletContext?有什么作用?

  Servlet上下文

  ServletContext对象是Web应用的运行时表示,约等于整个web应用;可通过其实现Web应用中的资源共享

  25、 如何访问ServletContext接口?是在那里实现的?

  在Servlet的实现类中通过this.getServletContext()方法访问。

  GenericServlet类实现了ServletContext接口。

  26、 ServletContext接口的功能包括?分别用代码示例

  只读初始化参数: getInitParameter(name:String) : String

  getInitParameterNames() : Enumeration

  读写访问应用级属性:getAttribute(name:String) : Object

  setAttribute(name:String, value:Object)

  getAttributeNames() : Enumeration

  只读访问文件资源: getResource(path) : URL

  getResourceAsStream(path) : InputStream

  写web应用日志文件:log(message:String)

  log(message:String, Throwable:excp)

  27、 如何设置ServletContext的参数?

  catalogFileName

  /WEB-INF/catalog.txt

  28、 如何获取ServletContext设置的参数值?

  ServletContext context = this.getServletContext();

  String catalogFileName = context.getInitParameter(“catalogFileName”);

  29、 描述Web应用的生命周期?

  Web容器启动时,初始化每个Web应用

  Web容器关闭时,销毁每个Web应用

  

  30、 如何用代码实现监控Web应用的生命周期?

  public class Test implements ServletContextListener{

  public void contextDestroyed(ServletContextEvent arg0) {

  System.out.println("web 容器销毁了+++++");

  }

  public void contextInitialized(ServletContextEvent arg0) {

  System.out.println("web 容器启动了+++++");

  }

  }

  web.xml文件中的配置:

  com.csy.Test

  31、 web应用中如下错误码示什么意思:400,401,404,500

  400 Bad Request//错误请求

  401 Unauthorized//未被认可

  404 Not Found//没有创建