发表于: 2017-09-27 22:28:16
1 818
一、今日完成
今天整理和讲解小课堂知识点:什么是JSP?
1.背景介绍
Java Server pages是一种帮助软件开发人员根据HTML、XML或者其他文档类型来创建动态WEB页面的技术,由Sun Microsystems于1999年发布;目前最新版本是2.3,符合JSR245标准。JSP类似PHP(Personal Home Page)和ASP(Active Server Pages),但是它使用Java语言编写。
部署和运行JSP需要一台安装servlet container的可兼容的web服务器,常用的servlet container包括Apache Tomcat、Jetty和Resin等。
2.知识剖析
2.1.JSP的工作原理
当客户端浏览器向服务器请求一个 JSP 页面时,服务器收到该请求后,首先检查所请求的这个JSP 文件内容 ( 代码 ) 是否已经被更新,或者是否该JSP 文件创建后的第一次被访问;如果是,那么这个 JSP 文件就会在服务器端的 JSP 引擎作用下转化为一个 Servlet 类的 Java 源代码文件。紧接着,这个 Servlet 类会在 Java 编译器的作用下被编译成一个字节码文件,并装载到JVM解释执行。剩下的就等同于 Servlet 的处理过程了。
如果被请求的 JSP 文件内容 ( 代码 ) 没有被修改,那么它的处理过程也等同于一个 Servlet 的处理过程。即直接由服务器检索出与之对应的 Servlet 实例来处理。
需要注意的是,JSP 文件不是在服务器启动的时候转换成 Servlet 类的。而是在被客户端访问的时候才可能发生转换的 ( 如 JSP 文件内容没有被更新等,就不再发生 Servlet 转换 )。
就 Tomcat 而言,打开目录%Tomcat% \work\Catalina\localhost\project name /%然后会看到里面有 3个子目录:org/apache/jsp,若没有这 3 个目录,说明项目的 JSP 文件还没有被访问过;在jsp 目录下,会看到一些 *_jsp.java 和 *_jsp.class 文件,这就是 JSP 文件被转换成Servlet 类的源文件和字节码文件了。
2.2JSP的特点
(1)JSP 作为Java 技术家族的一部分,继承了Java 的“ Write once ,Run anywhere”的特点。
(2)可重用组件技术。JSP 可以通过JavaBean、EnterpriseBean 等组件技术来封装较为复杂的应用,开发人员可以共享已经开发完成的组件。
(3)标记化页面开发。JSP 将许多常用功能封装起来,以XML 标记的形式展现出来,降低了JSP 的开发难度。此外,标记化的JSP 应用,形式和内容相分离,使得JSP 页面结构更加清晰,有助于日后的维护。
(4)JSP本身具有丰富的功能,容易整合到Spring MVC等企业级框架中。
3.常见问题
JSP源文件的保存方式是基于字节流的, JSP编译成class文件过程中,有时候出现乱码,如何解决?
4.解决方案
1.没有在页面里指定使用的字符集编码,JSP页面中出现了中文字符,而默认的ISO-8859-1字符集中无中文字符,在JSP页面头部作如下声明,即可
<%@ page contentType="text/html; charset=utf-8"%>
2. 编码字符集设置不一致导致乱码,
<%@ page language="java" pageEncoding="utf-8"%>指定jsp文件的存储格式。
<%@ page contentType="text/html;charset= utf-8"%>指定JSP文件的解码格式。
<meta http-equiv="Content-Type" content="text/html charset=utf-8">为控制浏览器的解码方式。
前两处必须保持一致,且指定支持中文的字符集。
3. 数据库连接出现乱码
在数据库连接字符串中加入编码字符集
JdbcUrl=jdbc:mysql://localhost:3306/fortask?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
然后在JSP头部声明
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
5.代码实战
<%--形如 “<%@ %>”的标记被称为JSP指令,其作用是设定页面级的指令信息、引用
其他外部文件或者定制标记库,它会随JSP页面编译成Servlet,然后由JSP引擎负责
处理。--%>
<!--定义了JSP语言的类型为Java,并且引入了该页面操作所需要的java.util.Calendar类。-->
<%@ page language="java" import="java.util.*" %>
<%@ page contentType="text/html;charset=GB2312" %>
<html>
<head>
<title>
第一个JSP 实例
</title>
</head>
<body>
<h1>第一个JSP 实例</h1>
<%--形如XML标记的部分称为JSP动作(也称JSP行为),它们通常封装了一些常用的功
能。JSP动作利用类似XML的语法来管理各种JavaBean组件。--%>
<jsp:useBean id="clock" class="mycalendar.BaseCalendar" /> <%--用于初始化该JSP页面中需要用到的JavaBean--%>
<ul>
<%--形如“<%= %>”的内容称为JSP表达式,由变量和常量组成。它通常包含了来自
Web服务器端的数据--%>
<li>日期: <%= clock.getDate() %>
<li>年份: <%= clock.getYear() %>
</ul>
<%-- 计算当前时间为 AM 或 PM --%>
<%--形如“<%! %>”的部分是JSP声明,它和Java中的声明类似,都是用于定义变量以
便在随后的程序中使用。--%>
<%! int time = Calendar.getInstance().get(Calendar.AM_PM); %>
<%--形如“<% %>”的部分被称为程序段(Scriptlet),通常是标准的Java代码,在运行
后可以自动转化成字符串,然后插入到所在JSP页面中的位置显示--%>
<%
if (time == Calendar.AM) {
%>
早上好
<%
}
else {
%>
下午好
<%
}
%>
<!--在JSP文件中包含了一个HTML文件,该HTML文件中的所有内容都会在JSP页面中显示-->
<%@ include file="copyright.html" %>
</body>
</html>
形如“<%-- --%>”的部分被称为注释。JSP中的注释和HTML类似,在被JSP引擎
执行时,它会被剥去,也就是说JSP注释中的内容并不会在客户端浏览器中显示。
与HTML注释不同的是,HTML注释位于“<!-- -->”之间,而JSP注释位于“<%--
--%>”之间。
6.扩展思考
JSP 本质是一个 Servlet,它的运行也需要容器的支持。在 JSP 和 Servlet 文件中都可以编写 Java 和 HTML 代码,不同的是,Servlet 虽然也可以动态的生成页面内容,但更加偏向于逻辑的控制。JSP 最终被转换成 Servlet 在 jvm 中解释执行,在 JSP 中虽然也可以编写 Java 代码,但它更加偏向于页面视图的展现。
在 MVC 架构模式中,就 JSP 和 Servlet 而言,C 通常由 Servlet 充当,V 通常由 JSP 来充当。
7.参考资料
1.维基百科:JavaServer Pages
2. 博客:JSP/Servlet 工作原理
3.博客:解决JSP中文乱码问题
4.JSP 应用开发技术,贾素玲 王强 张成 编著,清华大学出版社
二、明日计划
把任务四的代码功能完善,达到通过审核的目的。
三、遇到问题
无。
四、收获
以上。
评论