JavaWeb学习11 | jsp原理探究解析

42 阅读3分钟

1. 分析纯Servlet开发web应用的缺陷

在Servlet当中编写HTML/CSS有什么问题?
  • 编写难度大,麻烦
  • 程序耦合度高
  • 代码不美观
  • 维护成本高
    • 修改一个小小的前端代码,就需要重新编写Java代码,生成新的class文件。重新发布。
如何解决
  • Servlet(Java程序)不写了,只写Servlet中的前端代码,让机器将前端代码自动翻译成Servlet这种Java程序。

2. JSP

  • 我的第一个jsp:

    • 在WEB-INF目录之外创建一个index.jsp文件,然后这个文件没有任何内容。
  • 将上面的项目部署之后,启动服务器,打开浏览器,访问以下地址:

    • http://localhost:8080/jsp/index.jsp 展现空白
    • 实际上访问以上的:index.jsp,底层执行的是index.jsp.class这个Java程序。
    • 这个index.jsp会被Tomcat翻译成index.jsp.java文件,然后被编译成index.jsp.class.
    • 访问index.jsp,实际上执行的是index.jsp.class中的方法。
  • JSP实际上就是一个Servlet。

    • index.jsp访问的时候,会自动翻译成index.jsp.java,这个index.jsp就相当于一个类。
    • index.jsp类继承HttpJspBase,而HttpJspBase类继承的是HttpServlet。所以index.jsp类就是一个Servlet类。
    • jsp的生命周期与Servlet完全一致,完全就是一个东西,没有什么区别。
  • JSP第一次使用的时候比较慢,因为要编译

  • JSP是什么?

    • JSP是Java程序。本质是一个(Servlet)
    • JSP是:javaServlet Pages的缩写
    • Servlet是javaEE的13个子规范之一,那么JSP也是JavaEE的13个子规范之一。
    • JSP是一套规范。所有的web容器/web服务器都遵循这套规范。
  • JSP 基础语法

    • 在jsp文件中编写文字,都会自动被编译到哪里?
      • 自动编译到Servlet类中的service方法的out.print()中。
      • 在JSP中编写的HTML CSS JS代码,这些代码对于JSP来说都是普通字符串。
    • JSP中的page指令,用来解决响应时的中文乱码。
    • 怎么在JSP中编写java程序
      • 使用<%java语句%>
        • 在这个符号当中编写的是java程,被编译到Servlet类的service方法内部。
        • 在service中编写的代码自上而下顺序执行
        • service方法当中不能写静态代码块,不能写方法和定义成员变量。
        • 在同一个JSP中,<%%>可以写多个。
    • JSP输出语句

      • 怎么向浏览器上输出一个java变量。
      • <% String name="jack";out.write("name="+name);%>
      • 注意:以上代码中的out是JSP九大内置对象之一,可以直接拿来用。当然,必须在service方法内部使用。
    • 在JSP中如何编写JSP的专业注释

      • <%-- JSP专业注释,不会被编译到java源代码中--%>
    • JSP基础语法总结

      • JSP中直接编写普通字符串:翻译到service方法的out.write("这里");
      • <%%>:翻译到service方法体内部,里面是一条一条的java语句。
      • <%!%>:翻译到service方法之外。
      • <%=%>:翻译到service方法体内部,翻译为:out.print();
  • JSP和Servlet有什么区别?

    • 职责不同:
      • Servlet:收集数据,逻辑处理,业务处理,连接数据库
      • JSP:展示数据

2. 使用JSP+Servlet改造oa项目

  • 使用Servlet处理业务,收集数据,使用JSP展示数据。
  • 将之前原型中的html文件,全部修改为jsp,然后在jsp头部文件中添加page指令(指定contentType防止中文乱码)。
  • 完成所有页面的正常流转。
  • Servlet中连接数据库,查询所有部门,遍历结果集
    • 遍历结果集的过程中,去除部门编号、部门名,位置等信息,封装成java对象。
    • 将java对象存放到List集合中。
    • 将List集合存储到request域中
    • 转发forwa到jsp。
  • 在jsp中:
    • 从request域当中取出List集合。
    • 遍历List集合,取出每个部门对象,动态生成tr。
  • 思考一个问题:如果只使用JSP这一个技术,能不能开发web应用?
    • 可以,但是不建议
  • 包名为啥叫bean
    • javabean 实际上是某种规范的java类:比如:
      • 有无参数构造方法
      • 属性私有化
      • 对外提供公开的set和get方法
      • 实现java.io.Seriallzable
  • Servlet+JSP(已学完后续暂停
    • session
    • cookie
    • EL表达式
    • jstl标签
    • Filter
    • Listener