下面是我整理下来的JSP知识点:html
图上的知识点均可以在我其余的文章内找到相应内容。java
jsp静态包含和动态包含的区别
<%@ page contentType="text/html;charset=UTF-8" language="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>
<%@ 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>
<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>
<%@ page contentType="text/html;charset=UTF-8" language="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>
<%@include file="xxx.jsp"%>
为jsp中的编译指令,其文件的包含是发生在jsp向servlet转换的时期,而<jsp:include page="xxx.jsp">
是jsp中的动做指令,其文件的包含是发生在编译时期,也就是将java文件编译为class文件的时期 jsp有哪些内置对象?做用分别是什么?
九个内置对象:web
其中,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>
pageContext做为域对象
相似于request,session,ServletContext做为域对象而言都有如下三个方法:缓存
<%@ 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>
<%@ 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>
<%@ 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>
上面的pageContext默认是page范围的,但pageContext对象重载了set、get、removeAttribute这三个方法服务器
多了一个设置域范围的一个参数,若是不指定默认就是page。固然了,pageContext把request、session、application、page这几个域对象封装着了静态变量供咱们使用。微信
<%@ 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>
pageContexst还有这么一个方法:session
<%@ 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>
out对象:
只有向out对象中写入了内容,且知足以下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并经过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:
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>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %> <html> <head> <title>错误页面</title> </head> <body> <% out.println("程序抛出了异常:" + exception); %> </body> </html>
jsp和servlet的区别、共同点、各自应用的范围?
属性做用域范围
应用场景:
写出5种JSTL经常使用标签
<c:if>,<c:item>,<c:foreach>,<c:out>,<c:set>
写一个自定义标签要继承什么类
咱们能够有两种方式来实现自定义标签:
SimpleTagSupport类的执行顺序(原理):
SimpleTagSupport,通常调用doTag方法或者实现SimpleTag接口
JSP是如何被执行的?执行效率比SERVLET低吗?
如何避免jsp页面自动生成session对象?为何要这么作?
可使用页面指令显式关掉,代码以下:
<%@ page session="false" %>
jsp的缺点?
说出Servlet和CGI的区别?
简述JSP的设计模式。
在Web开发模式中,有两个主要的开发结构,称为模式一(Mode I)和模式二(Mode II)
首先咱们来理清一些概念吧:
模式一指的就是在开发中将显示层、控制层、数据层的操做统一交给JSP或者JavaBean来进行处理!
模式一有两种状况:
彻底使用JSP作开发:
优势:
缺点:
使用JSP+JavaBean作开发:
优势:
缺点:
Mode II 中全部的开发都是以Servlet为主体展开的,由Servlet接收全部的客户端请求,而后根据请求调用相对应的JavaBean,并全部的显示结果交给JSP完成!,也就是俗称的MVC设计模式!
MVC设计模式:
若是文章有错的地方欢迎指正,你们互相交流。习惯在微信看技术文章的同窗,能够关注微信公众号:Java3y