前言
我写的这个Jsp使用详解是针对已经对Servlet学习过或者了解过的新手,请大神勿喷啊,毕竟我也是个新手。
Servlet大家了解过了,那么通过Servlet开发web项目也可以,但是在Servlet中输出html代码还是有些复杂繁琐的,那么能不能直接使用html呢,最好还可以在html中直接写Java代码。这时候就用到了Jsp。
Jsp是一种Java Servlet,主要用于实现Java web应用程序的用户界面部分。Jsp的具体背景我就不细说,既然是使用详解我就不多说了。
JSP的生命周期
类似与Servlet以下是JSP的生命周期
编译阶段:
servlet容器编译servlet源文件,生成servlet类
初始化阶段:
加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法
执行阶段:
调用与JSP对应的servlet实例的服务方法
销毁阶段:
调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例
具体执行是什么样的呢?
- 创建一个比如a.jsp,被执行后会先被转译为a_jsp.java
- a_jsp.java在D:\java web\apache-tomcat-8.0.52\work\Catalina\localhost…org\apache\jsp的目录下,此时的a_jsp.java就是一个servlet,因为你会发现a_jsp.java继承了一个HttpJspBase,而HttpJspBase继承了HttpServlet。
- 编译执行a_jsp.java生成相应html
- 通过http协议把html 响应返回给浏览器
JSP首行Page指令
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.* "%>
JSP指令的基本用法格式为<%@ 指令 属性名="值"%>
contentType="text/html; charset=UTF-8"
就相当与Servlet中的
response.setContentType("text/html; charset=UTF-8");
通知浏览器以utf-8进行中文解码 如下
pageEncoding="utf-8"
而导入类就是
import="java.util.*"
如果导入多个类就是
import="java.util.*,java.io.*"
而一个指令有多个属性,这多个属性也可以分开写,例如:
<%@ page import="java.util.* "%>
JSP基础语法
- 基本的html,css,javascript等语法(这里不再详说了)
- JSP表达式
JSP脚本表达式就是用于将程序数据输出到客户端
语法:<%= 变量或表达式%>
举例:<%= new java.util.Date()%>
<%=%> 不需要分号结尾 - JSP脚本片段
JSP脚本片段用于在JSP页面中编写多行Java代码
语法:<%Java代码%>
举例:<%int a=0;out.println("<h2>a="+a+"</h2>");%>
脚本中只能出现Java代码,不能出现其他html等元素。<%%> 需要以分号结尾,和java代码一样 。而且多个脚本片段中的代码可以相互访问,就像是把所有的代码放在一个<%%> 之中 - JSP声明
JSP页面中编写的所有代码都会翻译到servlet的service方法中,而Jsp声明的java代码不会
语法:<%!Java代码%>
此方式可以用于定义JSP页面转换后的servlet成勋的静态代码块、成员变量和方法等,不建议使用,在这里也不过多详说 - JSP注释
语法:<%--注释内容 -- %>
JSP注释主要有两个作用:为代码作注释以及将某段代码注释掉
不同于 html的注释 通过jsp的注释,浏览器也看不到相应的代码,相当于在servlet中注释掉了
include使用
include有两种方式指令include和动作include
使用include:准备一个b.jsp然后在其他页面包含b.jsp即可。
- 通过指令
<%@include file="b.jsp" %>
- 通过动作
<jsp:include page="b.jsp" />
区别 :
@include :比如说b.jsp被a.jsp包含,那么b.jsp的内容会被插入到 a.jsp 转译 成的a_jsp.java中,最后只会生成一个a_jsp.java文件
而动作指令:b.jsp的内容不会被插入到 a.jsp 转译 成的a_jsp.java中,还会有一个b_jsp.java独立存在。a.java 会在服务端访问b_jsp.java,然后把返回的结果,嵌入到响应中。
@include是在转译的时候引入,是而动作指令是在请求处理阶段执行时才会转译引入,所以它们两个的不同就出现了:@include 是静态引入而动作指令还可以动态传参。
好了今天就到这了吧,改天再来继续JSP的使用详解。