JSP(Java Server Pages)是动态网页技术,其原理是Servlet技术。
1. JSP与Servlet的关系:
JSP继承了HttpJspBase类(Tomact中work目录可以找到JSP页面的java文件),
HttpJspBase类又继承了HTTPServlet类,
HTTPServlet类又继承了GenericServlet类,
GenericServlet类实现了Servlet接口。
2. JSP指令:
<%@ page language contentType pageEncoding import %> 页面的相关信息设置
<%@ include file %> 页面的静态包含
<%@ taglib uri prefix%> 声明该页使用的标签库
3. JSP脚本标识
JSP表达式: <%= %>
JSP声明标识:<%! %>
JSP代码片段:<% %>
4. JSP动态标识
<jsp:include page="url"> 页面的动态包含
<jsp:forward page="url"> 页面的跳转(服务器跳转)
5. 页面的静态包含和动态包含有什么区别:
① 静态包含将包含的文件内容和主体文件先合并再编译为一个java文件
动态包含是各个jsp文件分别被编译为对应的java文件
② 静态包含不能有两个相同的变量,动态可以包含相同的变量
③ 静态包含的页面不能独立存在,动态包含的页面可以独立存在
6. JSP内置对象
HttpServletRequest request request
HttpServletResponse response request
HttpSession session session
ServletContext application application
ServeltConfig config page
JspWriter out page
pageContext pageContext page
Object page page
Exception exception page
(1) request对象封装了有客户端生成的JSP请求的所有细节,主要包括HTTP头信息、
系统信息、请求方式、请求参数、服务器端跳转
request.getParameter(name);
request.setAttribute(name, value);
request.getAttribute(name);
request.getCoolies();
request.setCharacterEncoding(charsetType);
request.getRequestURL(); // 返回一个完整的路径(http://localhost:8080/day40/emp/empServelt)
request.getRequestURI(); // 返回一个去掉前面域名的路径(/day40/emp/empServlet)
request.getContextPath(); // 返回工程名(/day40)
request.getServletPath(); // 返回除去域名和工程名的部分(/emp/empServlet)
(2)response对象用于响应客户请求,向客户传输信息,处理HTTP头文件、客户端跳转
response.sendRedirect(path);
response.setHeader()
response.addCookie()
response.setCharaterEncoding(charsetTpye);
response.setContextType("text/html;charset=utf-8");
(3)session对象存储或读取客户的相关信息(浏览器打开时自动创建,手动销毁或session时间到了)
session.setAttribute(name, value);
session.getAttribute(name);
session.removeAttribute(name);
session.setMaxInactiberval(value);
session.invalidate();
(4)application对象用于保存整个项目的共有数据(服务启动创建、停止销毁)
application.getInitParameter(name);
application.getAttributeNames();
application.getAttribute(name);
application.setAttribute(name, value);
application.removeAttribute(name);
(5)config对象主要用于获取服务器的配置信息
getServeltContext();
getInitParameter();
getInitParameterNames();
(6)out对象在web浏览器用于输出信息,并管理服务器的输出缓冲区
out.print();
out.println();
out.clear();
out.cleatBuffer();
out.flush();
(7)pageContext对象获取JSP的内置对象request、response、session、application、exception等
(8)page对象代表JSP本身
(9)exception用来处理JSP页面发生的错误和异常
7. JSP作用范围
page(页面范围) request(请求到响应) session(会话) application(全局)
8. 客户端重定向和服务器端跳转的区别:
客户端重定向 response.sendRedirect(url)
服务器端跳转 request.getRequestDispatcher(url).forward(request.response)
(1)服务器端跳转浏览器不会看见url,客户端重定向会显示url
(2)服务器端跳转是一次请求,客户端重定向是两次请求
(3)指定目标资源的URL,服务器跳转指的是应用程序的根目录,客户端重定向是指应用服务器根目录
9. EL表达式
${ }
${empty }
${not empty }
${条件表达式 ? 表达式1 : 表达式2 }
${pageContext. }
10. JSTL标签库
JSTL分为5个不同的功能标签库:
核心标签库
<c:out value="${ }"></c:out>
<c:if test="${ }">value</c:if>
<c:choose>
<c:when test="${ }">value1</c:when>
<c:when test="${ }">value2</c:when>
<c:otherwise>value</c:otherwise>
</c:choose>
<c:forEach items="${ }" var="" begin="" end="" step="" varStatus="">
<!-- varStatus有4个可选属性index、count、first、last -->
</c:forEcah>
格式标签库
SQL标签库
XML标签库
函数标签库