JSP面试题都在这里(三)

简介: 下面是我整理下来的JSP知识点:

page对象

内置对象page是HttpJasPage对象,其实page对象代表的就是当前JSP页面,是当前JSP编译后的Servlet类的对象。也就是说:page对象相当于普通java类的this

exception对象

  • 内置对象exception是java.lang.Exception类的对象,exception封装了JSP页面抛出的异常信息。exception经常被用来处理错误页面
  • 前面我们已经讲过了怎么设置错误页面了,下面我们就来简单使用一下exception对象吧
  • 1.jsp页面
  <%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp" %>
    <html>
    <head>
        <title></title>
    </head>
    <body>
    <%--模拟空指针异常的错误--%>
    <%
        String sss = null;
        sss.length();
    %>
    </body>
    </html>

error.jsp页面

 <%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
    <html>
    <head>
        <title>错误页面</title>
    </head>
    <body>
    <%
        out.println("程序抛出了异常:" + exception);
    %>
    </body>
    </html>

效果:

17.jpg

总结

  1. request 用户端请求,此请求会包含来自GET/POST请求的参数
  2. response 网页传回用户端的回应
  3. pageContext 网页的属性是在这里管理,代表的编译后JSP内容
  4. session 与请求有关的会话期
  5. application servlet 正在执行的内容
  6. out 用来传送回应的输出
  7. config servlet的构架部件
  8. page JSP网页本身
  9. exception 针对错误网页,未捕捉的例外

jsp和servlet的区别、共同点、各自应用的范围?

jsp和servlet的区别、共同点、各自应用的范围?

  1. JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。
  2. Servlet和JSP最主要的不同点在于:Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
  3. JSP侧重于视图,Servlet主要用于控制逻辑。

属性作用域范围

属性作用域范围

  1. page【只在一个页面中保存属性,跳转页面无效】
  2. requet【只在一次请求中保存属性,服务器跳转有效,浏览器跳转无效】
  3. session【在一个会话范围中保存属性,无论何种跳转均有效,关闭浏览器后无效】
  4. application【在整个服务器中保存,所有用户都可以使用】

应用场景:

  1. request:如果客户向服务器发请求,产生的数据,用户看完就没用了,像这样的数据就存在request域,像新闻数据,属于用户看完就没用的
  2. session:如果客户向服务器发请求,产生的数据,用户用完了等一会儿还有用,像这样的数据就存在session域中,像购物数据,用户需要看到自己购物信息,并且等一会儿,还要用这个购物数据结帐
  3. servletContext:如果客户向服务器发请求,产生的数据,用户用完了,还要给其它用户用,像这样的数据就存在servletContext域中,像聊天数据

写出5种JSTL常用标签

写出5种JSTL常用标签

<c:if><c:item><c:foreach><c:out><c:set>

写一个自定义标签要继承什么类

写一个自定义标签要继承什么类

我们可以有两种方式来实现自定义标签:

  • 传统方式,实现Tag接口(老方法)
  • 简单方式,继承SimpleTagSupport类

SimpleTagSupport类的执行顺序(原理):

  • ①WEB容器调用标签处理器对象的setJspContext方法,将代表JSP页面的pageContext对象传递给标签处理器对象
  • ②WEB容器调用标签处理器对象的setParent方法,将父标签处理器对象传递给这个标签处理器对象。【注意,只有在标签存在父标签的情况下,WEB容器才会调用这个方法】
  • ③如果调用标签时设置了属性,容器将调用每个属性对应的setter方法把属性值传递给标签处理器对象。如果标签的属性值是EL表达式或脚本表达式,则WEB容器首先计算表达式的值,然后把值传递给标签处理器对象。
  • ④如果简单标签有标签体,容器将调用setJspBody方法把代表标签体的JspFragment对象传递进来
  • ⑤执行标签时:容器调用标签处理器的doTag()方法,开发人员在方法体内通过操作JspFragment对象,就可以实现是否执行、迭代、修改标签体的目的。

18.jpg

总结

SimpleTagSupport,一般调用doTag方法或者实现SimpleTag接口

JSP是如何被执行的?执行效率比SERVLET低吗?

JSP是如何被执行的?执行效率比SERVLET低吗?

  • 当客户端向一个jsp页面发送请求时,Web Container将jsp转化成servlet的源代码(只在第一次请求时),然后编译转化后的servlet并加载到内存中执行,执行的结果response到客户端
  • jsp只在第一次执行的时候会转化成servlet,以后每次执行,web容器都是直接执行编译后的servlet,所以jsp和servlet只是在第一次执行的时候不一样,jsp慢一点,以后的执行都是相同的

如何避免jsp页面自动生成session对象?为什么要这么做?

如何避免jsp页面自动生成session对象?为什么要这么做?

