概念:JSP(Java Server Pages): java服务器端的界面
JSP是一个特殊的页面,底层的实现是Servlet,在JSP中既可以使用html的标签也可以定义Java代码。JSP主要用于简化书写原理
JSP的本质就是一个ServletJSP脚本
JSP脚本的四种定义方式: <% 代码 %> 定义Java代码,在service方法中。service方法可以定义什么,脚本中就可以定义什么。<%! 代码 %> 定义Java代码,在jsp转换后的java类的成员位置<%= 代码 %> 定义的Java代码,一般用作输出。可以将定义的Java变量的值输出到页面上<%@ 指令名称 属性1=属性值1 属性2=属性值2 ... %> 指令名称的分类: page : 用于配置JSP页面的 <%@ page contentType="text/html;charset=UTF-8" language="java" %> contentType:等同于response.setContentType(); 设置响应体的mime类型以及字符集设置当前jsp页面的编码,如果使用非高级IDE编写则需指定怕个Encoding属性设置当前页面的字符集 import:用于导入Java的包errorPage:当前页面发生异常后,会自动的跳转到指定的错误页面isErrorPage:标识当前页面是否为错误界面 true:是,可以使用内置对象exceptionfalse:否,不可以使用内置对象exception taglib : 导入资源 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> JSTL标签库 include : 导入页面包含的资源文件进页面中 <%@ include file="top.jsp" %> <%%>与<%!%>位置的区别: public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent, org.apache.jasper.runtime.JspSourceImports { int a = 200; //<%! int a = 200; %> int b = 100; //<%! int b = 100; %> // JSP中的部分内置对象 final javax.servlet.jsp.PageContext pageContext; javax.servlet.http.HttpSession session = null; final javax.servlet.ServletContext application; final javax.servlet.ServletConfig config; javax.servlet.jsp.JspWriter out = null; final java.lang.Object page = this; javax.servlet.jsp.JspWriter _jspx_out = null; javax.servlet.jsp.PageContext _jspx_page_context = null; response.setContentType("text/html;charset=UTF-8"); //<%@ page contentType="text/html;charset=UTF-8" language="java" %> int i = 10; //<% int i = 10; %> int j = 20; //<% int j = 20; %> out.print(a); //<%=a%> 下同 out.print(b); out.print(i); out.print(j); out.write("</h1>\n"); }JSP的注释
HTML注释: 只能注释html代码片段 JSp注释: <%-- --%> 可以注释JSP中的所有内容JSP的九大内置对象
在JSP中不需要创建,可以直接使用的对象具体的对象 变量名实际类型作用pageContextPageContext当前页面共享数据,还可以通过此对象获取其他八个内置对象requestHttpServletRequest一次请求访问的多个资源(转发)sessionHttpSession一次会话的多个请求间applicationServletContext所有用户间共享数据responseHttpServletResponse响应对象pageObject当前Servlet的对象(this)outJspWriter输出对象,将数据输出到页面上configServletConfigServlet的配置对象exceptionThrowable异常对象${域名称.键名}:从指定域中获取指定键的值
域名称 域名称内置对象生命周期pageScopepageContext当前页面有效requestScoperequest一次请求间有效sessionScopesession一次会话间有效applicationScopeapplication(ServletContext)整个web生命周期都有效 例如: <% request.setAttribute("name","张三"); %> <%-- 使用EL表达式获取值 --%> ${requestScope.name}${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止
获取对象、List集合、Map集合的值
对象:${域名称.键名.属性名} 本质上会调用对象相对应的getter方法 List集合:${域名称.键名[索引]} Map集合: ${域名称.键名.key名称}${域名称.键名["key名称"]} 隐式对象 EL表达式中共有11个隐式对象pageContext: 获取其他八个内置对象${pageContext.request.contextPath}: 动态获取虚拟目录Java中的for循环操作常用于:
执行重复的操作,如: for(int i = 0; i < 10; i++){ } 遍历集合容器 List<User> list = new ArrayList<>(); for(User user : list){ }JSTL的forEach实现:
执行重复操作: 属性: begin: 开始值end: 结束值var: 变量step: 步长(变量的增加长度)varStatus: 循环状态对象 index: 容器中元素的索引count: 循环次数,从1开始 遍历容器 属性: items:容器对象var: 容器中元素的临时变量varStatus: 循环状态对象 index: 容器中元素的索引count: 循环次数,从1开始 <%-- 使用JSTL执行循环操作 --%> <c:forEach begin="1" end="10" var="i" step="1"> ${i}<br> </c:forEach> <hr><%-- 使用JSTL执行遍历操作 --%> <% List<String> list = new ArrayList<>(); list.add("111"); list.add("222"); list.add("333"); list.add("444"); list.add("555"); request.setAttribute("list",list); %> <c:forEach items="${list}" var="str" varStatus="s"> ${str} <b>${s.index}</b> <i>${s.count}</i> <br> </c:forEach>