• JSP规范:来自于JavaEE规范中的一种;
    • JSP规范制定了如何开发JSP文件代替响应对象将处理结果写入响应体中的开发流程;
    • JSP规范制定了Http服务器应该如何调用管理JSP文件;
    • _<%...%>_:执行标签,在此标签内的命令才能被当作Java命令;
    • <%=...%>:输出标签,在此标签内的命令会被输出到页面中显示; ```jsx <%@ page import=”com.jiangzhiyan.entity.Student” %> <%@ page import=”java.util.List” %> <%@ page import=”java.util.ArrayList” %> <%@ page contentType=”text/html;charset=UTF-8” language=”java” %>

    <% Student student1 = new Student(101,”张三”); Student student2 = new Student(102,”李四”); Student student3 = new Student(103,”王五”); List studentList = new ArrayList<>(); studentList.add(student1); studentList.add(student2); studentList.add(student3); %>

    <% for (Student student : studentList) { %> <% } %>
    学生编号 学生姓名
    <%=student.getId()%> <%=student.getName()%>

    1. - JSP中的内置对象:
    2. - 1)request对象(请求作用域对象):HttpServletRequest类型;
    3. - 作用:在JSP文件运行时读取请求协议包中信息;Servlet在请求转发时实现数据共享;
    4. ```jsx
    5. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    6. <!--
    7. JSP文件内置对象:request
    8. 类型:HttpServletRequest类型;
    9. 作用:
    10. 在JSP文件运行时读取请求协议包中信息;
    11. Servlet在请求转发时实现数据共享
    12. -->
    13. <!--
    14. 浏览器发送请求:
    15. http://localhost:8080/017web/request.jsp?userName=zhangsan&password=123456
    16. -->
    17. <%
    18. //JSP运行时,借助内置request对象读取请求协议包中信息
    19. String userName = request.getParameter("userName");
    20. String password = request.getParameter("password");
    21. %>
    22. 用户姓名:<%=userName%>
    23. <br>
    24. 用户密码:<%=password%>
    • 2)session对象(会话作用域对象):HttpSession类型;
      • 作用:JSP文件在运行时,可以通过session来增/删/改/查当前用户的共享数据; ```jsx <%@ page contentType=”text/html;charset=UTF-8” language=”java” %>

    <% session.setAttribute(“key1”,”HelloWorld”);//增 session.setAttribute(“key2”,100);//增 session.removeAttribute(“key2”);//删 session.setAttribute(“key1”,”Hello JSP”);//改 String value1 = (String) session.getAttribute(“key1”);//查,或者在另一个jsp文件中查 %> 共享数据为:<%=”key1:”+value1%>

    1. - 3)application对象(全局作用域对象):ServletContext类型;
    2. - 作用:JSP文件运行时,可以通过application来操作当前网站application中的共享数据;
    3. ```jsx
    4. <%@ page import="java.util.Date" %>
    5. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    6. <!--
    7. ServletContext application:全局作用域对象
    8. 同一个网站中的Servlet和JSP,都可以通过当前网站的全局作用域对象实现数据共享
    9. -->
    10. <%
    11. application.setAttribute("key1",new Date());
    12. %>
    • Servlet与JSP的分工:
      • Servlet:负责处理业务并得到处理结果;
      • JSP:不负责处理业务,主要任务是将Servlet的处理结果写入响应体中;
    • Servlet工作完毕后,一般通过请求转发方式向TomCat申请调用JSP; ```java package com.jiangzhiyan.controller;

    import com.jiangzhiyan.entity.Student;

    import javax.servlet.; import javax.servlet.http.; import java.io.IOException; import java.util.ArrayList; import java.util.List;

    public class OneServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //待共享的数据(假定) Student s1 = new Student(101,”张三”); Student s2 = new Student(102,”李四”); Student s3 = new Student(103,”王五”); //使用List集合存放共享数据 List studentList = new ArrayList<>(); studentList.add(s1); studentList.add(s2); studentList.add(s3); //将共享数据添加到请求作用域对象中 request.setAttribute(“key1”,studentList); //请求转发给request.jsp文件做响应处理 request.getRequestDispatcher(“/request.jsp”).forward(request,response); } }

    1. ```jsx
    2. <%@ page import="com.jiangzhiyan.entity.Student" %>
    3. <%@ page import="java.util.List" %>
    4. <%@ page import="java.util.Iterator" %>
    5. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    6. <table align="center" border="1px" width="12%">
    7. <tr align="center">
    8. <th>学生编号</th>
    9. <th>学生姓名</th>
    10. </tr>
    11. <%
    12. //获取OneServlet共享的数据
    13. List<Student> studentList = (List<Student>) request.getAttribute("key1");
    14. //迭代获取共享数据并向页面输出数据
    15. Iterator<Student> iterator= studentList.iterator();
    16. while(iterator.hasNext()){
    17. Student student = iterator.next();
    18. %>
    19. <tr align="center">
    20. <td><%=student.getId()%></td>
    21. <td><%=student.getName()%></td>
    22. <tr>
    23. <%
    24. }
    25. %>
    26. </table>
    • Http服务器调用JSP文件步骤:
      • 1)Http服务器将JSP文件内容编辑为一个Servlet接口实现类(.java);
      • 2)Http服务器将Servlet接口实现类编译为class文件(.class);
      • 3)Http服务器负责创建这个class的实例对象,这个实例对象就是Servlet实例对象;
      • 4)Http服务器通过Servlet实例对象调用_jspService方法,将JSP文件内容写入到响应体中;