1.JSP是什么?
JSP------java server pages【java服务器页面】
运行在服务器上,包含java语言代码,动态网页就是JSP。这里的动态网页不是指网页中的元素形状/位置发生变化,而是指网页中元素的内容发生变化。
2.JSP页面中的元素
2.1静态元素
html标签-------------提供页面的显示效果
2.2 jsp指令
格式:<%@指令名称 属性1=”属性值1”......%>
作用:在jsp页面中声明的一些由浏览器执行的附加信息
2.2.1 page指令
1.contentType="text/html; charset=utf-8":设置当前jsp页面的内容类型
即当前页面文本和HTML的内容字符编码为utf-8
2.language="java" :指定语言
3.pageEncoding="utf-8":设置当前jsp页面的字符编码
除页面文本和HTML的内容,其他内容编码设置为utf-8
4.import="java.util.Date":导入java类库的依赖包【可以出现多个】
5.isELIgnored="false"---是否启用EL表达式语言 “${表达式}”,false可用,true不可以
6.isErrorPage="false"---是否是一个错误页面,如果是那么就可以使用exception的JSP内置对象
2.2.2 include指令
[包含其他的资源进入本jsp页面]---常见属性
file="被包含的文件路径":被包含进入本jsp页面的文件
问题:jsp还是要include指令或者jsp动作include,这里会有中文乱码显示的问题。
解决方式:
在web.xml配置jsp
<jsp-config>
<jsp-property-group>
<url-pattern>*.html</url-pattern>
<url-pattern>*.txt</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
2.2.3.aglib指令
在jsp页面中使用JSTL【jsp的标准标签库】标签的时候,用来导入标签库
【这个指令暂时不处理,我们在后面学习JSTL时候,会详细介绍】
2.3 Java代码片段
格式:<% java程序 %>
作用:嵌套在html中的java程序【提供动态数据】
相当于java类中的方法,里面可以有变量,方法内部类
2.4 java表达式
格式:<%= 表达式/变量/方法 %>
作用:计算某种表达式的结果,或者变量/方法的结果。动态输出结果,即调用变量或者方法
2.5 jsp声明
格式:<%! 类/变量/方法 %>
作用:在jsp页面中定义一些自己需要的java变量/方法/类
相当于java中的类,里面可以有方法,变量,类
2.6 jsp动作
格式:<jsp:动作名称 动作属性.....></jsp:动作名称>
作用:将一些常用的java程序封装,方便调用
常用的include和forward,一个是本jsp页面包含那个文件路径,一个是跳转到文件路径
<jsp:include page="my.txt"></jsp:include> 类似于include指令
<jsp:forward page="test1.jsp"></jsp:forward>
2.7 jsp注释
<!-- --> html静态元素注释
<%-- --%> jsp动态元素的注释
3.jsp页面的执行过程
1.jsp本质上就是一个Servlet程序。
Jsp在执行的时候会被转换成Servlet程序。
当我们请求一个jsp页面的时候,服务器收到jsp页面的请求以后,会先将被访问的jsp文件转换成Servlet文件,继续编译转换以后的Servlet文件得到Servlet文件对应的字节码文件,接着执行这个编译以后的字节码文件,将运行结果封装到响应对象中,返回给客户端浏览器。
缺点:第一次访问jsp页面会比较慢一些。
4.两个区别
4.1 include指令与include动作区别
[<%@include file=”” %>]
[<jsp:include page=""></jsp:include>]
1.include指令执行时将被导入页面的jsp代码完全融入,两个页面融合成一个Servlet;而include动作则在Servlet中使用include方法来引入被导入页面的内容。因此include指令执行时不需编译,速度快;include动作需要加载执行,速度慢。
2.include指令执行时导入页面的编译指令会起作用;而include动作执行时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容。
3.include指令通过file属性指定被包含的文件,放在页面的顶部,file属性不支持任何的表达式;include动作是通过page属性来指定被包含的文件的,page属性支持jsp表达式。
4.2 Servlet和JSP的区别
1、Servlet在Java代码中可以通过HttpServletResponse对象动态输出HTML内容。
2、JSP是在静态HTML内容中嵌入Java代码,然后Java代码在被动态执行后生成HTML内容。