一、JSP内置对象
内置对象:
- 由JSP规范提供,不用编写者实例化。
- 通过Web容器实现和管理
- 所有JSP页面均可使用
- 只有在JSP程序段或JSP表达式 (
<%= %>
或<% %>
) 中
1. request 对象
- 类型:
javax.servlet.HttpServletRequest
类型对象 - 作用:在JSP文件运行时读取请求包信息,与Servlet在请求转发过程中实现数据共享
- 作用域:只在一次请求中有效,服务器跳转之后有效。
- 常用方法有:
1. getAttribute() 返回指定属性值
2. getAttributeNames() 返回所有可用属性名的枚举
3. getCharacterEncoding() 返回字符编码方式
4. getParameter() 返回指定参数的参数值
5. getParameterNames() 返回可用参数名的枚举
6. getProtocol() 返回请求用的协议类型及版本号
7. setAttribute() 设置属性的属性值
2. response 对象
- 类型:
javax.servlet.HttpServletResponse
类型对象 - 作用:代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端
- 作用域:只在JSP页面中有效
- 常用方法:
1. getWriter() 返回可以向客户端输出字符的一个对象
2. setContentType(String type) 设置响应的MIME类型
3. sendRedirect(location) 重新定向客户端的请求
3. session 对象
- 类型:
javax.servlet.http.HttpSession
类型对象 - 作用:服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态,添加共享数据,读取共享数据。
- 作用域:在一次会话中有效。服务器跳转、客户端跳转都有效。 网页关闭重新打开无效。
- 常用方法:
1. getAttribute() 获取指定共享数据的属性值
2. setAttribute() 设置共享数据的属性值
4. application 对象
- 类型:
javax.servlet.ServletContext
类型对象 - 作用:表示所有用户的共享信息,同一个网站中Servlet与JSP,都可以通过当前网站的全局作用域对象实现数据共享
- 作用域:在整个服务器上保存,所有用户都可使用。 重启服务器后无效
- 常用方法:
1 .getAttribute() 返回给定名的属性值
2. setAttribute() 设定属性的属性值
3. removeAttribute() 删除一属性及其属性值
4. getServlet() 返回指定名的Servlet
5. getRequestDispatcher() 返回指定资源的RequestDispatcher对象
6. getResource() 返回指定资源(文件及目录)的URL路径
二、JSP与Servlet联合调用案例
开发步骤
- Servlet 与 JSP 分工
- Servlet : 负责处理业务并得到处理结果
- JSP :不负责业务处理,主要任务将Servlet中处理结果写入到响应体
- Servlet 与 JSP之间调用关系
- Servlet工作完毕后,一般通过请求转发方式 向Tomcat申请调用JSP
- Servlet 与 JSP 之间如何实现数据共享
-
Servlet将处理结果添加到请求作用域对象
-
JSP文件在运行时从请求作用域对象得到处理结果
实例
创建学生类,在Servlet下创建学生对象,并在JSP中将学生对象信息输出到网页中
package Entity;
public class Student {
int stuId;
String name;
public Student(int stuId, String name) {
this.stuId = stuId;
this.name = name;
}
public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package Controller;
import Entity.Student;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@WebServlet(name = "MyServlet", value = "/MyServlet")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Student s1 = new Student(1, "Mike");;
Student s2 = new Student(2, "Helen");
List stuList = new ArrayList();
stuList.add(s1);
stuList.add(s2);
request.setAttribute("list", stuList);
request.getRequestDispatcher("/StuInformation.jsp").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
<%@ page import="Entity.Student" %>
<%@ page import="java.util.List" %><%--
Created by IntelliJ IDEA.
User: 繁花fancy
Date: 2021/11/11
Time: 16:36
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
List<Student> stuList = (List)request.getAttribute("list");
%>
<table border="2", align="center">
<tr>
<td>学生编号</td>
<td>学生姓名</td>
</tr>
<%
for(Student stu:stuList) {
%>
<tr>
<td><%=stu.getStuId()%></td>
<td><%=stu.getName()%></td>
</tr>
<%
}
%>
</table>