在idea中启动的tomcat服务器
通过昨天的学习,其实我们能够发现,在idea中,当我们启动服务器时,它会自己拷贝一个类似于tomcat副本的文件,这一点可以通过查看server的output控制台中的信息看出:
Using CATALINA_BASE: "C:\Users\ASUS\.IntelliJIdea2019.1\system\tomcat\Tomcat_9_0_24_20190917servlet01"
Using CATALINA_HOME: "D:\newre_apache_tomcat\apache-tomcat-9.0.24"
Using CATALINA_TMPDIR: "D:\newre_apache_tomcat\apache-tomcat-9.0.24\temp"
Using JRE_HOME: "D:\newre_jdk11.0.3"
Using CLASSPATH: "D:\newre_apache_tomcat\apache-tomcat-9.0.24\bin\bootstrap.jar;D:\newre_apache_tomcat\apache-tomcat-9.0.24\bin\tomcat-juli.jar"
第一行是生成项目的路径;第二行是tomcat的安装目录;第三行是tomcat的临时文件区目录,第四个是Java虚拟机环境目录,最后一行,则是一个类似于环境变量的东西。
JSP是一种特殊的servlet,与传统的直接用Java编写的servlet相比,它需要额外有一个转换成Java文件的过程,但是,它改变了传统servlet在Java中插入html的特点,变成了在html中插入Java的形式。
JSP加载流程
当客户端想要加载一个JSP页面时,并不能直接通过打开网站的方式加载,而是必须要经过JSP引擎的处理,而JSP引擎,则是位于服务器当中(tomcat服务器),服务器启动,JSP引擎启动,此时才能根据请求对JSP页面进行处理,将其转化成Java文件,经过编译后,变成可执行的字节码文件,此时,我们看到的页面就是被转化后的了。
JSP所对应的Java文件位于控制台中的CATALINA_BASE路径下的work\Catalina\localhost\ROOT\org\apache\jsp文件夹中,当打开JSP页面时,JSP引擎就会在此处加载出一个Java文件,以及一个.class文件,可以对比JSP文件与Java文件,可以看到其中的某一句都有对应关系,在之后的学习中,可以通过对比得出其中的转换规则。
JSP元素
HTML标记
JSP中的HTML标记和html文件书写时的标记一样,在此不多说。
注释
在JSP中能够体现出三种注释:
- JSP注释:<%--jsp注释--%>,通过查看对应Java文件可以看出此注释不会在源码中体现
- HTML注释:<!--html注释-->,通过查看对应Java文件可以看出此注释是html的一部分,所以实际上也是页面的一部分
- JSP脚本注释(Java注释):与Java相同,能够写单行或多行注释。(//单行注释;/*多行注释*/)
变量及方法声明
格式:<%!变量及方法声明%>
查看对应Java文件,此句声明的变量属于成员变量,方法属于成员方法(比如在操作中变量值改变,那么意味着在此刷新时就成了变了的值)
代码片
格式:<%代码片%>
里面可以进行变量声明、代码编写,但是不能进行方法声明。这能够通过查看Java文件找出原因:代码片中的内容位于_jspService方法中,方法不能嵌套方法。
但是能够轻易想到,我们可以通过封装类(方法内部类),调用类中方法,达到间接封装方法的目的(但是实际中应该不用这么做)。
表达式
格式:<%=表达式%>
它的特点就是,最多只有单句代码(而且不能有分号)。
如果里面是方法,那么这个方法必须要有返回值,如果里面是对象,那么默认调用对象的toString方法(基本数据类型直接输出)。
此外,还有一点就是,此处不能写成null,否则会报错。
指令
格式:<%@指令元素内容%>
指令元素共有三种,可以通过一个xsd文件找见详细内容,部分内容如下图:
在Java中,它的体现是一个方法的设置与变量的设置。
九大内置对象(隐含对象)
- page:表示当前JSP页面,指代当前JSP编译后的Servlet对象本身,也就是this。
- config:表示Servlet配置,与Servlet对象中的ServerConfig对象一样,能够调用ServerConfig对象的方法(省去了在Servlet中需要getServletConfig的步骤)。
- application:标识web应用上下文,类型是ServletContext。
- request:请求对象,HttpServletRequest对象。
- response:响应对象,HttpServletResponse对象。
- session:表示一次会话,在服务器端记录用户状态信息的技术。HttpSession对象。
- exception:表示发生异常的对象。在默认情况下,由于page指令中的isErrorPage属性默认值为false,所以默认不会产生此对象,但是设置之后可以看到,这个对象是Exception类型的。
- out:输出响应体,JspWriter对象。
- pageContext:表示jsp页面上下文(jsp管理者),PageContext对象。
至于九大内置对象的详细内容,在此不多做介绍,只是简单提一句:1到7个内置对象在servlet中都有体现,但是8和9是jsp独有的,分别体现了在页面输出文本,管理jsp页面的作用。
总结
通过学习JSP,可以很明显地感觉到它和Java的关系是一一对应的,它里面的内容,除了jsp注释外会被一句不差地转化成适合加载成网页的格式,在此过程中,它只有利用服务器中的JSP引擎(在此处是tomcat服务器),才能够正常地在网站中显示出来内容。