JSP
在传统HTML文件中加入java程序片段,就构成了JSP页面
<!-- java语言 -->
<%
%>
<!-- 表达式 -->
<%= %>
JSP指令元素:
- page指令
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- include指令
<%@include file="index.jsp" %>
- taglib指令
导入标签库
JSP动作元素:
<!-- 动态包含 各自编译 -->
<jsp:include page="hello.jsp">
<jsp:param value="xiaobai" name="name"/> <!-- 不能单独使用 -->
</jsp:include>
<jsp:forward page="error.jsp"></jsp:forward>
<!-- 创建对象 调用默认构造方法 (必须要含有默认构造方法)-->
<jsp:useBean id="person" class="com.java.Person"></jsp:useBean>
<!-- 设置对象的属性值 -->
<jsp:setProperty property="name" name="person" value="小白"/>
<jsp:setProperty property="age" name="person" value="18"/>
<!-- 获取对象的属性值 -->
<jsp:getProperty property="name" name="person"/>
<jsp:getProperty property="age" name="person"/>
JSP内置对象:
九大内置对象:out、request、response、session、pageContext、application、config、page、exception
- out
描述:想客户端输出数据作用于:page重要方法:print() println() write()
<%
out.write("<h1>您好</h1>");
out.print("<h1>您好</h1>");
out.println("<h1>您好</h1>");
%>
- request
描述:来自客户端的请求经Servlet容器处理后由request对象进行封装作用域:request重要方法:
<%
request.getParameter(key); //获取提交表单数据
request.getParameterValues(key); //获取提交表单的一组数据
request.getRequestDispatcher("list.jsp").forward(request,response); //转发
request.getAttribute(); //获取请求对象属性
request.setAttribute(); //设置请求对象属性
request.setCharacterEncoding("UTF-8"); //对请求数据重新编码,请求必须为POST转台才有效
%>
- response
描述:它封闭了JSP的响应,然后被发送到客户端以响应客户的请求作用域:page重要方法:
response.sendRedirect("页面"); //页面跳转重定向 不带参数
request.setCharacterEncoding("UTF-8"); //设置响应编码
- session
描述:表示一个会话,用来存储用户信息。作用域:session重要方法:
<%
session.getId(); //取得session的id
session.isNew(); //判断session是否是新建
session.setAttribute(); //在会话中设置一个属性
session.getAttributeNames(); //得到会话中的属性
session.removeAttribute(); //删除会话中的属性
session.setMaxInactiveInterval(1000*60*30); //设置会话失效时间
session.invalidate(); //初始化当前会话
%>
<!-- 设置session有效时间 -->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
- pageContext
描述:本JSP的页面上下文。作用域:page
- application
描述:从servlet配置对象获取得的servlet上下文作用域:application (作用域最大)
- config
描述:本JSP的ServletConfig作用域:page
- page
描述:实现处理本页当前请求的类的实例,转换后的Servlet类本身作用域:page
- exception
描述:本JSP页面的异常对象作用域:page
JSP常见错误状态码:
403:禁止访问。比如IP地址被拒绝,站点访问被拒绝。404:找不到。没有找到目录或文件。500:服务器由于遇到错误而不能完成该请求。
<!-- 错误信息页面 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%>
<!-- 如果页面发生错误则跳转到error.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="error.jsp"%>
表单参数传递
- get请求:
显示请求方式,在URL显示,相对快,安全低,请求数据大小不能超过4KTomcat编码: server.xml<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
- post请求:
隐式请求,不在URL显示,相对慢,安全高
EL表达式
目的:为了使JSP写起来更加简单
${sessionScope.user.name}
${sessionScope.user["name"]}
JSTL标签库
全名JavaServer Pages Standard Tag Library 取代页面上的嵌入Java程序的做法。
jstl.jar
standard.jar
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%-- 输出标签 --%>
<c:out value="${name}"></c:out>
<%-- 定义变量--%>
<c:set var="age" value="23"></c:set>
${age}
流程控制
<%
request.setAttribute("name","哇哈哈哈哈");
request.setAttribute("age","18");
%>
<%-- 流程控制 --%>
<c:if test="${not empty name}">
<c:out value="不为空"></c:out>
</c:if>
<c:choose>
<c:when test="${age<18}">
<c:out value="未成年"></c:out>
</c:when>
<c:when test="${age>18}">
<c:out value="已成年"></c:out>
</c:when>
<c:otherwise>
<c:out value="18岁"></c:out>
</c:otherwise>
</c:choose>
迭代操作
<%
List<User> users = new ArrayList<User>();
User u1 = new User("小白","不定",18);
User u2 = new User("黑黑","男",20);
User u3 = new User("宏红","女",16);
User u4 = new User("君君","男",30);
users.add(u1);
users.add(u2);
users.add(u3);
users.add(u4);
request.setAttribute("userList",users);
%>
<table border="1">
<tr>
<th>序号</th>
<th>年龄</th>
<th>性别</th>
<th>年龄</th>
</tr>
<!--
varStatus属性状态:
index 索引从0开始
count 从1开始,当前遍历次数
current 当前正在迭代的对象
first 是否第一个
last 是否最后一个
-->
<c:forEach items="${userList}" var="user" varStatus="status">
<tr>
<td>${status.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.sex}</td>
</tr>
</c:forEach>
</table>
<c:set var="likes" value="吃饭,唱歌,泡牛"></c:set>
<c:forTokens items="${likes}" delims="," var="val">
${val}
</c:forTokens>