javaweb面试题

1. Java中 forward 和redirect的区别

使用forward的时候浏览器不知道它所请求的具体资源来源,所以地址栏不会变;
使用redirect,服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL。

forward,转发页面和转发到的页面可以共享request里面的数据.
redirect,不能共享数据.

2. JSP内置对象及其作用

(1) HttpServletRequest类的Request对象 
作用:代表请求对象,主要用于接受客户端通过HTTP协议连接传输到服务器端的数据。 
(2) HttpServletResponse类的Respone对象 
作用:代表响应对象,主要用于向客户端发送数据 
(3) JspWriter类的out对象 
作用:主要用于向客户端输出数据; 
        Out的基类是JspWriter 
(4) HttpSession类的session对象 
作用:主要用于来分别保存每个用户信息,与请求关联的会话; 
    会话状态维持是Web应用开发者必须面对的问题。 
(5) ServletContex类的application对象 
作用:主要用于保存用户信息,代码片段的运行环境; 
    它是一个共享的内置对象,即一个容器中的多个用户共享一个application对象,故其保存的信息被所有用户所共享. 
(6) PageContext类的PageContext对象 
作用:管理网页属性,为JSP页面包装页面的上下文,管理对属于JSP中特殊可见部分中已命名对象的访问,它的创建和初始化都是由容器来完成的。 
(7) ServletConfig类的Config对象 
作用:代码片段配置对象,表示Servlet的配置。 
(8) Object类的Page(相当于this)对象 
作用:处理JSP网页,是Object类的一个实例,指的是JSP实现类的实例,即它也是JSP本身,只有在JSP页面范围之内才是合法的。 
(9)Exception 
作用:处理JSP文件执行时发生的错误和异常

3. 那个jsp和servlet有什么区别?

servlet是在服务器端执行的java程序,只不过它有专门的一套规则(就是我们平常所说的api);jsp说得简单点就是用另一套简单的规则写的servlet程序,它可以写java代码,还可以写html代码,JavaScript,css等等……,但是到服务器端首先会被转成servlet程序然后就按照servlet的执行顺序执行了。 
JSP 是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

4. jsp中动态include与静态include的区别

动态include用jsp:include动作实现 它总是会检查所含文件中的变化适用于包含动态页面 ,并且可以带参数。
静态include用include伪码实现,它不会检查所含文件的变化,适用于包含静态页面。

5. 如何防止在jsp或servlet中的输出不被浏览器保存在cache中

把如下脚本加入到jsp文件的开始即可:

《%
response.setHeader("Cahce-Control","no-store");
response.setHeader("Pragma","no-store");
response.setDateHeader("Expires",0);

%》

6. 说出Servlet的生命周期,并说出Servlet和CGI的区别.

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法.

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet.

7. 抽象类是否可继承实体类

可以继承,但是和实体类的继承一样,也要求父类可继承,并且拥有子类可访问到的构造器

8. JSP四种会话跟踪技术

Cookie   Session tracking URL复写 隐藏表单域

9. 简述synchronized和java.util.concurrent.locks.Lock的异同 ?

主要相同点:Lock能完成synchronized所实现的所有功能主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。

10. 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。

以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 
public class ThreadTest1{ 
private int j; 
public static void main(String args[]){ 
ThreadTest1 tt=new ThreadTest1(); 
Inc inc=tt.new Inc(); 
Dec dec=tt.new Dec(); 
for(int i=0;i<2;i++){ 
Thread t=new Thread(inc); 
t.start(); 
t=new Thread(dec); 
t.start(); 


private synchronized void inc(){ 
j++; 
System.out.println(Thread.currentThread().getName()+"-inc:"+j); 

private synchronized void dec(){ 
j--; 
System.out.println(Thread.currentThread().getName()+"-dec:"+j); 

class Inc implements Runnable{ 
public void run(){ 
for(int i=0;i<100;i++){ 
inc(); 



class Dec implements Runnable{ 
public void run(){ 
for(int i=0;i<100;i++){ 
dec(); 



}

11. 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

12. 说出数据连接池的工作机制是什么?

J2EE 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量由配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

13. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

14. XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 
两种形式 dtd schema 
本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的) 
有DOM,SAX,STAX等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值