第一章:java web 工作原理
1.1解析http协议
HTTP是一种超文本传送协议。HTTP是一种无状态的协议,意思是指在web浏览器和web服务器之间不需要建立持久的连接。HTTP遵循请求/响应模型。
HTTP定义的事务处理由以下四步组成:
1.客户端和web服务器建立连接;
2.客户端发送http请求;
3.服务器端接收客户端的http请求,生成http响应回发;
4.服务器端关闭连接。客户端解析回发响应,恢复页面。
1.1.2发送请求信息
1)请求行:请求行由三个标记组成:请求的HTTP方法、请求的URL、HTTP版本,中中间用空格分开。
在HTTP版本1.1中,定义了有八种可能的HTTP请求方法:
1GET:用于向服务器检索资源。
2POST:用于向服务器发送资源,并要求指定的URI处理。
3HEAD:与GET方法相同,服务器只返回状态行和头标,并不返回请求文档。
4PUT:请求服务器保存请求数据作为指定URI新内容。
5DELETE:请求服务器删除URI中命名的资源。
6OPTIONS:请求关于服务器支持的请求方法信息。
7TRACE:请求web服务器反馈HTTP请求和其头标。
8CONNECT:已文档化但当前未实现的一个方法,预留做隧道处理。
以下方式的HTTP请求为GET方法:
1在浏览器地址栏输入URL;
2在当前网页上点击HTML链接;
3在HTML表单中设置表单的method=’get’,并提交表单;
4在HTML表单中没有设置表单的method属性,提交表单(如果不设置method属性,默认为get方法)。
2)请求头
3)空行
4)消息体
1.1.3回送响应信息
1)状态行:由HTTP协议版本、响应状态码和响应描述组成。
响应状态码是一个三位的数字,它分为如下几个组:
1xx:信息,请求收到,继续处理
2xx:成功,行为被成功的接受、理解和采纳
3xx:重定向,为了完成请求,必须进一步执行的动作
4xx:客户端错误,请求包含语法错误或者请求无法实现
5xx:服务器错误,服务器不能实现一种明显无效的请求。
2)响应头
3)空行
4)消息体
1.3服务器端网页编程
1.3.1最早的解决方案CGI
CGI,即通用网关接口,在CGI运行时,每次请求就会打开一个CGI进程的方法严重消耗服务器资源,极大的限制了一个服务器可以支持的并发CGI用户数量。
1.3.2 java的解决方案
1)Servlet:Servlet是一个在web服务器端或者应用服务器端运行的java程序,主要用于在服务器端产生动态内容。
2)Web 容器:web容器负责管理和运行Servlet。
第二章:Servlet基础
2.0 Servlet API
2.1 Servlet生命周期
1容器装载并实例化Servlet
2容器触发init()方法装载资源
3请求到达触发Service()方法,处理请求产生响应
4容器丢弃Servlet调用destory()方法
2.2 部署Servlet
第一步:创建部署描述文件web.xml
第二步:在容器中注册Servlet
<servlet>
<servlet-name>HelloWord</servlet-name>
<servlet-class>com.lovobook.HelloWord</servlet-class>
</servlet>
第三步:映射Servlet
<servlet-mapping>
<servlet-name>HelloWord</servlet-name>
<url-pattern>/HelloWord</url-pattern>
</servlet-mapping>
Servlst URL 路径映射:
精确模式匹配。这种类型的模式用于将请求一对一映射到指定的Servlet。
扩展名匹配“*.扩展名”。在这种情况下,所有以指定扩展名结尾的URL都转向指定的Servlet。
路径映射。路径映射必须以'/'开始,以'/*'结尾,在这之间可以出现任意字符。路径匹配通常用于将对某个目录的所有请求转向一个指定的Servlet。
默认的Servlet,'/'。默认的Servlet映射用于定义一个在没有给出路径信息时请求转向的Servlet。
2.3 Servlet与HTTP协议
2.4Servlet配置
ServletConfig对象提供了如下的方法来访问初始化参数:
_ getInitParameter(String name):这个方法返回指定参数的值,如果该值不存在就返回null。
_ getInitParameterNames():这个方法以字符串对象枚举的方式返回servlet初始化参数的名称,如果没有初始化参数,则返回一个空的枚举。
2.4 ServletContext
ServletContext(上下文对象),用于描述Servlet运行环境的信息,使得Servlet可以同容器进行通讯。通过javax.servlet.ServletContext接口,Servlet可以访问到web应用程序资源的本地输入流、把资源的虚拟路径转换为物理路径、记录事件日志、绑定一个对象的作用范围在整个web应用程序中共享。
方法 | 描述 |
getMajorVersion() | 返回容器支持的Servlet API的主要版本 |
getResourceAsStream() | 返回资源对象的输入流 |
getAttribute() | 获得绑定在容器中的对象 |
setAttribute() | 通过名字把一个对象绑定在容器中 |
getInitParameter() | 获得容器的初始化信息参数 |
getRealPath() | 返回虚拟路径的物理路径 |
Log() | 把信息写入到Servlet日志文件中 |
第三章:使用Servlet处理HTTP响应
3.1 设置状态码
Servlet设置状态码一般使用HttpServletResponse的setStatus()方法。
注意:在使用PrintWriter向客户端输出信息之前,设置状态码
1)sendError方法
Public void sendError(int code, String message):该方法生成一个404应答,同时生成一个简短的HTML错误信息文档发送给客户。
2)sendRedirect方法
Public void sendRedirect(String URL):该方法生成一个302应答,同时在location头中指示新文档的URL地址。
3.1.1 HTTP状态码
100-199:表示信息性代码,标示客户端应该采取的其他动作,请求正在进行。
200-299:表示客户请求成功。
300-399:表示用于已经移走的资源文件,指示新的地址。
400-499:表示由客户端引发的错误。
500-599:表示由服务器端引发的错误。
3.2 设置请求重定向
1)web浏览器通过Http发送请求;
2)服务器端相应的Servlet把真实连接URL和302响应码发送到客户端;
3)响应结束浏览器断开当前连接,然后再根据location响应头的url地址,重新发出HTTP请求。
3.2.1 使用sendRedirect实现重定向
可以选择别的服务器端程序来处理请求
把请求重定向到一个完全不同的URL上
response.sendRedirect("http://127.0.0.1:8080/lovobook/bar.html");
3.2.2 设置自动刷新和等待页
何时使用自动刷新和等待页:
在指定时间内自动刷新当前页或到一个新的页面
根据时间来控制响应
想在响应中有一个短时间的暂停
response.setHeader("Refresh", "time; URL=url" );
3.3 设置响应消息体
HttpServletResponse对象负责将信息返回给客户端
HttpServletResponse对象只产生一个空的HTTP响应
传回自定义的内容需要使用getWriter()或者getOutputStream()方法
_ 传送普通文本
_ 传送二进制内容
3.3.1 传递文本流
getWriter()方法用于得到一个输出流.
例:PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World!</title>”);
3.3.2 传递二进制流
getOutputStream()方法可以对发送到客户端的信息进行更多控制。该方法返回javax.servlet. ServletOutputStream对象
ServletOutputStream允许开发者写原始字节
OutputStream比使用PrinterWriter发送文本效率更高
例:response.setContentType("image/jpeg");
ServletOutputStream sos = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos);
encoder.encode(image);
第四章:使用Servlet处理HTTP请求
4.1 使用Servlet接受服务器端请求信息
4.1.1 GET/POST提交方法
浏览器向Web服务器发送HTTP请求:
1用户在网页上点击一个超连接
2用户提交在网页上填写好的表单
3用户在浏览器地址栏中输入URL地址并回车
4默认情况下都是使用HTTP协议的GET方法提交请求
何时使用GET/POST方法:
1:请求一个静态页面或图形文件时使用GET方法,因为仅仅需要发送文件名;
2:发送大数据的时候,使用POST方法;
3:上传文件时,使用POST方法;
4:发送用户名、密码或其他保密信息的时候使用POST方法
GET和POST的区别:
特征 | GET方法 | POST方法 |
提交数据类型 | 文本 | 文本、二进制文本 |
提交数据长度 | 不超过255个字符 | 没有限制 |
提交数据可见性 | 作为URL地址的一部分显示在浏览器地址栏 | 作为请求的消息体,不可见 |
提交数据缓存 | 缓存在浏览器URL历史状态中 | 不会被浏览器缓存 |
4.2 获取HTTP协议请求行
HttpServletRequest对象的如下方法访问:
-getMethod():获取HTTP的请求方法,例如GET、POST等
-getRequestURI():获取请求的URI资源
-getRequestURL():获取请求的URL,包含协议名、服务器名或IP、端口号和请求资源但不包括查询字符串参数
-getQueryString():获取请求URL后面的查询字符串
-getProtocol():获取HTTP的协议名和版本号
-getContextPath():获取请求URI资源的上下文路径
-getServletPath():获取Servlet的映射路径
4.3 获取HTTP协议请求头
HTTP请求头用于告诉服务器客户端使用什么软件以及客户端想要服务器如何返回请求的信息
HttpServletRequest对象的如下方法访问
-getHeader(name):返回指定的请求头的值
-getHeaders(name) :返回一个Enumeration(枚举)包含请求头中的所有值
-getHeaderNames():特定请求中接受到的所有请求头的名称
-getIntHeader(name):获取特定请求头的值,并将其转化为int类型
-getDateHeader(name):获取特定请求头的值,并将其转化为Date类型
4.4 获取请求消息体
4.4.1 获取表单数据
getParameter(java.lang.String parameterName):获取表单参数的值,参数名区分大小写,与HTML表单中出现的参数名一致。该方法返回一个与用户输入完全一致的字符串对象。不管是GET请求还是POST请求都可以采用相同的方式使用getParameter()方法。如果没有对应的参数,该方法就返回null。
getParameterValues(String parameterName):获取同一个参数名的多个参数值,返回字符串数组对象。
parameterNames():以Enumeration(枚举)的方式返回请求中所有的表单参数名列表。
4.4.2 获取原始表单数据
1使用HttpServletRequest对象提供的getInputStream()或getReader()方法直接访问表单数据
2利用输入流分析原始的输入
4.5 请求转发和请求范围
重定向和请求派发的最大区别在于:重定向让客户端浏览器来完成,请求派发是在服务器端做工作
4.5.1 请求派发的实现
调用ServletRequest对象的方法:
1getRequestDispatcher(path):方法返回给定路径的RequestDispatcher对象
2getNamedDispatcher(name) :返回某个名称的Servlet的RequestDispatcher对象
RequestDispatcher对象提供了两种方法:
1forward(ServletRequest, ServletResponse):派发请求和响应对象到RequestDispatcher 对象所确定的新资源(Servlet、JSP或者HTML等)
2include(ServletRequest, ServletResponse)该方法关键是能包含服务器端的资源
请求派发中的跳转示意图:
请求派发中的包含示意图:
4.5.2 请求派发的范围
请求范围仅仅作用在与一个请求相关的两个资源之间,如果需要继续传递到第三个或更多的Servlet时,应当继续调用HHttpServletRequest对象的setAttribute()和getAttribute()方法。
第五章:web应用程序状态管理
5.1 web应用程序状态管理概述
1)表单隐藏字段
<input type=”hidden” name=”session” value=”...”>
1:对用户在网站上的访问进行会话跟踪。
2:为服务器端程序提供预定义的输入。
3:存储动态产生的页面上下文信息。
不足:只有当每个页面都是动态生成的时候才有效
2) Cookie
3)URL重写:用户禁用cookie,则采用url重写
4)Session会话跟踪
5.2 Cookies
5.2.1 Cookies 原理
即服务器在响应请求时可以将一些数据以“键-值”对的形式通过响应信息保存在客户端。需要注意的是cookie的setMaxAge方法,用于设置该cookie的生命周期,单位是秒,如果过了这个期间,cookie将失效。setMaxAge方法如果为负值则表示该cookie将在浏览器关闭时过期,如果参数为0则表示立刻删除该cookie。
Cookie cookie = new Cookie(“键”,”值”);
5.2.2 在输入servlet中管理cookies
Servlet中提供了如下一系列操作Cookie的API
- Cookie(name, value):构造方法用于创建一个或多个Cookie
- setMaxAge(int lifetime):设置Cookie的过期时间(以秒为单位)。默认值为负值(Cookie将在浏览器关闭时过期)
- getMaxAge():获取Cookie的过期时间。
- getName():获取Cookie的名字
- setValue(String value):指定Cookie的值。
- getValue():获取Cookie的值
5.3 Session
5.3.1 Session原理
服务器可以为客户端创建并维护一个Session对象,用于存放数据。在创建Session对象的同时,服务器将会为该Session对象产生一个唯一编号(SessionID),服务器以cookie的方式将SessionID存放在客户端。
5.3.2 会话跟踪机制
HttpSession session = request.getSession();
注:getSession(false)方法使用已经存在的会话,而不必创建新会话
isNew()方法来判断当前会话是一个新的会话还是已经存在的会话。
5.3.3 HttpSession接口
HttpSession接口常用的一些方法:
1setAttribute(java.lang.String, java.lang.Object):在Session对象中用一个名字绑定一个对象。
2getAttribute(java.lang.String):通过名字获取Session对象中保存的对象。
3removeAttribute(java.lang.String):在Session中删除与一个名字对应的对象。
4getCreationTime():返回第一次创建会话的时间。
5getLastAccessedTime():返回容器最后一次得到该会话ID的请求时间。
6setMaxInactiveInterval(int interval):对于会话指定客户请求的最大间隔时间,以秒为单位。-1表示永不过期
7getMaxInactiveInterval(int interval):返回客户请求的最大间隔时间。
8invalidate():会话结束,当前存在在会话中的所有会话属性也会解除绑定。
9getId():此方法返回每个session唯一的标识
5.3.4 会话超时管理
销毁会话可以采用如下三种简单的方式:
1设置会话超时。session.setMaxInactiveInterval()
2在Session对象上调用invalidate()方法
3应用结束(崩溃或取消部署)
提示:1在web.xml文件中指定会话超时时间,是以分钟为单位。在程 序中设置超时时间是以秒为单位。
2在超时时间内再次发送请求,HTTP请求将发送保存SessionID的cookie。SessionID与上次响应的SessionID一致。同时,响应不会产生新的SessionID值。
3一旦Session对象被销毁,所有绑定在该对象中的属性也会被解除。
注意:由于Session对象是保存在服务器端,浏览器关闭时并不意味着 Session对象将被删除。一个cookie只属于同一个浏览器,一个浏览器共享一个Session.
5.3.5 Application与Session域范围的属性比较
在Application(web应用上下文)域范围和Session域范围中,都可以用一个一个名字来绑定一个对象,从而在域范围内进行访问。所不同的是,绑定在Session范围内的对象仅仅在一个持续的会话期间被维护,而绑定在Application(web应用上下文)中的对象,在整个web应用程序运行过程中都被维护。
都使用相同的方法:
setAttribute()
getAttribute()
5.3.6 持久化管理
Session对象在持久化时,存放在其中的对象以序列化(实现java.io.Serializable接口)的形式存放
5.4 URL地址重写
URL重写方法:
response.encodeURL()
response.encodeRedirectURL(“/lovobook/sucess.html” )
第六章:对象作用域与Servlet事件监听器
6.1 对象作用域
作用域对象 | 属性操作方法 | 作用域范围说明 |
ServletContext(上下文) | Void setAttribute(String ,Object) Object getAttribute(String) Void RemoveAttribute(String) Enumeration getAttribute(String) | 整个web应用程序 |
HttpSession(会话) | 一个会话交互过程 | |
ServletRequest(请求) | 一次请求过程 |
6.1.1 ServletContext应用上下文
设置在ServletContext对象中的属性可以被Web应用中的任何一部分来访问
6.1.2会话作用域
Session用于维护与一个客户的会话状态。对于同一个客户的多个请求,Session会跨这些请求持久存储
6.1.3 请求作用域
存储时间比上下文作用域和会话作用域短。在请求结束后,对象就会被垃圾回收
6.2 监听器概述
事件类型 | 描述 | Listener接口 | |
ServletContext 事件 | 生命周期 | Servlet上下文刚被创建并可以开始为第一次请求服务,或者Servlet上下文将要被关闭发生的事件 | ServletContextListener |
属性改变 | Servlet上下文内的属性被增加、删除或者替换时发生的事件 | ServletContextAttributeListener | |
HttpSession 事件 | 生命周期 | HttpSession被创建、无效或超时时发生 | HttpSessionListener HttpSessionActivationListener |
会话迁移 | HttpSession被激活或钝化时发生 | ||
属性改变 | 在HttpSession中的属性被增加、删除、替换时发生 | HttpSessionAttributeListener HttpSessionBindingListener | |
对象绑定 | 对象被绑定到或者移出HttpSession时发生。 | ||
ServletRequest 事件 | 生命周期 | 在Servletr请求开始被Web组件处理时发生 | ServletRequestListener |
属性改变 | 在ServletRequest对象中的属性被增加、删除、替换时发生 | ServletRequestAttributeListener |
6.3 监听web应用程序范围内的事件
1)ServletContextListener:用于监听web应用程序启动和销毁的事件,监听器类需要实现javax.servlet.ServletContextListener接口。
2)ServletContextAttributeListener:用于监听web应用属性改变的事件,包括:增加属性、删除属性、修改属性。监听器类需要实现javax.servlet.ServletContextAttributeListener接口。
6.4 监听会话范围内事件
1)HttpSsessionBindingListener接口:这是唯一不需要再web.xml中设定的xml。
2)HttpSessionAttributeListener接口:主要监听HttpSession中的属性的操作。
3)HttpSessionListener接口:监听HttpSession的操作。当创建一个session时,激发session的Create(HttpSessionEvent se)方法;当销毁一个session时,激发sessionDestroyed(HttpSessionEvent se)方法。
6.5 监听请求生命周期内的事件
1)ServletRequestListener:
1public void requestDestroyed(ServletRequestEvent sre):当请求被销毁时被处理。
2public void requestInitialized(ServletRequestEvent sre):当请求被创建时被处理
2)ServletRequestAttributeListener:
1public void attributeAdded(ServletRequestAttributeEvent arg0) :当在请求作用域中添加一个属性的时候调用该方法。
2public void attributeRemoved(ServletRequestAttributeEvent arg0) :当在请求作用域中删除一个属性时调用
3public void attributeReplaced(ServletRequestAttributeEvent arg0) :当在请求作用域中替换一个属性值的时候调用
第七章:过滤器
7.1 过滤器概述
过滤器是一个中间组件,用于拦截源数据与目的数据之间的消息,并且过滤二者之间的传递数据。作用类似于警卫。过滤器一些常见应用:
1:认证过滤:对用户请求进行统一的认证。
2:登录和审核过滤:对用户的访问请求进行记录和审核。
3:图像转换过滤:转换图像格式。
4:数据压缩过滤 :对用户发生的数据进行压缩,从而减少传输量。
5:加密过滤:对请求和响应进行加密解密处理。
6:令牌过滤
7:资源访问触发事件过滤
8:XSLT过滤
9:MIME-type过滤
7.3 过滤器 API
由容器实现的接口 :
javax.servlet.Filter
javax.servlet.FilterChain
javax.servlet.FilterConfig
四个包装器类:
javax.servlet.ServletRequestWrapper
javax.servlet.ServletResponseWrapper
javax.servlet.http.HttpServletRequestWrapper
javax.servlet.http.HttpServletResponseWrapper
7.3.1 Filter接口
方法 | 描述 |
Void init(FilterConfig) | 在应用程序启动时,由容器调用,初始化过滤器 |
Void doFilter(ServletRequest ,ServlsetResponse ,FilterChin) | 对于每个URL映射到该过滤器的请求 |
Void destory() | 在应用程序关闭时,由容器调用 |
7.3.2 FilterConfig接口
方法 | 描述 |
String getFilterName() | 返回在部署描述文件中指定的过滤器名称 |
String getInitParameter(String) | 返回在部署描述文件中指定的参数的值 |
Enumeration getInitParameterNames() | 返回在部署描述文件中指定的所有参数的值 |
ServletContext getServletContext() | 返回web应用程序的ServletContext。过滤器可以使用ServletContext 设置、获取application范围内的属性。 |
7.3.3 FilterChain接口
方法 | 描述 |
void doFilter(ServletRequest, ServletResponse) | 我们从一个过滤器对象的doFilter()方法中调用此方法,以继续过滤器链的传递过程。它会将控制转到链中的下一个组件。
|
7.4 配置Filter
<filter>
<filter-name>ValidatorFilter</filter-name>
<description>Validates the requests</description>
<filter-class>com.lovobook.filters.ValidatorFilter</filter-class>
<init-param>
<param-name>locale</param-name>
<param-value>USA</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ValidatorFilter</filter-name>
<url-pattern>*.doc</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ValidatorFilter</filter-name>
<servlet-name>reportServlet</servlet-name>
</filter-mapping>
第八章:JSP基础
8.1 jsp运行机制与生命周期
1)jsp页面翻译阶段:把jsp页面翻译成servlet
2)Jsp页面翻译阶段:将servlet编译成字节码。
3)Jsp页面类装载阶段。Web容器装载新生成的servlet类。
4)Jsp页面类实例化阶段。Web容器创建servlet实例。
5)Jsp页面初始化阶段。调用servlet的init()方法。
6)Jsp页面服务阶段。调用servlet的service()方法。
7)Jsp页面销毁阶段。调用servlet的destory()方法。
注意:如果一个web应用程序中含有jsp页面,部署这个应用程序时,在jsp生命周期中,整个翻译和编译步骤只发生一次。
8.2 jsp脚本元素
脚本元素 | 脚本语法 |
声明 | <%! 声明 %> |
Scriplet | <% 代码 %> |
脚本表达式 | <%= 脚本表达式 %> |
8.3 注释
1<%-- 注入内容--%>
2<!- -注释内容- ->
3java代码注释
8.4 jsp指令
在jsp中有三种类型的指令:
1page指令为当前页面提供处理指令;
2include指令用于把另一个文件包含在jsp中(静态的包含);
3taglib指令指定如何包含和访问自定义标签库。
8.5 jsp标准动作
8.5.1 <jsp:include>动作:实现一种动态的包含,它把显示的结果插入到当前页面来显示。
Include指令(<% include %>)与include动作(<jsp:include>)的区别:
1)include指令只能生成一个servlet,而include动作可以生成多个servlet;
2)Include指令包含的是被包含页面的真实代码,而include动作包含的是相应代码;
3)Include指令发生在页面编译时,而include动作发生在页面请求时;
4)Include指令做出的任何修改必须重启当前web服务才能生效,而include动作保存即生效;
5)Include指令不能实现在请求去内共享对象,而include动作支持在请求区内共享对象;
6)Include指令适用于静态页面包含,而include动作适合动态页面包含。
8.5.2 <jsp:forward>动作
将客户端所发出来的请求,从一个JSP网页转发到另一个JSP页面
语法格式为:
<jsp:forward page="relativeURL" />
8.6 jsp隐式对象
对象名 | 描述 | 作用域 |
request | 代表与请求相关的HttpServletRequest对象 | request |
response | 代表与响应相关的HttpServletResponse对象 | page |
Session | 代表特定用户请求会话的HttpSession对象。该对象只有在jsp页面参与一个Http会话时才有效。 | session |
page | 等于java编程语言中的this变量 | page |
pageContext | 代表封装请求某个jsp页面时请求环境的pageContext对象 | page |
config | 代表jsp页面的servlet相关的servletConfig对象 | page |
application | 代表web应用程序的servletContext对象 | application |
out | 代表与响应输出流相关的jspWriter对象 | page |
exception | 代表jsp页面抛出的Trowable对象。这个对象只能在jsp错误页面中使用 | page |
第九章:java web开发模式
9.1 在jsp中使用javaBean
一个标准的javaBean组件具有以下几个特征:
1javaBean类必须是一个公共类,并将其访问属性设置为public
2javaBean类必须有一个空的构造函数:类中必须有一个不带参数的公共构造器,此构造器也应该通过调用各个特性的设置方法来设置特性的缺省值
3一个javaBean类不应该有公共实例变量,类变量都为private。要访问这些变量,应该通过一组存取方法来访问:对于每个属性,应该带一个匹配公用getter和setter方法的专用实例变量
4javaBean应该是可序列化的,即实现java.io.Serializable接口
9.2 mvc架构模式的java web实现
采用JSP+Servlet+JavaBean的技术实现Java Web的开发
第十章:编写无脚本java脚本的jsp页面
1.JSP EL(即表达式语言Expression Language)
2.EL运算符可以分为四类:
属性和集合访问运算符
算术运算符
关系运算符
逻辑运算符
3.访问属性和集合的EL运算符:
a.b:返回a的属性b的值。
a[b]:返回a的键或索引为b的值。
4.标准标记库JSTL
功能范围 | 作用 | URI | 前缀 |
核心(core) | 一般用途处理的标记 | http://java.sun.com/jsp/jstl/core | c |
xml | 解析、选择、转换XML数据的标记 | http://java.sun.com/jsp/jstl/xml | x |
数据库(sql) | 访问关系型数据库的标记 | http://java.sun.com/jsp/jstl/sql | sql |
国际化(I18N) | 为国际化应用格式化数据的标记 | http://java.sun.com/jsp/jstl/fmt | fmt |
函数(Functions) | 处理字符串和集合的标记 | http://java.sun.com/jsp/jstl/functions | fn |
需要两个JAR文件。第一个文件是jstl.jar,它为JSTL标记库提供API类。第二个文件是standard.jar,它提供了标记库的实现类 。复制到WEB-INF目录下的lib子目录下。
通过<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>引入到JSP
5.通用标记
<c:catch var="e">
会抛出异常的代码
</c:catch>
<c:out value="${number}" />
6.变量支持标记
1)<c:set>标记用于设置变量和对象的值
例:<c:set target="customer1" property="zipcode" value="55501">设置javaBean对象customer1的zipcode属性
2)<c:remove>用于将一个变量从其作用域中删除
<c:remove>标记不能用于JavaBean和Map对象
7.流程控制
1)JSTL条件处理
1<c:if test="${x == '9'}">
${x}
</c:if>
2<c:choose>
<c:when test="${color == 'white'}">
Light!
</c:when>
<c:when test="${color == 'black'}">
Dark!
</c:when>
<c:otherwise>
Colors!
</c:otherwise>
</c:choose>
2)循环
1循环赋值
<c:forEach var="num" items="${numArray}">
<c:set var="num" value="100" />
</c:forEach>
2<c:forTokens>标记用于循环处理字符串中由分隔符分隔的各成员。其语法形式为:
<c:forTokens items=".." delims=".."
[var=".."] [varStatus=".."] [begin=".."] [end=".."] [step=".."]>
内容体
</c:forTokens>
3)用JSTL访问URL信息
1<c:url>:重写url并对其参数编码
<c:url value="/page.html" var="pagename"/>
2<c:import>:访问web应用程序之外的内容
<c:import url="/content.html" var="newstuff" scope="session">
<c:param name="par1" value="val1"/>
<c:param name="par2" value="val2"/>
</c:import>
3<c:redirect>:重定向到不同的url