JavaWeb-JSP

it2025-10-10  3


JSP


1. JSP

概念:JSP(Java Server Pages): java服务器端的界面

JSP是一个特殊的页面,底层的实现是Servlet,在JSP中既可以使用html的标签也可以定义Java代码。JSP主要用于简化书写

原理

JSP的本质就是一个Servlet

JSP脚本

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异常对象

2. EL表达式

概念:EL(Expression Language)表达式语言作用: 替换和简化jsp页面中java代码的书写语法格式:${表达式}注意: JSP默认支持EL表达式,当需要忽略EL表达式时: 设置Jsp中的page指令中: isELIgnored="true"忽略当前页面中的所有EL表达式 <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="true" %> ${表达式}:忽略当前的EL表达式 EL表达式的使用: 运算 运算符: 算数运算符: + - * /(div) %(mod)比较运算符:> < >= <= == !=逻辑运算符:&&(and) ||(or) !(not)空运算符:empty 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0${empty list}: 判断字符串、集合、数组对象是否为null或者长度为0${not empty list}:判断字符串、集合、数组对象是否不为null并且长度>0 获取值 EL表达式只能通过域对象获取值获取值的方法:

${域名称.键名}:从指定域中获取指定键的值

域名称 域名称内置对象生命周期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}: 动态获取虚拟目录

3. JSTL(c标签)

概念:JSTL(Java Server Pages Tag Library)JSP标准标签库,是由Apache组织提供的免费的JSP标签作用:简化和替换JSP页面上的代码使用步骤: 导入JSTL的相关jar包引入标签库:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 使用JSTL 常见的JSTL标签: if:相当于Java中的if语句但是没有else。 属性: text 必须属性,接受boolean表达式如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容一般情况下,test属性值会结合el表达式一起使用 如判断集合list不为空则显示语句<c:if text="${not empty list}">集合list不为空</c:if> choose:相当于Java中的switch语句 choose标签内的声明: <% request.setAttribute("number",4); %> <c:choose> <c:when test="${number == 1}">星期一</c:when> <c:when test="${number == 2}">星期二</c:when> <c:when test="${number == 3}">星期三</c:when> <c:when test="${number == 4}">星期四</c:when> <c:when test="${number == 5}">星期五</c:when> <c:when test="${number == 6}">星期六</c:when> <c:when test="${number == 7}">星期日</c:when> <c:otherwise>你的输入不正确!</c:otherwise> </c:choose> forEach:相当于Java中的for循环语句

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>
最新回复(0)