JSP面试题都在这里(修订版)

 
 

前言

只有光头才能变强。

文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y

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

640?wx_fmt=png

原图可在公众号后台回复“脑图”即可获取

图上的知识点都可以在我其他的文章内找到相应内容。

JSP常见面试题

jsp静态包含和动态包含的区别

jsp静态包含和动态包含的区别

<%@ page contentType="text/html;charset=UTF-8" language="java"   %><html>    <head>        <title>页头</title>    </head>    <body>    我是页头    <br>    <br>    <br>    </body></html>"java"   %>
<html>
    <head>
        <title>页头</title>
    </head>
    <body>
    我是页头
    <br>
    <br>
    <br>
    </body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>页尾</title></head><body>我是页尾</body></html>"java" %>
<html>
<head>
    <title>页尾</title>
</head>
<body>

我是页尾

</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>包含页头和页尾进来</title></head><body><%@include file="head.jsp" %><%@include file="foot.jsp" %></body></html>"java" %>
<html>
<head>
    <title>包含页头和页尾进来</title>
</head>
<body>


<%@include file="head.jsp" %>
<%@include file="foot.jsp" %>
</body>
</html>
640?wx_fmt=png
640?wx_fmt=png
<jsp:include page=""/>
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>包含页头和页尾进来</title></head><body>    <jsp:include page="head.jsp"/>    <jsp:include page="foot.jsp"/></body></html>"java" %>
<html>
<head>
    <title>包含页头和页尾进来</title>
</head>
<body>
    <jsp:include page="head.jsp"/>
    <jsp:include page="foot.jsp"/>
</body>
</html>
640?wx_fmt=png
640?wx_fmt=png
<%@ page contentType="text/html;charset=UTF-8" language="java"   %><html>    <head>        <title>页头</title>    </head>    <body>    <%        String s = "zhongfucheng";    %>    我是页头呀    <br>    <br>    <br>    </body></html>"java"   %>
<html>
    <head>
        <title>页头</title>
    </head>
    <body>

    <%
        String s = "zhongfucheng";
    %>
    我是页头呀
    <br>
    <br>
    <br>
    </body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>页尾</title></head><body><%    String s = "zhongfucheng";%>我是页尾呀</body></html>"java" %>
<html>
<head>
    <title>页尾</title>
</head>
<body>
<%
    String s = "zhongfucheng";
%>

我是页尾呀

</body>
</html>
640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png

总结

  1. <%@include file="xxx.jsp"%>为jsp中的编译指令,其文件的包含是发生在jsp向servlet转换的时期,而<jsp:include page="xxx.jsp">是jsp中的动作指令,其文件的包含是发生在编译时期,也就是将java文件编译为class文件的时期

  2. 使用静态包含只会产生一个class文件,而使用动态包含会产生多个class文件 

  3. 使用静态包含,包含页面和被包含页面的request对象为同一对象,因为静态包含只是将被包含的页面的内容复制到包含的页面中去;而动态包含包含页面和被包含页面不是同一个页面,被包含的页面的request对象可以取到的参数范围要相对大些,不仅可以取到传递到包含页面的参数,同样也能取得在包含页面向下传递的参数

jsp有哪些内置对象?作用分别是什么?

jsp有哪些内置对象?作用分别是什么?

九个内置对象:

其中,request、response、session、application、config这五个对象和Servlet的API是一样的。这5个对象我就不解释了。

在JSP中,尤其重要的是pageContext对象。

pageContext是内置对象中最重要的一个对象,它代表着JSP页面编译后的内容(也就是JSP页面的运行环境)!

pageContext对象

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>获取八大内置对象</title></head><body><%    System.out.println(pageContext.getSession());    System.out.println(pageContext.getRequest());    System.out.println(pageContext.getResponse());    System.out.println(pageContext.getException());    System.out.println(pageContext.getPage());    System.out.println(pageContext.getServletConfig());    System.out.println(pageContext.getServletContext());    System.out.println(pageContext.getOut());%></body></html>"java" %>
<html>
<head>
    <title>获取八大内置对象</title>
