1.JSP内置对象
JSP中的内置对象就是服务器运行的时候预先创建好的对象,都不需要我们自己创建。
JSP的内置对象一共有9个。
名称 | 类型 | 作用 | 常用方法 |
request | javax.servlet.HttpServletRequest | 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。 | 1.获取请求行信息的相关方法 2.获取请求消息头的相关方法 3.获取请求参数 4.通过 Request 对象传递数据 参考Servlet(3)中的HttpServletRequest 接口 |
out | javax.servlet.jsp. JspWriter | 用于在Web浏览器内输出信息 | write(“”)、println(""); |
response | javax.servlet.HttpServletResponse | response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。 |
3.发送响应消息体相关的方法 参考Servlet(3)中的HttpServletResponse 接口 |
session | javax.servlet.http. HttpSession | 由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。 | 参考Servlet(4)中的HttpSession的常用方法 |
config | javax.servlet.ServletConfig | config 对象的主要作用是取得服务器的配置信息 | 参考Servlet(2)中的ServletConfig接口的常用方法 |
pageContext | javax.servlet.jsp.PageContext | pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。 | getRequest() getResponse() getSession() getOut() getPage() setAttribute(arg0, arg1, 范围) getAttribute(arg0, 范围) 范围 PageContext.APPLICATION_SCOPE PageContext.SESSION_SCOPE PageContext.REQUEST_SCOPE PageContext.PAGE_SCOPE |
page | Java.lang.Object | page 对象代表JSP本身,只有在JSP页面内才是合法的. page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。 | 参考Object类的方法 |
application | javax.servlet.ServletContext | application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。 | 参考Servlet(2)中的ServletContext接口的常用方法 |
exception | java.lang.Throwable | exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。 | 参考java.lang.Throwable/Exception类的常用方法 |
常用方法:
1.request javax.servlet.HttpServletRequest 该对象代表了客户端的请求信息
request.setCharacterEncoding("utf-8");
request.getParameter("name");
request.getRequestDispatcher("/my.html").forward(request,response)
2.response javax.servlet.HttpServletResponse response 代表的是对客户端的响应
response.setCharacterEncoding("utf-8");
PrintWriter writer= response.getWriter();
response.sendRedirect("test2.jsp");
3.out javax.servlet.jsp.JspWriter 用于在Web浏览器内输出信息
out.write("<h1>"+name+"</h1>");
4.config javax.servlet.ServletConfig config 对象的主要作用是取得服务器的配置信息
config.getInitParameter("name");
ServletContext context=config.getServletContext();
String name=config.getServletName();
类似于ServletConfig接口使用
5.session javax.servlet.http.HttpSession 由服务器自动创建的与用户请求相关的对象[会话对象]
session.setAttribute("name","zhangsan");
Object object=session.getAttribute("name");
session.removeAttribute("name");
session.invalidate();
6.exception java.lang.Throwable exception 对象的作用是显示异常信息
当前jsp页面是一个错误页面【page指令的isErrorPage="true"】
exception.printStackTrace();
7.page Java.lang.Object page 对象代表JSP本身,只有在JSP页面内才是合法的.
参考Object类的方法
8.pageContext javax.servlet.jsp.PageContext
取得任何范围的参数
PageContext.APPLICATION_SCOPE 整个应用程序
PageContext.SESSION_SCOPE 同一个会话范围
PageContext.REQUEST_SCOPE 用一个请求范围
PageContext.PAGE_SCOPE 当前页面范围
pageContext.setAttribute("name","zhangsan",PageContext.PAGE_SCOPE);
pageContext.getAttribute("name",PageContext.PAGE_SCOPE);
通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。
pageContext.getRequest();
pageContext.getResponse();
9.application javax.servlet.ServletContext
application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的 信息会在整个应用中都有效。
ServletContext接口的常用方法
2.EL表达式
格式:${表达式/变量/方法}
帮助我们去计算表达式的结果,并且直接将运算结果输出
注意:
1. 如果我们要在jsp页面中使用EL表达式语言,那么要在page指令中设置启用EL表达式【isELIgnored="false"】
2. 通过EL表达式来访问变量中保存的数据,需要将这个变量保存到 request/session/application/pageContext对象中。
调方法正确使用:
举个学生信息例子:
student.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加学生信息</title>
</head>
<body>
<form action="student" method="post">
学生编号:<input type="text" name="stuid"><br>
学生姓名:<input type="text" name="stuname"><br>
学生年龄:<input type="text" name="stuage"><br>
学生地址:<input type="text" name="stuaddress"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
StudentBean类
package com.weiwei.servlet;
public class StudentBean {
private int stuid;
private String stuname;
private int stuage;
private String stuaddress;
public int getStuid() {
return stuid;
}
public void setStuid(int stuid) {
this.stuid = stuid;
}
public String getStuname() {
return stuname;
}
public void setStuname(String stuname) {
this.stuname = stuname;
}
public int getStuage() {
return stuage;
}
public void setStuage(int stuage) {
this.stuage = stuage;
}
public String getStuaddress() {
return stuaddress;
}
public void setStuaddress(String stuaddress) {
this.stuaddress = stuaddress;
}
}
StudentServlet类
public class StudentServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
int stuid=Integer.parseInt(req.getParameter("stuid"));
String stuname = req.getParameter("stuname");
int stuage=Integer.parseInt(req.getParameter("stuage"));
String stuaddress = req.getParameter("stuaddress");
StudentBean studentBean = new StudentBean();
studentBean.setStuid(stuid);
studentBean.setStuname(stuname);
studentBean.setStuage(stuage);
studentBean.setStuaddress(stuaddress);
//传参
req.setAttribute("stuobj",studentBean);
req.getRequestDispatcher("/test2.jsp").forward(req,resp);
}
}
jsp页面
浏览器显示
3.JSTL—JSP标准标签库
core---核心标签库【经常使用】
fmt---格式化标签库
functions---函数标签库
sql---sql标签库
xml---xml的标签库
1.导入依赖包:jstl.jar 和 standard,jar
去maven中央仓库搜
2.在jsp页面中通过taglib指令导入jstl标签
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
prefix---是为使用标签库中的标签时定义的前缀名称,通过前缀名称来判断使用的标签库; prefix="c" 前缀名称就是c,c就是core标签库。
prefix="xml" 前缀名称就是xml,xml的标签库。
3.1 <c:if>标签
格式:
<c:if test="判断表达式" >
主体内容
</c:if>
判断表达式的值,如果表达式的值为 true 则执行其主体内容。
3.2 <c:forEach>标签
遍历集合【它迭代一个集合中的对象】
items | 要被循环的信息【集合/数组】 |
var | 代表当前条目的变量名称 |
public class StudentServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
StudentBean stu1=new StudentBean();
stu1.setStuid(1001);
stu1.setStuname("zhangsan");
stu1.setStuaddress("西安");
StudentBean stu2=new StudentBean();
stu2.setStuid(1002);
stu2.setStuname("lisi");
stu2.setStuaddress("北京");
StudentBean stu3=new StudentBean();
stu3.setStuid(1003);
stu3.setStuname("王五");
stu3.setStuaddress("上海");
List<StudentBean> stulist=new ArrayList<StudentBean>();
stulist.add(stu1);
stulist.add(stu2);
stulist.add(stu3);
req.setAttribute("mystulist", stulist);
req.getRequestDispatcher("/test3.jsp").forward(req, resp);
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>通过JSTL标签+EL显示表格数据</h1>
<table>
<c:forEach items="${mystulist}" var="stu">
<tr>
<td>${stu.stuid}</td>
<td>${stu.stuname}</td>
<td>${stu.stuaddress}</td>
</tr>
</c:forEach>
</table>
</body>
</html>