1. JSP:
      1. 指令
      2. 注释
      3. 内置对象
    2. MVC开发模式
    3. EL表达式
    4. JSTL标签
    5. 三层架构

    JSP

    • 指令:用于配置JSP页面
      • 导包导库等等
    • 注释:
    • 内置对象, 9个

      • 变量名 真实类型 作用
        pageContext PageContext 当前页面共享数据,还可以获取其他八个内置对象
        request HttpServletRequest 一次请求访问的多个资源(转发)
        session HttpSession 一次会话的多个请求间
        application ServletContext 所有用户间共享数据
        response HttpServletResponse 响应对象
        page Object 当前页面(Servlet)的对象 this
        out JspWriter 输出对象,数据输出到页面上
        config ServletConfig Servlet的配置对象
        * exception Throwable 异常对象
    • 为什么jsp中能直接使用这些对象,因为jsp 本质就是一个servlet

    • 找到项目在Tomcat中的-work目录:(out是项目部署目录)
      • Using CATALINA_BASE: “C:\Users\quan\AppData\Local\JetBrains\IntelliJIdea2020
      • image.png
      • 访问这个jsp页面会编译出来.class 和 .java 文件,里面有这9个内置对象
      • image.png ```java /*
        • Generated by the Jasper component of Apache Tomcat
        • Version: Apache Tomcat/8.5.70
        • Generated at: 2021-09-25 09:19:38 UTC
        • Note: The last modified time of this file was set to
        • the last modified time of the source file after
        • generation to assist with modification tracking. */ package org.apache.jsp;

    import javax.servlet.; import javax.servlet.http.; import javax.servlet.jsp.*;

    public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent, org.apache.jasper.runtime.JspSourceImports {

    private static final javax.servlet.jsp.JspFactory _jspxFactory = javax.servlet.jsp.JspFactory.getDefaultFactory();

    private static java.util.Map _jspx_dependants;

    private static final java.util.Set _jspx_imports_packages;

    private static final java.util.Set _jspx_imports_classes;

    static { _jspx_imports_packages = new java.util.HashSet<>(); _jspx_imports_packages.add(“javax.servlet”); _jspx_imports_packages.add(“javax.servlet.http”); _jspx_imports_packages.add(“javax.servlet.jsp”); _jspx_imports_classes = null; }

    private volatile javax.el.ExpressionFactory _el_expressionfactory; private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;

    public java.util.Map getDependants() { return _jspx_dependants; }

    public java.util.Set getPackageImports() { return _jspx_imports_packages; }

    public java.util.Set getClassImports() { return _jspx_imports_classes; }

    public javax.el.ExpressionFactory _jsp_getExpressionFactory() { if (_el_expressionfactory == null) { synchronized (this) { if (_el_expressionfactory == null) { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); } } } return _el_expressionfactory; }

    public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() { if (_jsp_instancemanager == null) { synchronized (this) { if (_jsp_instancemanager == null) { _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig()); } } } return _jsp_instancemanager; }

    public void _jspInit() { }

    public void _jspDestroy() { }

    public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException {

    1. final java.lang.String _jspx_method = request.getMethod();
    2. if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
    3. response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 只允许 GET、POST 或 HEAD。Jasper 还允许 OPTIONS");
    4. return;
    5. }
    6. final javax.servlet.jsp.PageContext pageContext;
    7. javax.servlet.http.HttpSession session = null;
    8. final javax.servlet.ServletContext application;
    9. final javax.servlet.ServletConfig config;
    10. javax.servlet.jsp.JspWriter out = null;
    11. final java.lang.Object page = this;
    12. javax.servlet.jsp.JspWriter _jspx_out = null;
    13. javax.servlet.jsp.PageContext _jspx_page_context = null;
    14. try {
    15. response.setContentType("text/html;charset=UTF-8");
    16. pageContext = _jspxFactory.getPageContext(this, request, response,
    17. null, true, 8192, true);
    18. _jspx_page_context = pageContext;
    19. application = pageContext.getServletContext();
    20. config = pageContext.getServletConfig();
    21. session = pageContext.getSession();
    22. out = pageContext.getOut();
    23. _jspx_out = out;
    24. out.write("\n");
    25. out.write("\n");
    26. out.write("<!DOCTYPE html>\n");
    27. out.write("<html lang=\"zh-CN\">\n");
    28. out.write("<head>\n");
    29. out.write(" <meta charset=\"utf-8\"/>\n");
    30. out.write(" <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\"/>\n");
    31. out.write(" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n");
    32. out.write(" <title>首页</title>\n");
    33. out.write("\n");
    34. out.write(" <!-- 1. 导入CSS的全局样式 -->\n");
    35. out.write(" <link href=\"css/bootstrap.min.css\" rel=\"stylesheet\">\n");
    36. out.write(" <!-- 2. jQuery导入,建议使用1.9以上的版本 -->\n");
    37. out.write(" <script src=\"js/jquery-2.1.0.min.js\"></script>\n");
    38. out.write(" <!-- 3. 导入bootstrap的js文件 -->\n");
    39. out.write(" <script src=\"js/bootstrap.min.js\"></script>\n");
    40. out.write(" <script type=\"text/javascript\">\n");
    41. out.write(" </script>\n");
    42. out.write("</head>\n");
    43. out.write("<body>\n");
    44. out.write("\n");
    45. out.write("<div align=\"center\">\n");
    46. out.write(" <a\n");
    47. out.write(" href=\"");
    48. out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${pageContext.request.contextPath}", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null));
    49. out.write("/userListServlet\" style=\"text-decoration:none;font-size:33px\">查询所有用户信息\n");
    50. out.write(" </a>\n");
    51. out.write("</div>\n");
    52. out.write("\n");
    53. out.write("</body>\n");
    54. out.write("</html>\n");
    55. } catch (java.lang.Throwable t) {
    56. if (!(t instanceof javax.servlet.jsp.SkipPageException)){
    57. out = _jspx_out;
    58. if (out != null && out.getBufferSize() != 0)
    59. try {
    60. if (response.isCommitted()) {
    61. out.flush();
    62. } else {
    63. out.clearBuffer();
    64. }
    65. } catch (java.io.IOException e) {}
    66. if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
    67. else throw new ServletException(t);
    68. }
    69. } finally {
    70. _jspxFactory.releasePageContext(_jspx_page_context);
    71. }

    } }

    ``` 关于IDEA中Tomcat项目的部署多说几句:

    • 在idea中配置的tomcat,在运行时idea不会把项目放到自己的webapps路径下,而是复制三份文件到 ${user.home}/.IntelliJIdea/system/tomcat 目录(Mac)下的各自项目。

    MCV 开发模式

      1. M:Model,模型。JavaBean - Dao

        • 完成具体的业务操作,如:查询数据库,封装对象
          2. V:View,视图。JSP - Web层,界面层
          展示数据
          3. C:Controller,控制器。Servlet - Service
          获取用户的输入
          调用模型
          将数据交给视图进行展示

    三层架构

    1. 界面层(表示层):用户看的得界面。用户可以通过界面上的组件和服务器进行交互
    2. 业务逻辑层:处理业务逻辑的。
    3. 数据访问层:操作数据存储文件。data access object

    image.png
    and Demo-用户信息查询
    MyNote.jpg

    EL表达式

    1. 概念:Expression Language 表达式语言
    2. 作用:替换和简化jsp页面中java代码的编写
    3. 语法:${表达式}
    4. 使用:
      1. 运算
      2. 获取值
        1. el表达式只能从域对象中获取值
        2. 语法
          1. ${域名称.键名}:从指定域中获取指定键的值
          2. ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
          3. 获取对象、List集合、Map集合的值
            1. 对象:${域名称.键名.属性名} #属性名即:getter setter方法去掉set get ,剩余部分首字母变小写
            2. List集合:${域名称.键名[索引]}
            3. Map集合:${域名称.键名.key名称} , * ${域名称.键名[“key名称”]}
          4. 隐式对象:
            1. el表达式中有11个隐式对象 pageContex
            2. 可获取jsp其他八个内置对象

    JSTL

    • 概念:JavaServer Pages Tag Library JSP标准标签库,是由Apache组织提供的开源的免费的jsp标签 <标签>
    • 作用:用于简化和替换jsp页面上的java代码
    • 使用步骤:
      1. 导入jstl相关jar包
      2. 引入标签库:taglib指令: <%@ taglib %> #比如要JSTL标签;就像java中导包
      3. 使用标签
    • 常用JSTL 标签
      • if:相当于java代码的if语句
        • 属性:test
      • choose:相当于java代码的switch语句
      • foreach:相当于java代码的for语句