前言
只有光头才能变强。
文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y
下面是我整理下来的JSP知识点:
原图可在公众号后台回复“脑图”即可获取
图上的知识点都可以在我其他的文章内找到相应内容。
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>
<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>
<%@ 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>
总结
<%@include file="xxx.jsp"%>
为jsp中的编译指令,其文件的包含是发生在jsp向servlet转换的时期,而<jsp:include page="xxx.jsp">
是jsp中的动作指令,其文件的包含是发生在编译时期,也就是将java文件编译为class文件的时期使用静态包含只会产生一个class文件,而使用动态包含会产生多个class文件
使用静态包含,包含页面和被包含页面的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>
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>
<%@ 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>
<%@ 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>
<%@ 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>
out对象:
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>
总结
request 用户端请求,此请求会包含来自GET/POST请求的参数
response 网页传回用户端的回应
pageContext 网页的属性是在这里管理,代表的编译后JSP内容
session 与请求有关的会话期
application servlet 正在执行的内容
out 用来传送回应的输出
config servlet的构架部件
page JSP网页本身
exception 针对错误网页,未捕捉的例外
jsp和servlet的区别、共同点、各自应用的范围?
jsp和servlet的区别、共同点、各自应用的范围?
JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。
Servlet和JSP最主要的不同点在于:Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
JSP侧重于视图,Servlet主要用于控制逻辑。
属性作用域范围
属性作用域范围
page【只在一个页面中保存属性,跳转页面无效】
requet【只在一次请求中保存属性,服务器跳转有效,浏览器跳转无效】
session【在一个会话范围中保存属性,无论何种跳转均有效,关闭浏览器后无效】
application【在整个服务器中保存,所有用户都可以使用】
应用场景:
request:如果客户向服务器发请求,产生的数据,用户看完就没用了,像这样的数据就存在request域,像新闻数据,属于用户看完就没用的
session:如果客户向服务器发请求,产生的数据,用户用完了等一会儿还有用,像这样的数据就存在session域中,像购物数据,用户需要看到自己购物信息,并且等一会儿,还要用这个购物数据结帐
servletContext:如果客户向服务器发请求,产生的数据,用户用完了,还要给其它用户用,像这样的数据就存在servletContext域中,像聊天数据
写出5种JSTL常用标签
写出5种JSTL常用标签
<c:if>,<c:item>,<c:foreach>,<c:out>,<c:set>
写一个自定义标签要继承什么类
写一个自定义标签要继承什么类
我们可以有两种方式来实现自定义标签:
SimpleTagSupport类的执行顺序(原理):
总结
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设计模式!
MVC设计模式:
总结
最后
有帮助?好看!转发!乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,不妨来关注一下!