jsp表达式,脚本和声明;jsp页面中的指令;隐含对象;开发模式Model2;WEB-INF文件夹的作用;El和JSTL;JSP异常处理
---------------------------------------------------------------------------------------------------------------------
JSP:Sun公司制定的一种服务器端动态页面技术的组件规范。(主要是HTML中嵌入少量的Java代码)
JSP包含:HTML、注释、Java代码、指令、隐含对象。
一.JSP页面中的HTML包括:HTML标记、CSS、JavaScript。 二.注释: - <!-- 注释 -->:html注释,注释中的内容如果包含Java代码,这些代码会被执行。 - <%-- 注释 -->:jsp特有的注释,注释中的内容如果包含Java代码,这些代码会被忽略。 三.JSP页面中的Java代码包含以下三种: 1.jsp表达式:<%= ... %>。 - 合法内容:变量、表达式、有返回值的方法。 - 转译成Servlet时的规则:在service()方法中用out.print语句输出该变量、表达式、方法的返回值。 2.jsp小脚本:<%...%> - 合法内容:能够写在方法里的Java代码片段都可以作为小脚本。 - 转译成Servlet时的规则:原封不动的成为Servlet类的service()方法里的一段代码。 3.jsp声明:<%!...%> - 合法内容:成员属性或成员方法的声明 - 转译成Servlet时的规则:成为Jsp页面转译成的Servlet类中的成员属性或成员方法。四.JSP页面中的指令:
1.语法规则:<%@指令名 属性=值 %> 2.作用:控制JSP在转译成Servlet类时生成的内容。 3.常用指令: - page指令:用于导包、设置页面属性。 - include指令:<% file="url" %>,在JSP页面转换成Servlet时,能够将其他页面包含进来。 - taglib指令:例:<% pageEncoding="utf-8" import="java.util.*" %>
<!-- 1.可以直接写静态内容(html/css/js) --> <!doctype html> <html> <head> <title>第一个JSP</title> <meta charset="utf-8"> </head> <body> <!-- 2.可以写Java:jsp脚本、jsp表达式、jsp声明 --> <!-- 2.3jsp声明 --> <%! public int lf(int n){ return n*n*n; } %> <ul> <!-- 2.1JSP脚本 --> <% for(int i=53;i<=60;i++){ %> <!-- 2.2jsp表达式 --> <li><%=lf(i) %></li> <% } %> </ul> <!-- 引入date.jsp --> <% file="date.jsp" %> </body> </html>五.JSP页面中的隐含对象:容器自动创建,在jsp文件中可以直接使用的对象。
- 作用:简化对HTTP请求、响应信息的访问。隐含(内置)对象:
1. request(*):HttpServletRequest 2. response:HttpServletResponse 3. out:JSPWriter,等价于PrintWriter 4. config:ServletConfig 5. application:ServletContext 6. exception:Throwable,当页面发生异常时才能使用 7. session(*):HttpSession,(待补充) 8. page:Object,指代当前的页面,相当于this 9. pageContext(*):PageContext,页面的环境,可以给页面提供数据, 通过该对象可以获取其他8个隐含对象。 隐含对象使用示例: <%Object obj = request.getAttribute("");%> <%=request.getAttribute("")%>------------------------------------------------------------------------------------------------------------------------
JSP运行原理: JSP转换成Java代码的过程:开发模式:
WEB-INF文件夹的作用:
------------------------------------------------------------------------------------------------------------------------- EL和JSTL: 一.EL 1.访问Bean属性: 语法:stu.name/stu["age"] 等价:request.getAttribute("stu").getName()/getAge(); 例: <p>姓名:${stu.name }</p> <p>nian龄:${stu["age"] }</p> <p>兴趣:${stu.interests[0] }</p> <!--等价:request.getAttribute("stu").getCourse().getId(); --> <p>课程:${stu.course.id }</p>2.EL的取值范围:
默认情况下EL依次从四个对象取值: page/request*/session*/application 这四个对象称为EL的取值范围。 举例:stu.name 1.page.getAttribute("stu").getName(); 2.request.getAttribute("stu").getName(); 3.session.getAttribute("stu").getName(); 4.application.getAttribute("stu").getName(); 可以明确指定取值范围: sessionScope.stu.name applicationScope.stu.name 例 <p>范围:${requestScope.stu.name }</p>3.EL取值是可以进行运算:
算数运算/关系运算/逻辑运算/判空运算 例 <p>nian龄-5:${stu.age-5 }</p> <p>大于20吗:${stu.age>20 }</p> <p>20-30之间:${stu.age>=20 && stu.age<=30 }</p> <p>判空:${empty stu }</p> <p>判空:${stu==null }</p>4.EL可以获取请求参数
param.user -> request.getParameter("user"); paramValues.city -> request.getParameterValues("city"); 例 <p>参数:${param.user }</p>二.JSTL : 需要配置:<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
1.if的用法: <p> <c:if test="${stu.gender=='M' }">男</c:if> <c:if test="${stu.gender=='F' }">女</c:if> </p> 2.choose的用法(类似if else): <p> <c:choose> <c:when test="${stu.gender=='M' }">男</c:when> <c:otherwise>女</c:otherwise> </c:choose> </p> 3.forEach的用法: varStatus用来声明循环状态,forEach在做循环时,会自动创建一个状态对象来记录 循环相关的状态数据,如循环次数等。varStatus就是给这个对象命名的,以便于之后引用. 例 <p> <c:forEach items="${stu.interests }" var="i" varStatus="s"> ${i } ${s.index } </c:forEach> </p>4.JSTL原理:
-------------------------------------------------------------------------------------------------------------------------- JSP异常处理: 一.容器中声明式处理: <!-- 1.指定某类型的异常对应某错误页面。 --> <!-- <error-page> <exception-type>java.lang.Exception</exception-type> <location>/WEB-INF/error.jsp</location> </error-page> --> <!-- 2.指定某编号的错误对应某错误页面 --> <error-page> <error-code>404</error-code> <location>/WEB-INF/error.jsp</location> </error-page> <error-page> <error-code>405</error-code> <location>/WEB-INF/error.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/WEB-INF/error.jsp</location> </error-page>二.编程式的一场处理:
try{ //... }catch(Exception e){ request.getRequestDispatcher(url).forword(req,res); }三.应用场景:对于程序本身的异常用编程式处理,如空指针,对于系统级别的异常最好使用声明式处理,如数据库连接不上.