可以使用页面指令显式关掉,代码如下:

<%@ page session="false" %>

jsp的缺点?

jsp的缺点?

  • 1)不好调试
  • 2)与其他脚本语言的交互(可读性差)

说出Servlet和CGI的区别?

说出Servlet和CGI的区别?

  • Servlet处于服务器进程中,只会有一个servlet实例,每个请求都会产生一个新的线程,而且servlet实例一般不会销毁
  • CGI:来一个请求就创建一个进程,用完就销毁,效率低于servlet

简述JSP的设计模式。

简述JSP的设计模式。

在Web开发模式中,有两个主要的开发结构,称为模式一(Mode I)和模式二(Mode II)

首先我们来理清一些概念吧:

  • DAO(Data Access Object):主要对数据的操作,增加、修改、删除等原子性操作。
  • Web层:界面+控制器,也就是说JSP【界面】+Servlet【控制器】
  • Service业务层:将多个原子性的DAO操作进行组合,组合成一个完整的业务逻辑
  • 控制层:主要使用Servlet进行控制
  • 数据访问层:使用DAO、Hibernate、JDBC技术实现对数据的增删改查
  • JavaBean用于封装数据,处理部分核心逻辑,每一层中都用到!

模式一指的就是在开发中将显示层、控制层、数据层的操作统一交给JSP或者JavaBean来进行处理

模式一有两种情况:

完全使用JSP做开发:

  • 优点:
  • 开发速度贼快,只要写JSP就行了,JavaBean和Servlet都不用设计!
  • 小幅度修改代码方便,直接修改JSP页面交给WEB容器就行了,不像Servlet还要编译成.class文件再交给服务器!【当然了,在ide下开发这个也不算是事】
  • 缺点:
  • 程序的可读性差、复用性低、代码复杂!什么jsp代码、html代码都往上面写,这肯定很难阅读,很难重用!

使用JSP+JavaBean做开发:

  • 优点:
  • 程序的可读性较高,大部分的代码都写在JavaBean上,不会和HTML代码混合在一起,可读性还行的
  • 可重复利用高,核心的代码都由JavaBean开发了,JavaBean的设计就是用来重用、封装,大大减少编写重复代码的工作!
  • 缺点:
  • 没有流程控制,程序中的JSP页面都需要检查请求的参数是否正确,异常发生时的处理。显示操作和业务逻辑代码工作会紧密耦合在一起的!日后维护会困难

Mode II 中所有的开发都是以Servlet为主体展开的,由Servlet接收所有的客户端请求,然后根据请求调用相对应的JavaBean,并所有的显示结果交给JSP完成!,也就是俗称的MVC设计模式!

19.jpg

MVC设计模式:

  • 显示层(View):主要负责接受Servlet传递的内容,调用JavaBean,将内容显示给用户
  • 控制层(Controller):主要负责所有用户的请求参数,判断请求参数是否合法,根据请求的类型调用JavaBean,将最终的处理结果交给显示层显示!
  • 模型层(Mode):模型层包括了业务层,DAO层。

总结

  • (1)ModelI,JSP+JavaBean设计模式。
  • (2)ModelII,MVC设计模式。

如果文章有错的地方欢迎指正,大家互相交流。


目录
相关文章
|
6月前
|
Java 应用服务中间件 程序员
程序员的20大JSP面试问题及答案
程序员的20大JSP面试问题及答案
|
安全 前端开发 Java
Java面试题日积月累(jsp/Servlet面试题20道)
Java面试题日积月累(jsp/Servlet面试题20道)
86 0
每日一道面试题之 介绍一下jsp 的 4 种作用域
每日一道面试题之 介绍一下jsp 的 4 种作用域
|
存储 Java
每日一道面试题之jsp 有哪些内置对象?作用分别是什么?
每日一道面试题之jsp 有哪些内置对象?作用分别是什么?
|
前端开发 Java 容器
每日一道面试题之jsp 和 servlet 有什么区别?
每日一道面试题之jsp 和 servlet 有什么区别?
|
Java 程序员 容器
Java 最常见的面试题:jsp 和 servlet 有什么区别?
Java 最常见的面试题:jsp 和 servlet 有什么区别?
Java 最常见的面试题:说一下 jsp 的 4 种作用域?
Java 最常见的面试题:说一下 jsp 的 4 种作用域?
Java 最常见的面试题: jsp 有哪些内置对象?作用分别是什么?
Java 最常见的面试题: jsp 有哪些内置对象?作用分别是什么?
|
缓存 Java API
JSP面试题都在这里(二)
下面是我整理下来的JSP知识点:
85 0
JSP面试题都在这里(二)
|
Java
JSP面试题都在这里(一)
下面是我整理下来的JSP知识点:
68 0
JSP面试题都在这里(一)