JSP简介
JSP的全称是(Java Server Pages)
jsp的作用
JSP是为了改进Servlet输出动态的HTML复杂、烦琐等缺点而提出的,JSP允许Java代码与HTML写在同一页面中,使开发人员能快速的开发包括大量HTML代码的动态网页
Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用
在Tomcat中部署Javaee有三种方式
方式一:直接放到Webapps目录下。webapps目录放入JavaEE应用的目录放war文件
方式二:修改server.xml文件找到tomcat目录下的conf文件夹修改server.xml文件 在Host标签内建一个Context,内容如下。
< Context path="/myapp" reloadable=“true” docBase=“D:\myapp” workDir=“D:\myapp\work”/>
其中path是虚拟路径,docBase是JSP应用程序的物理路径,workDir是这个应用的工作目录,存放运行是生成的于这个应用相关的文件
删除一个Web应用同时删除server.xml中相应的Context节点
方式三: 创建一个Context文件。
直接在Tomcat的conf\Catalina\localhost目录下新建xml文件
内容如下
< Context path="/admin" docBase="${catalina.home}/server/webapps/admin" debug=“0” privileged=“true”>
注意:删除一个Web应用同时也要删除还要将Tomcat的conf
\catalina\localhost目录下相应的xml文件删除。否则Tomcat仍会岸配置去加载。
jsp作用域范围大小
从小到大依次是 Page Request Session Application
page具有页面作用域的对象,在当前页内可用
Request具有请求作用域的对象,在所有处理同一个请求的页面内都可以访问
Session具有会话作用域的对象,在会话的存活期间可用
Application具有应用程序作用域的对象,在应用程序存活期间均可用
jsp标签
<%@ %>伪指令用来设置全局变量,声明类、要实现的方法以及输出内容的类型等
<%! %>声明指令包括的是一段java代码 //对应的成员方法全局
<% %>脚本指令是镶嵌在JSP页面中的java代码主要用于处理客户端的请求 //属于局部
<%= %>表达式指令是JSP提供的一种简单方法用于访问可用的Java取值或其他表达式,还可用于给动作指令动态传递参数(一般用el , jstl)
<%–注释–%>注释指令是增强代码的可读性 <%-- 注释内容–%>只在JSP中显示,第二种是JSP脚本元素中的注释 ,//注释内容 或者/* 注释内容*/ 第三种是JSP生成的HTML在客户端显示的注释<!- - 注释内容 -->。
< jsp:actionName/>动作标签
jsp工作原理
一个JSP文件第一次被请求时,JSP引擎把该JSP文件转换成为一个servlet,JSP引擎使用javac把转换成的servlet的源文件编译成相应的class文件,对每一个请求,JSP引擎创建一个新的线程来处理请求注意踩坑是启动线程不是进程
jsp转化为servlet.java文件 编译servlet生成.class文件,把字节码文件加载到内存中
JSP生命周期
转换成servlet-编译servlet-加载-实例化-初始化-调用对应的service方法-销毁
jsp的9个内置对象
out 客户端打开的输出流
application 为多个应用程序保存信息
session 为每个用户保存信息
request 封装客户端HTTP请求信息
response 封装返回HTTP客户端响应信息
pageJSP 对应实现类实例,JSP本身
pageContext 封装JSP上下文信息,管理JSP作用域中对象的访问
config 表示Servlet的配置,只在JSP页面中有效
exception 表示运行时异常,将导致调用错误页面
web组件复用
动态包含和静态包含
静态包含:在JSP源文件转换成对应Servlet源文件时将当前JSP文件和其包含的所有其他文件合并成一个Servlet文件静态包含时候只剩生成一个servlet文件
JSP中的include伪指令实现静态包含,include标准语法:<%@include file=“地址”%> ,<%@include %>指令只有一个属性file <%@include%>指令可以放在JSP页面的任意位置,其file所指的路径是相对路径
动态包含
使用JSP的include动作指令和forward动作指令实现动态包含
include允许当前页面将客户端请求暂时转交给所包含的对象,一旦对象执行完毕,返回当前JSP页面include动作指令相当于方法的调用标准语法:<jsp:include page=“地址” flush=“true”> A包含B B访问A
动态包含中的包含文件和被包含文件各自独立编译、执行,彼此之间不能访问各自定义的变量(即page作用域范围内的对象),只能共享request范围、session范围、application范围对象
page属性值可以是相对路径或代表相对路径的表达式
page属性指向的文件既可以是动态文件也可以是静态文件
包含后产生的servlet为N
forward动作指令允许将客户请求转发到另一个资源文件,即每当遇到此动作指令就停止执行当前的JSP,转而执行被转发的指定资源
语法格式:< jsp:forward page=“地址”/>
forward动作指令在调用转发操作后不会继续处理指令后的任何代码
include动作指令在调用转发操作后,完成转发操作后将继续处理指令后的代码
表达式语言(el表达式)
EL(Expression Language): 表达式语言
EL语法简单,使用方便,在很多地方可代替JSP标签输出page、request、session、application范围的数据
el标志${ } 没有变量声明, jsp标志<% %>有变量声明<%! %>注意 ${ }花括号种只能是属性 不能操作方法!括弧种应该填的是 对象名.属性 使用关系运算符时候应为 $ {a.pass == a.pass2}
el表达式种的内置对象
jstl标准标签库
标准标签库种包含5个,
核心标签库 前置名是c url是http://java.sun.com/jsp/jstl/core
I18N格式标签库 前置名fmt url是http://java.sun.com/jsp/jstl/fmt
SQL标签库 前置名是sql url是http://java.sun.com/jsp/jstl/sql
XML标签库 前置名是xml url是http://java.sun.com/jsp/jstl/xml
函数标签库 前置名fn url是http://java.sun.com/jsp/jstl/functions
Servlet规范定义了4种认证机制
HTTP基本认证
HTTP摘要认证
HTTPS客户端认证
HTTP表单认证
部署描述符文件(web.xml)
web.xml文件是XML文档,必须以XML声明开头,指出XML版本及字符编码
顶层(根)元素为< web-app>,元素名大小写敏感web-App和WEB-APP都是不合法的, web-app必须用
xsd文档的作用是定义XML文档的合法构建模块,类似 dtd
context-param 应用范围内初始化参数
< param-name>参数名称< /param-name>
< param-value>值< /param-value>
实例
< context-param>
< param-name>param_name< /param-name>
< param-value> param_value< /param-value>
< /context-param>
filter name class为过滤器的完全限定类名 声明了Web应用程序中的过滤器
容器使用filter-mapping决定哪个过滤器以什么样的顺序应用到请求。
WEB-INF目录
WEB-INF包括三个子目录
classes 所有未被jar包含的应用程序中的相关的类文件,通过包组织在一起
lib 使用到的jar文件
web.xml 部署描述符,该文件是JavaEE应用的核心,每个JavaEE应用必须有该文件,其包含了Servlet容器(Tomcat)运行JavaEE应用所需要的配置信息
Request URI=ContextPath+ServletPath+PathInfo
使用request.getRequestURI()获得
HttpServletRequest对象提供:
getContextPath(),getServletPath()和getPathInfo()方法,分别获取上下文路径、Servlet路径和路径信息
Servlet映射查找
精确映射:请求URI和Servlet映射完全匹配
如:Servlet映射/test/do,请求URI为/test/do
路径映射:Servlet映射以/开始,以/结束
如:Servlet映射/test/do/,请求URI为/test/do/a或/test/do/b
扩展映射:Servlet映射以开始以.xxx结束
如:.do,请求为/test/a/a.do或/test/b.do