</head>
<body>
<%

    System.out.println(pageContext.getSession());
    System.out.println(pageContext.getRequest());
    System.out.println(pageContext.getResponse());

    System.out.println(pageContext.getException());

    System.out.println(pageContext.getPage());
    System.out.println(pageContext.getServletConfig());
    System.out.println(pageContext.getServletContext());
    System.out.println(pageContext.getOut());

%>

</body>
</html>
640?wx_fmt=png

pageContext作为域对象

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>使用page域对象</title></head><body><%    pageContext.setAttribute("name", "zhongfucheng");%><%    String value = (String) pageContext.getAttribute("name");    System.out.println(value);%></body></html>"java" %>
<html>
<head>
    <title>使用page域对象</title>
</head>
<body>
<%
    pageContext.setAttribute("name""zhongfucheng");
%>
<%
    String value = (String) pageContext.getAttribute("name");
    System.out.println(value);
%>

</body>
</html>
640?wx_fmt=png
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>request域对象设置属性</title></head><body><%    //这是request域对象保存的内容    request.setAttribute("name","zhongfucheng");%><%--跳转到1.jsp中--%><jsp:forward page="1.jsp"/></body></html>"java" %>
<html>
<head>
    <title>request域对象设置属性</title>
</head>
<body>
<%
    //这是request域对象保存的内容
    request.setAttribute("name","zhongfucheng");
%>

<%--跳转到1.jsp中--%>

<jsp:forward page="1.jsp"/>

</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>在page域对象获取属性</title></head><body><%    //企图获取request域对象存进的属性    String value = (String) pageContext.getAttribute("name");    System.out.println(value);%></body></html>"java" %>
<html>
<head>
    <title>在page域对象获取属性</title>
</head>
<body>

<%
    //企图获取request域对象存进的属性
    String value = (String) pageContext.getAttribute("name");
    System.out.println(value);
%>

</body>
</html>
640?wx_fmt=png

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>在page域对象获取request域对象的属性</title></head><body><%    //使用重载的方法获取request域对象的属性    String value = (String) pageContext.getAttribute("name",pageContext.REQUEST_SCOPE);    System.out.println(value);%></body></html>"java" %>
<html>
<head>
    <title>在page域对象获取request域对象的属性</title>
</head>
<body>

<%
    //使用重载的方法获取request域对象的属性
    String value = (String) pageContext.getAttribute("name",pageContext.REQUEST_SCOPE);
    System.out.println(value);
%>

</body>
</html>
640?wx_fmt=png

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>使用findAttribute</title></head><body><%    //使用findAttribute查找2.jsp中request域对象的属性    String value = (String) pageContext.findAttribute("name");    System.out.println(value);%></body></html>"java" %>
<html>
<head>
    <title>使用findAttribute</title>
</head>
<body>

<%

    //使用findAttribute查找2.jsp中request域对象的属性
    String value = (String) pageContext.findAttribute("name");
    System.out.println(value);
%>

</body>
</html>
640?wx_fmt=png

out对象:

640?wx_fmt=png
640?wx_fmt=png

page对象

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

exception对象

<%@ 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>"java" errorPage="error.jsp" %>

<html>
<head>
    <title></title>
</head>
<body>

<%--模拟空指针异常的错误--%>
<%

    String sss = null;
    sss.length();
%>

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

<html>
<head>
    <title>错误页面</title>
</head>
<body>

<%
    out.println("程序抛出了异常:" + exception);
%>

</body>
</html>
640?wx_fmt=png

总结

  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>

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

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

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

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

640?wx_fmt=png

总结

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

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

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

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

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

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

<%@ page session="false" %>

jsp的缺点?

jsp的缺点?

说出Servlet和CGI的区别?

说出Servlet和CGI的区别?

简述JSP的设计模式。

简述JSP的设计模式。

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

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

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

模式一有两种情况:

完全使用JSP做开发:

使用JSP+JavaBean做开发:

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

640?wx_fmt=png

MVC设计模式:

总结

最后

乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,不妨来关注一下!

640?wx_fmt=jpeg

有帮助?好看!转发! 640




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值