一、JSP(Java server Pages)

  • 关系

    • JSP文件在容器中会转换成Servlet执行。
    • JSP是对Servlet的一种高级封装。本质还是Servlet。
  • 区别

    • 与 Servlet 相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。

创建jsp

在web目录下新建*.jsp文件(与WEB-INF平级)

jsp实现原理

Tomcat会将xxx.jsp转换成Java代码,进而编译成.class文件运行,最终将运行结果通过response响应给客户端。

jsp入门

  1. <%@ page import="java.util.Date" %><%--
  2. Created by IntelliJ IDEA.
  3. User: ZHU
  4. Date: 2022/5/11
  5. Time: 9:34
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11. <title>Title</title>
  12. </head>
  13. <body>
  14. <%-- JSP的注释 --%>
  15. <%--可以在浏览器上面显示java代码 执行结果 --%>
  16. <%-- =的意思是页面的显示 --%>
  17. <%= new Date()%>
  18. </body>
  19. </html>

入门basic

  1. <%@ page import="java.util.ArrayList" %><%--
  2. Created by IntelliJ IDEA.
  3. User: ZHU
  4. Date: 2022/5/11
  5. Time: 9:48
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11. <title>basic</title>
  12. </head>
  13. <body>
  14. <%-- 带= 在浏览器打印--%>
  15. <%=10/3%>
  16. <%-- 不带= 在控制台打印--%>
  17. <%System.out.println("hello!!!");%>
  18. <%-- 在浏览器上面显示响应 out jsp对象--%>
  19. <%out.println("奥斯卡=阿拉斯加");%>
  20. <%-- 任意的java代码都可以书写 打印在控制台--%>
  21. <%
  22. for(int i = 0;i < 5;i++){
  23. System.out.println("杨博是奥斯卡");
  24. }
  25. //java注释
  26. ArrayList<String> list = new ArrayList<>();
  27. list.add("呼");
  28. list.add("叫");
  29. list.add("博");
  30. list.add("儿");
  31. for (String s : list) {
  32. System.out.println(s);
  33. }
  34. %>
  35. </body>
  36. </html>

basic2

  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: ZHU
  4. Date: 2022/5/11
  5. Time: 10:00
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11. <title>basic2</title>
  12. </head>
  13. <body>
  14. <%-- 函数加!--%>
  15. <%!
  16. int a = 10;
  17. %>
  18. <%--在浏览器打印a--%>
  19. <%=a%>
  20. <%--定义一个方法 方法加!--%>
  21. <%!
  22. public void play(){
  23. System.out.println("玩游戏");
  24. }
  25. %>
  26. <%--调用方法play 有返回值的可以打印在浏览器,无返回值的只能打印在控制台--%>
  27. <%play();%>
  28. </body>
  29. </html>

jsp指令

<%— 指定JSP页面的解码格式 pageEncoding=”utf-8”—%>

<%— errorPage=”error.jsp” 如果这个页面有错,会跳转到error.jsp 但是url不变(相当于转发)—%>

  1. <%@ page import="java.util.ArrayList" %><%--
  2. Created by IntelliJ IDEA.
  3. User: ZHU
  4. Date: 2022/5/11
  5. Time: 10:34
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%-- 指定JSP页面的解码格式 pageEncoding="utf-8"--%>
  9. <%-- errorPage="error.jsp" 如果这个页面有错,会跳转到error.jsp 但是url不变(相当于转发)--%>
  10. <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" errorPage="error.jsp" %>
  11. <html>
  12. <head>
  13. <title>jsp指令</title>
  14. </head>
  15. <body>
  16. <%
  17. //需要导包
  18. ArrayList<Integer> Integer = new ArrayList<>();
  19. %>
  20. <%-- 让页面报错 转发error.jsp--%>
  21. <%=2/0%>
  22. </body>
  23. </html>

include指令

把head和footer中的内容 放在main.jsp

语法格式:<%@include file=”jsp文件”%>

  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: ZHU
  4. Date: 2022/5/11
  5. Time: 10:45
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11. <title>Title</title>
  12. </head>
  13. <body>
  14. <%-- include 包含--%>
  15. <%@include file="head.jsp"%>
  16. <br>
  17. 这个是主页面
  18. <br>
  19. <%@include file="footer.jsp"%>
  20. </body>
  21. </html>

include命令【用这个】

和include指令效果一样,但是这个重名会报错

语法格式:

  1. <body>
  2. <jsp:include page="head.jsp"></jsp:include>
  3. 这是主页
  4. <jsp:include page="footer.jsp"></jsp:include>
  5. </body>

