- 浏览: 127843 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
calosteward:
赞一个。 谢谢分享了~非常有用。 —————————————— ...
项目里用到的Jquery,json,struts2结合 -
zhouylf:
文章都还行,就是变量名起的好恶心,“wzXxfbPdtp”还 ...
Springmvc3实现文件上传 -
zongshoujin:
老大 List和Map 在前台解析不出来,我看了下 是j ...
struts2返回JSON,jquery解析JSON(返回的可能是LIST,MAP,对象,单个值) -
kfjihailong:
269565478@qq.com 求源码
springmvc+dwz+xheditor实现上传图片及swf 视频 -
eric.zhang:
jieAmei 写道能给我发一下这个代码吗?谢谢,452909 ...
dwz+jquery+fileupload+springmvc实现文件上传 及图片预览
JSP:
1.JSP注释:
JSP注释用于标注在程序开发过程中的开发提示,不会输出到客户端
<%-- 注释内容 --%>
HTML注释:
HTML注释会显示在客户端.
<!-- 注释内容 -->
2.JSP声明; <%! 声明部分 %>
用于声明变量和方法,实际上,JSP声明将会转换成SERVLET的成员变量或成员方法
3.JSP输出表达式:
<%=表达式 %>
用于输出变量和方法返回值;
如:
<%=count++ %> <!--使用表达式输出变量的值 -->
<%=info()%> <!--使用表达式输出方法的返回值 -->
4.JSP脚本:<% %>
JAVA代码必须通过JSP脚本嵌入HTML代码,因此所有能在java程序中执行的代码
都可以在JSP脚本中执行;
5.JSP的3个编译指令:语法 <%@ 编译指令名 属性名="属性值"...%>
6.JSP的7个动作指令
动作指令与编译指令不同,编译指令是通知servlet引擎的处理消息,而
动作指令只是运行时的脚本动作,编译指令在编译servlet时起作用,
而动作指令通常可替换成JSP脚本,是JSP脚本的标准化写法。
1):jsp:forward:用于将页面响应转发给另外的页面,既可以转发给静态的HTML页
面,也可以转发动态的JSP页面,或者转发到容器中的SERVLET
7:JSP脚本中的9个内置对象:已经默认初始化了,可以直接使用
1)application:javax.servlet.ServletContext的实例
代表JSP所属的web应用本身;
2)config:javax.servlet.Servlet.ServletConfig的实例,
3)exception:java.lang.Throwable的实例,只有当编译指令page的isErrorpage
属 性为true时,该对象才可以使用
4)out:javax.servlet.jsp.JspWriter
5)page
6)pageContext:javax.servlet.jsp.PageContext
7)request:javax.servlet.http.HttpServletRequest
8)response:javax.servlet.http.HttpServletResponse
9)session:javax.servlet.http.HttpSession
8:cookie:
增加cookie也是在response内置对象完成的。
1)创建Cookie实例 构造器:Cookie(String name,String value);
2) 设置Cookie的生命周期,(如果没设置,则浏览器关闭就会自动消失)
3)向客户端写Cookie (addCookie(Cookie c))
9.session:
代表一次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器
断开,这个过程就是一次会话,浏览器关闭,session结束,数据也会丢失
10.Servlet与JSP的区别:
1)Servlet中没有内置对象,原来JSP中的内置对象都必须由程序员显式创建
2)对于静太的HTML标签,Servlet都必须使用页面输出流每行输出
11自定义标签库
1)开发自定义标签处理类
必须继承javax.servlet.jsp.tagext.SimpleTagSupport
如果标签类包含属性,每个属性都必须有getter/setter方法
重写doTag()方法
2)建立一个*.tld文件,每个*.tld文件对应一个标签库,每个标签库对应多个标
签库 标签库定义文件的根元素为taglib,
还有3个子元素:uri,short-name,tlib-version
3)在JSP中使用自定义标签
使用<%@ taglib uri="" prefix="">导入;
Servlet 必须继承自 HttpServlet
servlet响应客户端请求:
1 doGet
2 doPost
3 doPut
4 doDelete
一般情况下,Servlet对于所有请求的响应都是完全一样的,引时,可以彩重写一个方法来
代替上面的几个方法:只需要重写service()方法即可响应客户端的所有请求
HttpServlet还有两个方法:
init(ServletConfig config):创建Servlet实例时,调用该方法初始化Servlet资源
destroy():销毁Servlet实例时,自动调用该方法,回收资源
通常情况下,不需要重写这两个方法,除非需要在初始化Servlet时,完成某些资源
初始化,才需要重写init()方法,如果需要在销毁Servlet之前,先完成某些资源的回收
如:关闭数据库连接,才需要重写destroy方法。
注:如果重写了init方法,则需要在重写该方法的第一行调用super.init(config)。
2.Servlet的生命周期:
Servlet在容器中运行,其实例的创建及销毁等都不是由程序员决定的,而是由
容器控制的。
1)创建Servlet实例有两个时机:(用户请求之时或应用启动之时)
a.客户端第一次请求某个Servlet时,系统创建该Servlet的实例;大部分的
Servlet都是这种
b.Web应用启动时,立即创建Servlet实例,即load-on-startup Servlet
load-on-startup整数值越小,越优实例化
生命周期:
1)创建Servlet实例
2)Web容器调用Servlet的init方法,对Servlet进行初始末化
3) Servlet初始化后,将一直存在于容器中,处理客户端的请求。
4)Web容器销毁Servlet,先调用destroy方法。
ServletConfig用于获取配置参数的方法,web.xml。为Servlet配置参数使用init-param元
素,包含两个子元素param-name,param-value
web.xml:
在Servlet里可以直接获取配置的参数:
################################################
Filter流程:
Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,
最后Filter再对服务器响应进行后处理;
Filter有如下几个用处:
1 在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest
2 根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据
3 在HttpServletResponse到达客户端之前,拦截HttpServletResponse
4 检查HttpServletResponse,也可以HttpServletResponse头和数据
Filter有以下几种:
1 用户授权的Filter:检查用户请求,过滤掉用户非法的请求
2 日志Filter:详细记录某些特殊的用户请求
3 负责解码的Filter
4 能改变XML内容的Filter等
Filter可以拦截多个请求或响应,一个请求或响应也可被多个Filter拦截
创建一个Filter只需要两个步骤:
1 创建Filter处理类:必须实现javax.servlet.Filter接口。
init(FilterConfig config)
void destroy();
void doFilter(ServletRequest
request,ServletResponse,res,FilterChain chain);
2 web.xml文件中配置Filter
配置Filter:
web.xml
2 Listener
Listener的作用非常类似于load-on-startup Servlet(但比load-on-startup启动的早),用于在web应用启动时,启动某些后台程序,
这些后台程序负责为系统运行提供支持
使用Listener需要两个步骤:
1.建Listener实现类
2.在web.xml文件中配置Listener;
1) 创建Listener类必须实现ServletContextListener;接口,包括两个方法:
contextInitialized(ServletContextEvent sce)启动web应用时,系统会调用Listener的该方法
contextDestroy(ServletContextEvent sce) 关闭web应用时,系统会调用Listener的该方法
下面将创建一个获取数据库连接的Listener,该Listener会在应用启动时,获取数据库连接,并将连接设置成application范围内的属性
2)配置Listener
web.xml
<listener>
<listener-class>com.GetConnListener</listener-class>
</listener>
3 表达式语言:${expression} EL表达式:支持加,减,乘,除.
表达式语言( expression language) 是一种简化的数据访问方式(),是JSP的一个重要特性,它并不是一种通用的程序语言,
而仅仅是一种数据访问语言,可以方便的访问应用程序数据
1)表达式语言的内置对象11个
使用表达式语言,可以直接获取请求参数值.可以获取页面中javaBean的指定属性值,获取请求头及获取
page,request,session和application范围的属性值等,
内置对象:
pageContext:代表该页面的pageContext对象 (对应javax.servlet.ServletContext)
pageScope:用于获取page范围的属性值 (对应java.util.Map)
requestScope:用于获取request范围的属性值 (对应java.util.Map )
sessionScope:用于获取session范围的属性值 (对应java.util.Map )
applicationScope: 用于获取application范围的属性值 (对应java.util.Map )
param:用于获取请求的参数值 (对应java.util.Map )如同 ServletRequest.getParameter(String name)。回传String 类型的值
paramValues:用于获取请求的参数值,与param的区别在于,该对象用于获取属性值为数组的属性值,(java.util.Map)
如同 隐含对象 类 型 说 明 ServletRequest.getParameterValues(String name)。回传String []类型的值
header:用于获取请求头的属性值,(对应java.util.Map )如同ServletRequest.getHeader(String name)。回传String 类型的值
headerValues:用于获取请求头的属性值,与header的区别在于,该对象用于获取属性值为数组的属性值
(对应java.util.Map )如同ServletRequest.getHeaders(String name)。回传String []类型的值
initParam:(对应java.util.Map)用于获取请求职Web应用的初始化参数,如同 ServletContext.getInitParameter(String name)。回传String 类型的值
cookie:对应java.util.Map,用于获取指定的cookie值,如同HttpServletRequest.getCookies( )
${param.name}, ${param['name']}
${header.host},${initParam["author"]}
${sessionScope["user"]},${cookie["user"].value};
2).与 [ ] 运算符
EL 提供 . 和 [ ] 两种运算符来存取数据。下列两者所代表的意思是一样的:
${sessionScope.user.sex}
等于
${sessionScope.user["sex"]}
. 和 [ ] 也可以同时混合使用,如下:
${sessionScope.shoppingCart[0].price}
回传结果为shoppingCart中第一项物品的价格。
以下两种情况,两者会有差异:
(1) 当要存取的属性名称中包含一些特殊字符,如 . 或 – 等并非字母或数字的符号,就一定
要使用 [ ],
例如:
${user.My-Name }
上述是不正确的方式,应当改为:
${user["My-Name"] }
(2) 我们来考虑下列情况:
${sessionScope.user[data]}
此时,data 是一个变量,假若data的值为"sex"时,那上述的例子等于${sessionScope.user.sex};
假若data 的值为"name"时,它就等于${sessionScope.user.name}。因此,如果要动态取值时,就可以
用上述的方法来做,但 . 无法做到动态取值。
例如:${username}。
它的意思是取出某一范围中名称为username的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
经验:
1、如果EL表达式无法解析:– <%@ page isELIgnored="false" %>
一、JSTL1、EL运算符>;
2)var指定变量,并把EL运算结果赋值给该变量值为true/false;
3)scope:指定 var变量的范围;
6、迭代标签语法:
<c:forEach items=“collection” var=“name” varStatus=“status” begin=“int“ end=”int” step=“int” > //循环体
</c:forEach>
说明:
1)items:是集合,用EL表达式;
2)var:变量名,存放items
3)varStatus: 显示循环状态的变量
①index:从0开始;
②count:元素位置,从1开始;
③first:如果是第一个元素则显示true;
④last:如果是最后一个元素则显示true;
4)begin:循环的初始值(整型);
5)end: 循环结束 ;
6)step:步长,循环间隔的数值;
7、<c:otherwise>标签
例:如果user.wealthy值true,则显示user.wealthy is true.
<c:choose>
<c:when test="">user.generous is true.</c:when>
<c:when test="">user.stingy is true.</c:when>
<c:otherwise>user.generous and user.stingy are false.</c:otherwise>
</c:choose>
说明:只有当条件user.generous返回值是true时,才显示user.generous is true.只有当条件user.stingy返回值是true时,
才显示user.stingy is true.其它所有的情况(即user.generous和user.stingy的值都不为true)
全部显示user.generous and user.stingy are false.由于JSTL没有形如if (){…} else {…}的条件语句,
所以这种形式的语句只能用<c:choose>、<c:when>和<c:otherwise>标签共同来完成了。
8、c:forTokens>标签说明:
items 进行循环的项目 是 无delims 分割符 是 无begin 开始条件 否 0end 结束条件 否 集合中的最后一个项目step 步长
否 1var 代表当前项目的变量名 否 无varStatus 显示循环状态的变量 否 无例子:
<c:forTokens items="a:b:c:d" delims=":" var="token">
<c:out value=""/>
</c:forTokens>
这个标签的使用相当于java.util.StringTokenizer类。在这里将字符串a:b:c:d以:分开循环四次,token是循环到当前分割到的字符串。
9、<c:redirect>标签
说明:标签将请求重新定向到另外一个页面,它有以下属性 属性 描 述 是否必须 缺省值url url地址
是 无context /后跟本地web应用程序的名字 否 当前应用程序例子:
<c:redirect /'>http://www.yourname.com/login.jsp"/>将请求重新定向到http://www.yourname.com/login.jsp页,
相当于response.setRedirect("http://www.yourname.com/login.jsp");
10、<c:param>标签
说明:<c:param>标签用来传递参数给一个重定向或包含页面,它有以下属性属 性 描 述 是否必须 缺省值name
在request参数中设置的变量名 是 无value 在request参数中设置的变量值 否 无例子:
<c:redirect url="login.jsp"><c:param name="id" value="888"/></c:redirect>将参数888以id为名字传递到login.jsp页面,
相当于login.jsp?id=888
11、<fmt:>格式化标签
说明:需要导入 <%@ taglib prefix="fmt" http://java.sun.com/jsp/jstl/fmt">http://java.sun.com/jsp/jstl/fmt" %>
1)格式化日期<fmt:formatDate value=“” pattern=“yyyy-MM-dd HH:mm:ss”/>
Value:通过EL表达式或<%new Date() %> 取的日期值; Pattern:输出的日期格式;
2) 格式化数字<fmt:formatNumber value="${n}" pattern="###,###.##" />
- JSP文件必须在JSP服务器内运行,
- JSP文件必须先生成SERVLET才能执行,
- 每个JSP页面的第一个访问者速度很慢,因为必须等待JSP编译成SERVLET
- JSP页面输送到客户端的是标准的HTML页面
1.JSP注释:
JSP注释用于标注在程序开发过程中的开发提示,不会输出到客户端
<%-- 注释内容 --%>
HTML注释:
HTML注释会显示在客户端.
<!-- 注释内容 -->
2.JSP声明; <%! 声明部分 %>
用于声明变量和方法,实际上,JSP声明将会转换成SERVLET的成员变量或成员方法
3.JSP输出表达式:
<%=表达式 %>
用于输出变量和方法返回值;
如:
<%=count++ %> <!--使用表达式输出变量的值 -->
<%=info()%> <!--使用表达式输出方法的返回值 -->
4.JSP脚本:<% %>
JAVA代码必须通过JSP脚本嵌入HTML代码,因此所有能在java程序中执行的代码
都可以在JSP脚本中执行;
5.JSP的3个编译指令:语法 <%@ 编译指令名 属性名="属性值"...%>
- page:该指令是针对当前页的指令;
- include:用于指定包含另一个页面;
- taglib:用于定义和访问自定义标签
6.JSP的7个动作指令
- jsp:forward:执行页面转向,将请求的处理转发到下一个页面
- jsp:param:用于传递参数,必须与其他参数的标签一起使用
- jsp:include:用于动态引入一个JSP页面
- jsp:plugin:用于下载JavaBean或Applet到客户端执行
- jsp:userBean:创建一个JavaBean的实例
- jsp:setProperty:设置javaBean实例的属性值
- jsp:getProperty:输出javaBean实例的属性值
动作指令与编译指令不同,编译指令是通知servlet引擎的处理消息,而
动作指令只是运行时的脚本动作,编译指令在编译servlet时起作用,
而动作指令通常可替换成JSP脚本,是JSP脚本的标准化写法。
1):jsp:forward:用于将页面响应转发给另外的页面,既可以转发给静态的HTML页
面,也可以转发动态的JSP页面,或者转发到容器中的SERVLET
<%@ page contentType="text/html;charset=gb2312; language="java" %> <html><head><title>forward的原始页</title></head> <body>forward的原始页 <jsp:forward page="forward-result.jsp"> <jsp:param name="age" value="29"/> </jsp:forward></body></html>
7:JSP脚本中的9个内置对象:已经默认初始化了,可以直接使用
1)application:javax.servlet.ServletContext的实例
代表JSP所属的web应用本身;
2)config:javax.servlet.Servlet.ServletConfig的实例,
3)exception:java.lang.Throwable的实例,只有当编译指令page的isErrorpage
属 性为true时,该对象才可以使用
4)out:javax.servlet.jsp.JspWriter
5)page
6)pageContext:javax.servlet.jsp.PageContext
7)request:javax.servlet.http.HttpServletRequest
8)response:javax.servlet.http.HttpServletResponse
9)session:javax.servlet.http.HttpSession
8:cookie:
增加cookie也是在response内置对象完成的。
1)创建Cookie实例 构造器:Cookie(String name,String value);
2) 设置Cookie的生命周期,(如果没设置,则浏览器关闭就会自动消失)
3)向客户端写Cookie (addCookie(Cookie c))
<% //增加cookie String name = request.getparameter("name"); Cookie c = new Cookie("username",name); c.setMaxAge(24*3600); response.addCookie(c); %> <% //读取cookie //获取本站在客户端上保留的所有cookie Cookie[] cookies = request.getCookies(); //如果cookie的名为username,表明该Cookie是我们需要访问的cookie for(Cookie c : cookies){ if(c.getName().equals("username")){ out.println(c.getValue()); } } %>
9.session:
代表一次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器
断开,这个过程就是一次会话,浏览器关闭,session结束,数据也会丢失
10.Servlet与JSP的区别:
1)Servlet中没有内置对象,原来JSP中的内置对象都必须由程序员显式创建
2)对于静太的HTML标签,Servlet都必须使用页面输出流每行输出
11自定义标签库
1)开发自定义标签处理类
必须继承javax.servlet.jsp.tagext.SimpleTagSupport
如果标签类包含属性,每个属性都必须有getter/setter方法
重写doTag()方法
2)建立一个*.tld文件,每个*.tld文件对应一个标签库,每个标签库对应多个标
签库 标签库定义文件的根元素为taglib,
还有3个子元素:uri,short-name,tlib-version
3)在JSP中使用自定义标签
使用<%@ taglib uri="" prefix="">导入;
Servlet 必须继承自 HttpServlet
servlet响应客户端请求:
1 doGet
2 doPost
3 doPut
4 doDelete
一般情况下,Servlet对于所有请求的响应都是完全一样的,引时,可以彩重写一个方法来
代替上面的几个方法:只需要重写service()方法即可响应客户端的所有请求
HttpServlet还有两个方法:
init(ServletConfig config):创建Servlet实例时,调用该方法初始化Servlet资源
destroy():销毁Servlet实例时,自动调用该方法,回收资源
通常情况下,不需要重写这两个方法,除非需要在初始化Servlet时,完成某些资源
初始化,才需要重写init()方法,如果需要在销毁Servlet之前,先完成某些资源的回收
如:关闭数据库连接,才需要重写destroy方法。
注:如果重写了init方法,则需要在重写该方法的第一行调用super.init(config)。
<servlet> <servlet-name>firstServlet</servlet-name> <servlet-class>com.FirstServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>firstServlet</servlet-name> <url-pattern>/firstServlet</url-pattern> </servlet-mapping>
2.Servlet的生命周期:
Servlet在容器中运行,其实例的创建及销毁等都不是由程序员决定的,而是由
容器控制的。
1)创建Servlet实例有两个时机:(用户请求之时或应用启动之时)
a.客户端第一次请求某个Servlet时,系统创建该Servlet的实例;大部分的
Servlet都是这种
b.Web应用启动时,立即创建Servlet实例,即load-on-startup Servlet
load-on-startup整数值越小,越优实例化
生命周期:
1)创建Servlet实例
2)Web容器调用Servlet的init方法,对Servlet进行初始末化
3) Servlet初始化后,将一直存在于容器中,处理客户端的请求。
4)Web容器销毁Servlet,先调用destroy方法。
ServletConfig用于获取配置参数的方法,web.xml。为Servlet配置参数使用init-param元
素,包含两个子元素param-name,param-value
web.xml:
<servlet> <servlet-name>firstServlet</servlet-name> <servlet-class>com.FirstServlet</servlet-class> <init-param> <param-name>driver</param-name> <param-value>com.mysql.jdbc.Driver</param-value> </init-param> <init-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/j2ee</param-value> </init-param> <init-param> <param-name>user</param-name> <param-value>root</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>111111</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>firstServlet</servlet-name> <url-pattern>/firstServlet</url-pattern> </servlet-mapping>
在Servlet里可以直接获取配置的参数:
ServletConfig config = getServletConfig(); String driver = config.getInitParameter("driver"); String url = config.getInitParameter("url"); String user = config.getInitParameter("user"); String password = config.getInitParameter("password");
################################################
Filter流程:
Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,
最后Filter再对服务器响应进行后处理;
Filter有如下几个用处:
1 在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest
2 根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据
3 在HttpServletResponse到达客户端之前,拦截HttpServletResponse
4 检查HttpServletResponse,也可以HttpServletResponse头和数据
Filter有以下几种:
1 用户授权的Filter:检查用户请求,过滤掉用户非法的请求
2 日志Filter:详细记录某些特殊的用户请求
3 负责解码的Filter
4 能改变XML内容的Filter等
Filter可以拦截多个请求或响应,一个请求或响应也可被多个Filter拦截
创建一个Filter只需要两个步骤:
1 创建Filter处理类:必须实现javax.servlet.Filter接口。
init(FilterConfig config)
void destroy();
void doFilter(ServletRequest
request,ServletResponse,res,FilterChain chain);
2 web.xml文件中配置Filter
配置Filter:
web.xml
<filter> <filter-name>log</filter-name> <filter-class>com.LogFilter</filter-class> </filter> <!-- 如果没有登录到系统,普能用户只能访问/login.jsp,/proLogin.jsp页面 只有登录了,才可以自由访问其它页面 --> <filter> <filter-name>authority</filter-name> <filter-class>com.AuthorityFilter</filter-class> <!--下面3个init-param元素配置了3个参数 --> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> <init-param> <param-name>loginPage</param-name> <param-value>/login.jsp</param-value> </init-param> <init-param> <param-name>proLogin</param-name> <param-value>/proLogin.jsp</param-value> </init-param> </filter> <filter-mapping> <filter-name>log</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>authority</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
import javax.servlet.Filter; public class AuthorityFilter implements Filter{ private FilterConfig config;//可用于访问获取Filter的配置信息 public void init(FilterConfig config){ this.config = config; } public void destroy(){ this.config = null; } //执行过滤的核心方法 public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException{ //获取配置信息 String encoding = config.getInitParamter("encoding"); String loginPage = config.getInitParamter("loginPage"); String proLogin = config.getInitParamter("proLogin"); //设置request编码用的字符集 request.setCharacterEncoding(encoding); HttpServletRequest req = (HttpServletRequest)request; HttpSession session = req.getSession(true); //获取客户请求的页面 String requestPath = req.getServletPath(); //如果session范围的user为null,即表明没有登录 //且用户请求的即不是登录页面,也不是处理登录的页面 if(session.getAttribute("user") == null && ! requestPath.endsWith(loginPage) &&!requestPath.endsWith(proLogin)){ //forward到登录页面 request.setAttribute("tip","您还没有登录"); request.getRequestDispatcher("loginPage").forward (request,response); }else{ //放行请求 chain.doFilter(request,response); } } }
2 Listener
Listener的作用非常类似于load-on-startup Servlet(但比load-on-startup启动的早),用于在web应用启动时,启动某些后台程序,
这些后台程序负责为系统运行提供支持
使用Listener需要两个步骤:
1.建Listener实现类
2.在web.xml文件中配置Listener;
1) 创建Listener类必须实现ServletContextListener;接口,包括两个方法:
contextInitialized(ServletContextEvent sce)启动web应用时,系统会调用Listener的该方法
contextDestroy(ServletContextEvent sce) 关闭web应用时,系统会调用Listener的该方法
下面将创建一个获取数据库连接的Listener,该Listener会在应用启动时,获取数据库连接,并将连接设置成application范围内的属性
public class GetConnListener implements ServletContextListener{ public void contextInitialized(ServletContextEvent sce){ try{ //取得该应用的ServletContext实例 ServletContext application = sce.getServletContext(); String driver = application.getInitParamter("driver"); String url = application.getInitParamter("url"); String user = application.getInitParamter("user"); String password = application.getInitParamter("password"); Class.forName(driver); Connection conn = DriverManager.getConnection(url,user,password); application.setAttribute("conn",conn); }catch(exception ex){ System.out.println(ex.getMessage()); } } public void contextDestroy(ServletContextEvent sce){ //取得该应用的ServletContext实例 ServletContext application = sce.getServletContext(); Connection conn = (Connection)application.getAttribute("conn"); //关闭数据库 if(conn != null){ try{ conn.close(); }catch(SQLException e){ e.printStackTrace(); } } } }
2)配置Listener
web.xml
<listener>
<listener-class>com.GetConnListener</listener-class>
</listener>
3 表达式语言:${expression} EL表达式:支持加,减,乘,除.
表达式语言( expression language) 是一种简化的数据访问方式(),是JSP的一个重要特性,它并不是一种通用的程序语言,
而仅仅是一种数据访问语言,可以方便的访问应用程序数据
1)表达式语言的内置对象11个
使用表达式语言,可以直接获取请求参数值.可以获取页面中javaBean的指定属性值,获取请求头及获取
page,request,session和application范围的属性值等,
内置对象:
pageContext:代表该页面的pageContext对象 (对应javax.servlet.ServletContext)
pageScope:用于获取page范围的属性值 (对应java.util.Map)
requestScope:用于获取request范围的属性值 (对应java.util.Map )
sessionScope:用于获取session范围的属性值 (对应java.util.Map )
applicationScope: 用于获取application范围的属性值 (对应java.util.Map )
param:用于获取请求的参数值 (对应java.util.Map )如同 ServletRequest.getParameter(String name)。回传String 类型的值
paramValues:用于获取请求的参数值,与param的区别在于,该对象用于获取属性值为数组的属性值,(java.util.Map)
如同 隐含对象 类 型 说 明 ServletRequest.getParameterValues(String name)。回传String []类型的值
header:用于获取请求头的属性值,(对应java.util.Map )如同ServletRequest.getHeader(String name)。回传String 类型的值
headerValues:用于获取请求头的属性值,与header的区别在于,该对象用于获取属性值为数组的属性值
(对应java.util.Map )如同ServletRequest.getHeaders(String name)。回传String []类型的值
initParam:(对应java.util.Map)用于获取请求职Web应用的初始化参数,如同 ServletContext.getInitParameter(String name)。回传String 类型的值
cookie:对应java.util.Map,用于获取指定的cookie值,如同HttpServletRequest.getCookies( )
${param.name}, ${param['name']}
${header.host},${initParam["author"]}
${sessionScope["user"]},${cookie["user"].value};
2).与 [ ] 运算符
EL 提供 . 和 [ ] 两种运算符来存取数据。下列两者所代表的意思是一样的:
${sessionScope.user.sex}
等于
${sessionScope.user["sex"]}
. 和 [ ] 也可以同时混合使用,如下:
${sessionScope.shoppingCart[0].price}
回传结果为shoppingCart中第一项物品的价格。
以下两种情况,两者会有差异:
(1) 当要存取的属性名称中包含一些特殊字符,如 . 或 – 等并非字母或数字的符号,就一定
要使用 [ ],
例如:
${user.My-Name }
上述是不正确的方式,应当改为:
${user["My-Name"] }
(2) 我们来考虑下列情况:
${sessionScope.user[data]}
此时,data 是一个变量,假若data的值为"sex"时,那上述的例子等于${sessionScope.user.sex};
假若data 的值为"name"时,它就等于${sessionScope.user.name}。因此,如果要动态取值时,就可以
用上述的方法来做,但 . 无法做到动态取值。
例如:${username}。
它的意思是取出某一范围中名称为username的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
经验:
1、如果EL表达式无法解析:– <%@ page isELIgnored="false" %>
一、JSTL1、EL运算符>;
2)var指定变量,并把EL运算结果赋值给该变量值为true/false;
3)scope:指定 var变量的范围;
6、迭代标签语法:
<c:forEach items=“collection” var=“name” varStatus=“status” begin=“int“ end=”int” step=“int” > //循环体
</c:forEach>
说明:
1)items:是集合,用EL表达式;
2)var:变量名,存放items
3)varStatus: 显示循环状态的变量
①index:从0开始;
②count:元素位置,从1开始;
③first:如果是第一个元素则显示true;
④last:如果是最后一个元素则显示true;
4)begin:循环的初始值(整型);
5)end: 循环结束 ;
6)step:步长,循环间隔的数值;
7、<c:otherwise>标签
例:如果user.wealthy值true,则显示user.wealthy is true.
<c:choose>
<c:when test="">user.generous is true.</c:when>
<c:when test="">user.stingy is true.</c:when>
<c:otherwise>user.generous and user.stingy are false.</c:otherwise>
</c:choose>
说明:只有当条件user.generous返回值是true时,才显示user.generous is true.只有当条件user.stingy返回值是true时,
才显示user.stingy is true.其它所有的情况(即user.generous和user.stingy的值都不为true)
全部显示user.generous and user.stingy are false.由于JSTL没有形如if (){…} else {…}的条件语句,
所以这种形式的语句只能用<c:choose>、<c:when>和<c:otherwise>标签共同来完成了。
8、c:forTokens>标签说明:
items 进行循环的项目 是 无delims 分割符 是 无begin 开始条件 否 0end 结束条件 否 集合中的最后一个项目step 步长
否 1var 代表当前项目的变量名 否 无varStatus 显示循环状态的变量 否 无例子:
<c:forTokens items="a:b:c:d" delims=":" var="token">
<c:out value=""/>
</c:forTokens>
这个标签的使用相当于java.util.StringTokenizer类。在这里将字符串a:b:c:d以:分开循环四次,token是循环到当前分割到的字符串。
9、<c:redirect>标签
说明:标签将请求重新定向到另外一个页面,它有以下属性 属性 描 述 是否必须 缺省值url url地址
是 无context /后跟本地web应用程序的名字 否 当前应用程序例子:
<c:redirect /'>http://www.yourname.com/login.jsp"/>将请求重新定向到http://www.yourname.com/login.jsp页,
相当于response.setRedirect("http://www.yourname.com/login.jsp");
10、<c:param>标签
说明:<c:param>标签用来传递参数给一个重定向或包含页面,它有以下属性属 性 描 述 是否必须 缺省值name
在request参数中设置的变量名 是 无value 在request参数中设置的变量值 否 无例子:
<c:redirect url="login.jsp"><c:param name="id" value="888"/></c:redirect>将参数888以id为名字传递到login.jsp页面,
相当于login.jsp?id=888
11、<fmt:>格式化标签
说明:需要导入 <%@ taglib prefix="fmt" http://java.sun.com/jsp/jstl/fmt">http://java.sun.com/jsp/jstl/fmt" %>
1)格式化日期<fmt:formatDate value=“” pattern=“yyyy-MM-dd HH:mm:ss”/>
Value:通过EL表达式或<%new Date() %> 取的日期值; Pattern:输出的日期格式;
2) 格式化数字<fmt:formatNumber value="${n}" pattern="###,###.##" />
发表评论
-
一些常用的正则表达式
2011-12-01 21:21 1297<!DOCTYPE html PUBLIC " ... -
js操作table控制tr jquery 两个table左右移动
2011-09-23 16:16 4748一.关于动态操作select的 ... -
jspSmartUpload组件上传下载详解
2011-07-01 13:54 1245jspSmartUpload组件上传下载详解(全攻略,全集) ... -
文件上传Fileupload组件
2011-04-18 22:51 10471.jsp页面:method必须为post,enctype=& ... -
FCKeditor在线编辑器的使用(jsp:html在线编辑器=FCKeditor 2.2+FCKeditor.java 2.3 )
2011-03-18 14:00 864在线编辑器对于我们作 ... -
JSP小结(1)
2011-01-25 15:32 7581、forward和redirect的区别 答:forward ...
相关推荐
本书是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习JSP & Servlet时遇到的概念、操作、应用或认证考试等问题及解决方案。 本书针对Servlet 3.0的新功能全面改版,无论是章节架构与范例程序代码,都...
**JSP(Java Server Pages)与Servlet是Java Web开发中的两个核心技术,它们在构建动态网页和处理客户端请求方面起着至关重要的作用。** **JSP技术:** JSP是一种服务器端脚本语言,用于创建动态网页。它允许开发者...
**JSP(Java Server Pages)与Servlet是Java Web开发中的两个核心技术,它们在构建动态Web应用程序方面发挥着关键作用。本学习笔记将深入探讨这两个概念,以及它们如何协同工作以提供高效、灵活的Web服务。** **JSP...
Jsp&Servlet;入门级项目全程实录源码文件Jsp&Servlet;入门级项目全程实录源码文件Jsp&Servlet;入门级项目全程实录源码文件Jsp&Servlet;入门级项目全程实录源码文件
本书是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习JSP & Servlet时遇到的概念、操作、应用或认证考试等问题及解决方案。, 本书针对Servlet 3.0的新功能全面改版,无论是章节架构与范例程序代码,都做...
吉林大学珠海学院JSP&Servlet学习笔记(第二版)课后答案 本资源为吉林大学珠海学院JSP&Servlet学习笔记(第二版)的课后答案,涵盖了JSP和Servlet相关的知识点。本笔记共分为九章,每章节都包含了相关的问题答案,...
书中详细介绍了Servlet/JSP与Web容器之间的关系,必要时从Tomcat源代码分析,了解Servlet/JSP如何与容器互动。本书还涵盖了文本处理、图片验证、自动登录、验证过滤器、压缩处理、JSTL应用与操作等各种实用范例。 ...
**JSP(JavaServer Pages)与Servlet是Java Web开发中两个关键的技术,它们在Web应用程序中扮演着重要的角色。** **JSP** 是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,使得网页具有动态生成的能力...
**JSP(JavaServer Pages)与Servlet是Java Web开发中的两个核心技术,它们在构建动态Web应用程序方面发挥着关键作用。本篇文章将详细讲解这两个技术及其相互关系,以及如何通过学习笔记和提供的源码来深入理解它们...
[JSP&Servlet学习笔记(第2版)] 林信良
在IT行业中,Web开发是一项核心技能,而基于JSP(JavaServer Pages)和Servlet的开发是构建动态网站的常见方式。本项目是一个基于这两项技术的购物车应用,旨在帮助初学者理解如何将它们结合起来实现实际功能。在这...
根据提供的文件信息,标题为“JSP&Servlet学习笔记(第2版)_打印版”,描述指出文档经过空白边裁剪处理以便于打印。虽然提供的部分内文无法直接转化为明确的知识点,但我们可以根据标题和描述推测该文档的主要内容,...
总之,《jsp&servlet电子书》是学习JSP和Servlet的理想教材,无论你是初学者还是有一定基础的开发者,都能从中获益匪浅。通过阅读这本书,你将能够熟练地运用这两种技术构建高效的Web应用程序,解决实际开发中的各种...
这些文件名称列表揭示了一个关于Web开发的教程结构,主要涵盖了JSP(JavaServer Pages)、Servlet、JavaScript、Ajax和jQuery这五个关键的技术。接下来,我们将详细探讨这些技术及其在实际应用中的重要性。 **JSP...
jsp&servlet笔记jsp&servlet笔记jsp&servlet笔记
《JSP & Servlet学习笔记(第2版)》是作者多年来教学实践经验的总结,汇集了学生在学习JSP&Servlet;或认证考试时遇到的概念、操作、应用等各种问题及解决方案。 《JSP & Servlet学习笔记(第2版)》针对Servlet 3.0的...