对于JSP原理以及源码的深入剖析与理解心得
一.什么是JSP?
JSP:Java Server Pages,这是一种动态web页面开发技术。
它使用JSP标记将java代码插入HTML页面。标签通常以<%开头,以%>结尾。
JSP的特点:
- JSP类似HTML。
JSP和HTML的区别:
-
纯HTML不能提供动态数据。
-
而我们的JSP是可以嵌入JAVA代码的,所以说可以为用户提供动态的数据。
二.JSP原理探究
对于服务器内部工作:
我们之前有写过web容器——tomact里有一个work目录。
E:\Environment\apache-tomcat-9.0.65\work
但是我们进入之后发现里面没有任何东西,那是因为我一直是使用IDEA开发项目,所以如果是使用了IDEA开发的话会在IDEA中生成一个work目录。
这里记录一下,各位的IDEA里的tomcat默认安装的位置可能不一样,我们最好去运行项目,在控制台输出里去看一下:

C:\Users\24190.SmartTomcat\xiao
如下我成功的找到了其项目存放文件目录:

进入JSP里,查看一下,我的jsp地址为:
C:\Users\24190.SmartTomcat\xiao\servletr-session-chookie\work\Catalina\localhost\servletr-session-chookie\org\apache\jsp
看到了这里可以看到,JSP文件其实变成了JAVA程序:

总结:
我们现在学的Javaweb其实无论是什么请求,都是在访问servlet。JSP最后也是转换为JAVA类来运行的。
2.1深入研究JSP源码
我们查看源码如下:发现JSP继承了应该叫做HttpJspBase的类。
class index_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent,
org.apache.jasper.runtime.JspSourceImports {
JSP初始化:
public void _jspInit() {
}
JSP销毁:
public void _jspDestroy() {
}
JSP服务——>请求和响应:
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
1.判断请求
2.分析JSP内置的一些对象:
页面的上下文对象:
final javax.servlet.jsp.PageContext pageContext;
Session对象:
javax.servlet.http.HttpSession session = null;
applicationContext对象:
final javax.servlet.ServletContext application;
config对象:
final javax.servlet.ServletConfig config;
out对象
javax.servlet.jsp.JspWriter out = null;
page,代表当前页:
final java.lang.Object page = this;
请求:HttpServletRequest request
响应:HttpServletResponse response
3.输出页面前源码之前的代码解析:
设置响应的页面类型:
response.setContentType("text/html; charset=utf-8");
下面这些对象,在上面可以找到:
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
上面的这一大堆对象可以在JSP文件里直接使用。

在JSP文件里,写JAVA代码之前,需要加<%JAVA代码这在这个里面%>。
我们在JSP文件里,写一段可以取出我们上节,学习Session写的名字。
如下:
<%
String name = "菜猪";
%>
name<%=name%>
因为<%JAVA代码这在这个里面%>,所以我在前面定义了应该name变量,把菜猪存入变量。
下面写一个name,name后面是Java代码,输出name变量的值。
我们运行项目,发现输出如下:

为了探究源码,我们再次访问完成之后,进入IDEA的项目里,查看JSP的源码:
C:\Users\24190.SmartTomcat\xiao\servletr-session-chookie\work\Catalina\localhost\servletr-session-chookie\org\apache\jsp
发现如下的JAVA,这里就很简单了:

总结:
在JSP页面里,如果是HTML代码的话就会被自动转换为JAVA代码,如下的例子:
out.write("<html>\r\n");
out.write("<body>\r\n");
但是如果是JAVA代码的话,就不会变化,会原封不动的输出,如上面那个图例的:
String name = "菜猪";
转换为这样才会输出个前端。
- 点赞
- 收藏
- 关注作者
评论(0)