web应用和web.xml
- JSP(java server page)本质是servlet,因为JSP最终要编译成servlet才能运行。
- Tomcat的webapps路径下的web项目中的WEB-INF路径下的classes文件夹用于保存*.class文件,lib文件夹用于保存打包后的JAR文件。
- 布置到Tomcat中的项目才能通过链接形式(http)访问到。
- 从servlet3.0开始,WEB-INF路径下的web.xml文件不再是必须的,但通常建议保留。
- 客户端浏览器无法访问到WEB-INF路径下的任何内容。
- 在servlet3.0规范中,web.xml文件的根
<web-app.../>
新增了metadata-complete属性,该属性为true时,则该web应用将不会加载注解配置的web组件(如servlet、Filter、Listener等)。 - Tomcat的系统web.xml文件放在Tomcat的conf路径下。
JSP原理
- JSP页面的内容由静态部分(html标签)和动态部分(JSP脚本)组成。
- Tomcat会根据JSP页面生成对应的servlet的java文件和class文件。如:名为test.jsp的JSP页面生成的是test_jsp.java文件和test_jsp.class文件。JSP页面中的所有内容都由test_jsp.java文件的页面输出流生成。
- jsp执行过程:.jsp页面文件—>翻译阶段生成.java文件—>编译环节生成.class文件。 与java相比,jsp多了一个翻译成 .java文件的过程。
- JSP文件必须在JSP服务器内运行,且必须生成servlet才能运行。
- 每个JSP页面的第1个访问者的速度很慢,因为要等待JSP编译成servlet。
- JSP页面输送到客户端的标签HTML页面,所以可以直接访问。
JSP基本语法
我用表格来对比分析,便于记忆:
名称 | 语法 |
---|---|
HTML注释 | <!-- 被注释内容 --> |
JSP注释 | <%-- 被注释内容 --> |
JSP脚本 | <% 脚本内容 %> 也可声明变量,但声明的是局部变量 |
JSP声时 | <%! 声明变量 %> |
JSP输出 | <%=表达式%> 表达式中不能有分号,等价于<%out.print(“内容”)%> |
JSP的3个编译指令(page、include、taglib)
- 编译指令 是 带有默认值的通知JSP引擎的处理消息。在JSP编译成servlet时起作用。
- 编译指令使用语法:<%@ 指令名 属性名=“属性值”%>
- page编译指令 用于定义当前JSP页面的一些属性。
例:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
属性表:
属性名 | 说明 |
---|---|
language=”java” | 说明当前jsp所支持的脚本语言种类。这里支持java |
extends | 指定JSP页面编译所产生的java类所继承的父类,或实现的接口 |
import | 用来导包,有些包是默认导进来的,如java.lang.* |
pageEncoding | 设置jsp页面的编码格式 (同时要注意的jsp文件右键属性里的设置是不是已经改utf-8的格式) |
ContentType | 设置浏览器查看这个页面时使用的编码格式 |
session=”true” | 说明当前页面是否使用session |
isELIgnored | 当前页面是否使用EL表达式 |
buffer | 页面默认的缓冲区大小 默认 8kb |
autoFlush | 是否自动刷新 |
errorPage | 指定的错误页面 |
isErrorPage | 当前页是否错误页面 |
info | 设置该JSP程序的信息,该信息在JSP页面可直接通过getServletInfo()获得 |
4. include编译指令:用于导入另一个JSP页面代码,也就静态导入。 如:<%@include file="jspDemo1.jsp" %>
5. taglib编译指令:用于定义和访问自定义标签。
如:<%@taglib file="jspUrl" %>
JSP的7个动作指令
动作指令是JSP运行时的动作,可用JSP脚 本替换。
include
<jsp:include page="jspDemo1.jsp"></jsp:include>
<!-- 动态导入其它jsp的运行结果-->
forward
用于页面跳转,仍是一次请求,转发时请求的参数、属性都不会变。
<jsp:forward page="要跳转到的页面路径">
<jsp:param value="值" name="key">
</jsp:forward>
<!-- 跳转到另一页面后,用key接收value里的值,也用<%request.getParameter("key")%>接收 -->
param
用于传递参数,可与forword、include、plugin动作指令结合使用,如上面代码。
<jsp:param name="key" value="val">
useBean
<jsp:useBean id="u" class="com.zrgk.model.Users" Scope="page"> </jsp:useBean>
用于在页面初始化一个Java实例,相当于:Users u=new Users();
id值:别名;
class的值:是要使用的javaBean类所在地址路径;
Scope:作用范围,page说明只能在当前页使用
setProperty
用于给实例属性赋值,相当于:u.setUserName(“筷子兄弟”);
<jsp:setProperty property="username" name="u" value="筷子兄弟"/>
property 的值是javabean的属性名,
name的值是实例的别名,
value的值是给属性赋的值
getProperty
<jsp:getProperty property="username" name="u"/>
获取某个属性的值,相当于:u.getUserName();
页面的跳转与刷新
1.进入页面3秒后,自动跳转到jspDemol1.jsp页面 :
<meta http-equiv="Refresh" content="3"; url=jspDemol1.jsp">
Refresh:说明是要跳转; content的值是等待时间(秒); url的值:跳转地址
2.隔3秒钟刷新当前页面:
<meta http-equiv="refresh" content="3">
静态导入与动态导入的区别
- 静态导入导的是另一个页面的代码,最终两个页面形成一个页面,从页只生成一个Servlet
- 动态导入导的是另一个页面执行后的结果,所以两个页面都有自己的servlet
- 静态导入时,被导页面的编译指令会起作用,所以,如果两个页面编译指令冲突会出错
- 动态导入可传参数