JSP
分析使用纯粹Servlet开发Web应用的缺陷
- 在Servlet中编写HTML\CSS\JS等前端代码,会存在什么问题?
- java程序中编写前端代码,编写难度大,复杂;
- java程序中编写前端代码,显然与程序的耦合度十分高;
- java程序中编写前端代码,代码非常不美观;
- java程序中编写前端代码,维护成本高,难度大。
- 如果存在一个微小的问题,只要需要对代码进行修改,就需要重新编译Java代码,生成新的class文件,打一个新的war包,重新发布。
- 那么如何去解决这个问题?
- 我们可以看到重要的是我们编写的前端代码。那么我们只需要让机器将我们编写的前端代码自动翻译生成‘Servlet这种Java程序’。然后机器在自动将Java程序编译生成class文件,然后再使用JVM调用这个class中的方法。
第一个JSP程序
我们在WEB-INF之外创建一个index.jsp文件,然后这个文件中没有任何内容。
- 将上面的项目部署之后,启动服务器,打开浏览器,访问以下地址:
http://localhost:8080/jsp/index.jsp,可以看到默认界面- 实际上访问:
index.jsp
,底层执行的是:index_jsp.class
这个Java程序,放在CATALINA_BASE/work/Catalina/localhost/war_exploded/org/apache/项目名称
- 这个
index.jsp
会被Tomcat翻译生成index_jsp.java
文件,然后tomcat服务器又会将index_jsp.java
编译生成index_jsp.class
文件 - 访问
index.jsp
,实际上执行的是index_jsp.class
中的方法。
- 实际上访问:
- JSP实际上就是一个Servlet
- index.jsp类继承HttpJspBase,而HttpJspBase类继承的是HttpServlet。所以index_jsp类就是一个Servlet类。
- jsp的生命周期与Servlet的生命周期完全相同。
- jsp文件的第一次访问是比较慢的,第二次就比较快了
- JSP既然本质上是Servlet,那么JSP与Servlet到底有什么区别
- 职责不同:
- Servlet:收集数据(Servlet的强项是逻辑处理,业务处理,然后链接数据库,获取/收集数据)
- JSP:展示数据
- 职责不同:
JSP是什么?
- JSP是一个Java程序。(但是本质还是Servlet)
- JSP(Java Server Page)是基于Java语言实现的服务器端的页面
- 每一个web容器/web服务器都会内置一个JSP翻译引擎
JSP的基础语法
- 在jsp文件中直接编写文字,都会被自动翻译到service类的service方法的out.write(“这里”);,被Java程序当作普通字符串打印输出至浏览器
- 在jsp中编写的前端代码,对于jsp来说只是一个普通的字符串。但是jsp把这个普通的字符串一旦输出到浏览器,浏览器就会对这些代码进行解释执行
- jsp的page指令,解决响应时的中文乱码问题