一、九大内置对象
详细可以点击
分为四大类:
- 输入输出对象:out对象、response对象、request对象
- 通信控制对象:pageContext对象、session对象、-application对象
- Servlet对象:page对象、config对象
- 错误处理对象:exception对象
out(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据;
config(ServletConfig):对应“真身”中的ServletConfig;
page(当前JSP的真身类型):当前JSP页面的“this”,即当前对象;
pageContext(PageContext):页面上下文对象,它是最后一个没讲的域对象;
exception(Throwable):只有在错误页面中可以使用这个对象;
request(HttpServletRequest):即HttpServletRequest类的对象;
response(HttpServletResponse):即HttpServletResponse类的对象;
application(ServletContext):即ServletContext类的对象;
session(HttpSession):即HttpSession类的对象,不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@page session=”false”%>,说明这个页面不能使用session。
举例:学院注册
reginput.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>学员注册</title>
<meta name="author" content="dandan的博客">
<style>
.txtBox{
padding: 3px;
width: 300px;
font-size: 16px;
}
</style>
</head>
<body>
<div align="center">请输入注册信息
<form name="form1" method="post" action="reginfo.jsp">
<table border="0" align="center">
<tr>
<td>用户姓名:</td>
<td><input type="text" name="name" class="txtBox" /></td>
</tr>
<tr>
<td>博客地址:</td>
<td><input type="text" name="blog" class="txtBox"/></td>
</tr>
<tr>
<td>备注信息:</td>
<td><input type="text" name="remark" class="txtBox"/></td>
</tr>
<tr>
<td>兴趣爱好:</td>
<td>
<%--多选框--%>
<input type="checkbox" name="interests" value="足球" />足球
<input type="checkbox" name="interests" value="篮球" />篮球
<input type="checkbox" name="interests" value="羽毛球" />羽毛球
<input type="checkbox" name="interests" value="乒乓球" />乒乓球
</td>
</tr>
<!-- 以下是提交、取消按钮 -->
<tr>
<td>
<input type="submit" value="提交" />
</td>
<td>
<input type="reset" value="取消" />
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
reginfo.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8"); //设置请求编码
String name = request.getParameter("name"); //获取用户名
String blog = request.getParameter("blog"); //获取博客地址
String remark = request.getParameter("remark"); //获取备注信息
//获取兴趣爱好
String[] interests = request.getParameterValues("interests");
String interStr = "";
if(interests != null)
{
for(String item : interests)
{
interStr += item + ";";
}
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册信息</title>
<meta name="author" content="pan_junbiao的博客">
</head>
<body>
用户姓名:<%= name %><br/>
博客地址:<%= blog %><br/>
备注信息:<%= remark %><br/>
兴趣爱好:<%= interStr %>
</body>
</html>
例子2:登录密码检测
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录界面</title>
</head>
<body>
<form action="check.jsp" method="post">
用户名:<input type="text" name="userName" value="userName" ><br>
密码:<input type="password" name="password" value="2233"><br>
<input type="submit" name="submit" value="登录">
</form>
</body>
</html>
check.jsp
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2020/2/11
Time: 17:58
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--判断密码--%>
<%
String userName = request.getParameter("userName");
String password = request.getParameter("password");
if(userName.equals("admin")&&password.equals("123456")){
out.print("恭喜!登录成功");
}else{
response.sendRedirect("error.jsp");
}
%>
</body>
</html>
error.jsp
<%--5s后自动刷新到登录页面--%>
<%
response.setHeader("refresh","5;url=login.jsp");
%>
用户名或者密码有误,请重新输入!!
二、四大作用域
page里的变量没法从一个jsp跳转到另外的jsp。只能在当前页面。
request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的!request里的变量可以跨越forward前后的两页。
session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车;
application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如:聊天数据;
三、JSP、JSTL标签
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
核心标签是最常用的 JSTL标签。引用核心标签库的语法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:if> 标签:用于选择语句
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>c:if 标签实例</title>
</head>
<body>
<c:set var="salary" scope="session" value="${1000}"/>
<c:if test="${salary > 2000}">
<p>我的工资为: <c:out value="${salary}"/><p>
</c:if>
<c:if test="${salary<2000}">
<c:out value="工资太低"/>
</c:if>
</body>
</html>
结果为:工资太低
c:set标签: 保存数据
<c:set var="salary" scope="session" value="${1000}"/>
<c:out value="${salary}"/>
结果为:1000
<c:choose>标签:与Java switch语句的功能一样,用于在众多选项中做出选择。
switch语句中有case,而<c:choose>标签中对应有<c:when>,switch语句中有default,而<c:choose>标签中有<c:otherwise>。
<c:set var="salary" scope="session" value="${2000}"/>
<p> 你的工资为 <c:out value="${salary}"/> </p>
<c:choose>
<c:when test="${salary<=0}">
一毛也没有
</c:when>
<c:when test="${salary>1000}">
不错的薪水
</c:when>
<c:otherwise>
一般
</c:otherwise>
</c:choose>
注意
项目要导包,建立以下依赖:
<!-- JSTL表达式的依赖 -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- standard标签库 -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>