动作标签

实例化对象,赋值,取值

  1. <%@ page import="com.qfedu.entity.User" %><%--
  2. Created by IntelliJ IDEA.
  3. User: ZHU
  4. Date: 2022/5/11
  5. Time: 10:54
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11. <title>Title</title>
  12. </head>
  13. <body>
  14. <%--实例化对象 第一种方法--%>
  15. <%
  16. User user = new User();
  17. user.setUser("朱志伟");
  18. user.setPassword("123456");
  19. //在控制台输出
  20. System.out.println(user.getUser());
  21. System.out.println(user.getPassword());
  22. //在浏览器上显示
  23. out.println(user.getUser());
  24. out.println(user.getPassword());
  25. %>
  26. <%-- 第二种数理化方法 动作useBean的方法--%>
  27. <%-- 以下代码相当于 User user1 = new User()--%>
  28. <%-- class 的值 包名加类名--%>
  29. <jsp:useBean id="user1" class="com.qfedu.entity.User"></jsp:useBean>
  30. <%--赋值--%>
  31. <jsp:setProperty name="user1" property="user" value="博儿"></jsp:setProperty>
  32. <%--获取值 在浏览器上打印 博儿--%>
  33. <jsp:getProperty name="user1" property="user"/>
  34. </body>
  35. </html>

转发

内置对象

  1. <%-- jsp的八大内置对象 --%>
  2. <%
  3. request.setAttribute("user","呼叫博儿");
  4. response.getWriter().append("boer");
  5. //不用获取session对象 可以直接用
  6. session.setAttribute("user","xixida");
  7. //application 相当于ServletContext 上下文对象
  8. application.setAttribute("name1","hehe");
  9. //out 内置对象 输出在浏览器上
  10. out.println("aaaaaaaaa!!!");
  11. %>

四大作用域

  1. <body>
  2. <%-- 四大作用域 就是赋值和取值的效果--%>
  3. <%
  4. pageContext.setAttribute("pageContext","张三");
  5. request.setAttribute("request","李四");
  6. session.setAttribute("session","王五");
  7. application.setAttribute("application","刘六");
  8. %>
  9. <%-- 取值 --%>
  10. <%=pageContext.getAttribute("pageContext")%>
  11. <%--在pageContext对象去取request域里面的值 不能取--%>
  12. <%=pageContext.getAttribute("request")%>
  13. <%-- 各自的域取各自的值 不可越界--%>
  14. <%=request.getAttribute("request")%>
  15. </body>

pageContext获取内置对象,对其赋值

  1. <%--pageContext 可以获取其他八个对象 写法有问题--%>
  2. <%
  3. //八大内置对象可以直接使用,为什么还要用pageContext调用呢?
  4. ServletRequest request1 = pageContext.getRequest();
  5. ServletResponse response1 = pageContext.getResponse();
  6. HttpSession session1 = pageContext.getSession();
  7. ServletContext servletContext = pageContext.getServletContext();
  8. JspWriter out1 = pageContext.getOut();
  9. %>
  10. <%-- 可以操作域对象进行赋值 --%>
  11. <%
  12. //第三个参数指定域 相当于直接 request.setAttribute("name","boer");
  13. pageContext.setAttribute("name","boer",PageContext.REQUEST_SCOPE);
  14. request.setAttribute("name1","boer1");
  15. pageContext.setAttribute("session","boer",PageContext.SESSION_SCOPE);
  16. %>
  17. <%=request.getAttribute("name")%>
  18. <%=request.getAttribute("name1")%>
  19. <%=session.getAttribute("session")%>

el 取值(数据和集合)

Expression Language

  1. <body>
  2. <%--el专门获取数据 只要在各个域中设置了值,那么就可以el表达式--%>
  3. <%
  4. request.setAttribute("req","xixi");
  5. session.setAttribute("session","hehe");
  6. session.setAttribute("req","wuhu");
  7. %>
  8. <%--el 的语法格式--%>
  9. <%-- 直接展示在浏览器上面 --%>
  10. ${requestScope.req}
  11. ${req}
  12. ${sessionScope.session}
  13. ${session}
  14. <%
  15. User user = new User();
  16. user.setUser("博儿");
  17. user.setPassword("123456");
  18. request.setAttribute("user",user);
  19. %>
  20. <br>
  21. ${user}
  22. ${user.user}
  23. ${user.password}
  24. ${requestScope.user.getPassword()}
  25. </body>