参考网站:http://www.runoob.com/jsp/jsp-tutorial.html
如果大家觉得哪里不对,欢迎指出.......
一、生命周期
jspInit():jsp初始化
jspDestroy():jsp销毁
_jspService(HttpServletRequest request,
HttpServletResponse response):执行jsp
二、语法
1.脚本语言:
<% 代码片段 %>
2.声明:
<%! declaration; [ declaration; ] %>
3.表达式:
<%= 表达式 %>
4.注解:
<%-- 这是注解 --%>
5.指令(http://www.runoob.com/jsp/jsp-directives.html):
<%@ page ... %> 页面的依赖属性
<%@ include ... %> 包含其他文件
<%@ taglib ... %> 引入标签库
6. JSP行为(http://www.runoob.com/jsp/jsp-actions.html):
jsp:include 用于在当前页面中包含静态或动态资源
jsp:useBean 寻找和初始化一个JavaBean组件
jsp:setProperty 设置JavaBean组件的值
jsp:getProperty 将JavaBean组件的值插入到output中
7. JSP隐含对象(http://www.runoob.com/jsp/jsp-implicit-objects.html):
Request HttpServletRequest类的实例
Response HttpServletResponse类的实例
Out PrintWriter类的实例,用于把结果输出至网页上
Session HttpSession类的实例
Application ServletContext类的实例,与应用上下文有关
Config ServletConfig类的实例
pageContext PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
Page 类似于Java类中的this关键字
Exception Exception类的对象,代表发生错误的JSP页面中对应的异常对象
8. 控制流语句:
If else / for / switch case / while /
三、设置状态码
public void sendError(int code, String message);
四、JSP表单处理
Get() :显示获取
Post()方法 :隐式获取
1.getParameter(): 使用 request.getParameter() 方法来获取表单参数的值。
2.getParameterValues(): 获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量 ,如checkbox类型
3.getParameterNames():该方法可以取得所有变量的名称,该方法返回一个Emumeration。
eg:
Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()) {
String paramName = (String)paramNames.nextElement();
out.print(paramName + "\n");
String paramValue = request.getParameter(paramName);
out.println(paramValue + "\n");
}
4.getInputStream():调用此方法来读取来自客户端的二进制数据流。
五、JSP过滤器
目的:
1.在客户端的请求访问后端资源之前,拦截这些请求。
2.在服务器的响应发送回客户端之前,处理这些响应。
过滤器:
· 身份验证过滤器(Authentication Filters)。
· 数据压缩过滤器(Data compression Filters)。
· 加密过滤器(Encryption Filters)。
· 触发资源访问事件过滤器。
· 图像转换过滤器(Image Conversion Filters)。
· 日志记录和审核过滤器(Logging and Auditing Filters)。
· MIME-TYPE 链过滤器(MIME-TYPE Chain Filters)。
· 标记化过滤器(Tokenizing Filters)。
· XSL/T 过滤器(XSL/T Filters),转换XML内容。
方法:
//完成实际过滤操作
public void doFilter (ServletRequest, ServletResponse, FilterChain)
//完成初始化操作(只执行一次)
public void init(FilterConfig filterConfig)
//Servlet在销毁过滤器实例时调用该方法
public void destroy()
FilterConfig使用:
eg:
public void init(FilterConfig config) throws ServletException {
// 获取初始化参数
String site = config.getInitParameter("Site");
// 输出初始化参数
System.out.println("网站名称: " + site); }
web.xml配置各节点说明:
1.
·
·
·
· 在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。
2.
六、Cookie处理
Cookie需对中文进行编码和解码:
String str = java.net.URLEncoder.encode("中文","UTF-8"); //编码
String str =java.net.URLDecoder.decode("编码后的字符","UTF-8");// 解码
常用方法:
1.public void setDomain(String pattern) //设置cookie的域名
2.public String getDomain() //获取cookie的域名
3.public void setMaxAge(int expiry) //设置cookie的有效期
4.public int getMaxAge() //获取cookie的有效期
5.public String getName() //返回cookie的名称
6.public void setValue(String newValue) //设置cookie的值
7.public String getValue() //返回cookie的值
8.public void setPath(String uri) //设置cookie路径
9.public String getPath() //获取cookie路径
10.public void setSecure(boolean flag) //指明cookie是否要加密传输
11.public void setComment(String purpose) //设置注释描述cookie的目的
12.public String getComment() //返回描述cookie目的的注释
使用jsp设置cookie实例:
1.创建cookie对象:Cookie cookie = new Cookie("key","value");
(名称和值中不能包含([ ] ( ) = , " / ? @ : ; )任意一个字符)
2.设置有效期:cookie.setMaxAge(60*60*24);
3.将cookie发送至http响应头中:response.addCookie(cookie);
Jsp获取cookie:
Cookie cookie = null;
Cookie[] cookies = null;
// 获取cookies的数据,是一个数组
cookies = request.getCookies();
if( cookies != null ){
for (int i = 0; i < cookies.length; i++){
cookie = cookies[i];
out.print("参数名 : " + cookie.getName());
out.print("
");
out.print("参数值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +"
");
使用JSP删除cookie:
1.获取一个已经存在的cookie然后存储在Cookie对象中。
2.将cookie的有效期设置为0。 //cookie.setMaxAge(0);
3.将这个cookie重新添加进响应头中。 //response.addCookie(cookie);
七、JSP Session
禁止会话跟踪:<%@ page session="false" %>
常用的方法:
1.public Object getAttribute(String name)//返回session对象中与指定名称绑定的对象
2.public Enumeration getAttributeNames() //返回session对象中所有的对象名称
3.public long getCreationTime() //返回session对象被创建的时间(毫秒)
4.public String getId() //返回session对象的ID
5.public long getLastAccessedTime() //返回客户端最后访问的时间(毫秒)
6.public int getMaxInactiveInterval() //返回最大时间间隔(秒)
7.public void invalidate() //解绑任何与该session绑定的对象
8.public boolean isNew() //返回是否为一个新的客户端,或者客户端是否拒绝加入session
9.public void removeAttribute(String name) //移除session中指定名称的对象
10.public void setAttribute(String name, Object value) //使用指定的名称和值来产生一个对象并绑定到session中
11.public void setMaxInactiveInterval(int interval) //用来指定时间(秒),servlet容器将会在这段时间内保持会话有效
删除session数据:
1. 移除一个特定的属性:
调用public void removeAttribute(String name) 方法来移除指定的属性。
2. 删除整个会话:
调用public void invalidate() 方法来使整个session无效。
3. 设置会话有效期:
调用 public void setMaxInactiveInterval(int interval) 方法来设置session超时。
4. 登出用户:
支持servlet2.4版本的服务器,可以调用 logout()方法来登出用户,并且使所有相关的session无效。
5. 配置web.xml文件:
如果使用的是Tomcat,可以向下面这样配置web.xml文件:
(默认30分钟)
八、JSP文件上传
HTML 代码创建了一个文件上传表单。以下几点需要注意:
· 表单 method 属性应该设置为POST 方法,不能使用 GET方法。
· 表单 enctype 属性应该设置为multipart/form-data.
· 表单 action 属性应该设置为在后端服务器上处理文件上传的 Servlet文件。下面的实例使用了UploadServlet Servlet来上传文件。
· 上传单个文件,您应该使用单个带有属性 type="file" 的 标签。为了允许多个文件上传,请包含多个name属性值不同的input标签。输入标签具有不同的名称属性的值。浏览器会为每个input标签关联一个浏览按钮。
jsp文件上传实例:http://blog.csdn.net/alan_tw/article/details/78391462
九、JSP日期处理
使用java API中的Date类。两个构造函数:Date(),Date(long millisec)
1.boolean after(Date date) //如果比给定的日期晚,则返回true,否则返回false
2.boolean before(Date date) //如果比给定的日期早,则返回true,否则返回false
3.Object clone( ) //获取当前对象的一个副本
4.int compareTo(Date date) //如果与给定日期相等,则返回0,如果比给定日期早,则返回一个负数,如果比给定日期晚,则返回一个正数
5.int compareTo(Object obj) //与 compareTo(Date) 方法相同,如果 obj 不是Date类或其子类的对象,抛出ClassCastException异常
6.boolean equals(Object date) //如果与给定日期相同,则返回true,否则返回false
7.long getTime( ) //返回从1970年1月1日凌晨至此对象所表示时间的毫秒数
8.int hashCode( ) //返回此对象的哈希码
9.void setTime(long time) //使用给定参数设置时间和日期,参数time表示从1970年1月1日凌晨至time所经过的毫秒数
10.String toString( ) //将此对象转换为字符串并返回这个字符串
使用SimpleDateFormat格式化Date
Date dNow = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
out.print( "ft.format(dNow) ");
十、JSP页面重定向
String site = "http://www.baidu.com" ;
response.setStatus(response.SC_MOVED_TEMPORARILY);
response.setHeader("Location", site);
或者
response.sendRedirect("http://www.baidu.com");
十一、JSP点击量统计
实现计数器,通过application对象的setAttribute()和getAttribute()。
application.setAttribute(String Key, Object Value);
application.getAttribute(String Key);
缺点就是当jsp实现jspDestroy()的时候就被销毁了,得重新计数。
解决方法:
1.在数据库中定义一个用于统计网页访问量的数据表 count,字段为 hitcount,hitcount 默认值为0,将统计数据写入到数据表中。
2.在每次访问时我们读取表中 hitcount 字段。
十二、JSP实现自动刷新
Response.setIntHeader("Refresh", 5),setRefreshHeader() //自动刷新