JSP的生命周期
1.编译阶段(servlet容器编译servlet源文件,生成servlet类)
jsp编译过程包括(1.解析jsp文件 2.将jsp文件转为servlet 3.编译servlet)
2.初始化阶段(加载与jsp对应的servlet类,创建其实例,并调用他的初始化方法)
容器载入jsp文件后,它会在为请求提供任何服务前调用jspInit()方法
3.执行阶段(调用与jsp对应的servlet实例的服务方法)
当jsp网页完成初始化后,jsp引擎将会调用_jspservice()方法
4.销毁阶段(调用与jsp对应的servlet实例的销毁方法,然后销毁servlet实例)
jspDestory()方法在jsp中等价于servlet中销毁方法。
jsp语法
1.〈% 代码片段 %>
延伸->如何解决jsp页面中的中文编码问题
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
延伸如何解决get和post的中文乱码问题
post:在web.xml文件中配置一个CharacterEncodingFilter过滤器。设置为utf-8
get:有两种方法 1.修改tomcat配置文件添加编码与工程编码一致 2.对参数进行重新编码String username= new String(Request.getParameter("username").getBytes("ISO8859-1"),"utf-8");
2.jsp声明
一个声明语句可以声明一个或者多个变量、方法,jsp文件中必须先声明才能使用
<%! int i = 0; %>
<%! int a, b, c; %>
<%! Circle a = new Circle(2.0); %>
3.jsp表达式 <%= 表达式 %>
例子:<p> 今天的日期是: <%= (new java.util.Date()).toLocaleString()%></p>
4.jsp注释 <%--注释--%> <!--注释-->,后者在查看源代码时可以看见
5.jsp指令标签
1.<%@ page ... %>定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
2.<%@ include ... %> 包含其他文件
3.<%@ taglib ... %>引入标签库的定义,可以是自定义标签
6.jsp行为
1.jsp:include 用于在当前页面中包含静态或动态资源
2.jsp:forward 从一个JSP文件向另一个文件传递一个包含用户请求的request对象
3.jsp:element 动态创建一个XML元素
4.jsp:attribute 定义动态创建的XML元素的属性
5.jsp:body 定义动态创建的XML元素的主体
6.jsp:text 用于封装模版数据
7.jsp:useBean
8.jsp:setProperty
9.jsp:getProperty
10.jsp:plugin
7.JSP九大内置对象
1.request
2.response
3.out
4.session
5.application
6.config
7.pageContext
8.page
9.Exception
8.JSP http状态码
1.200 请求被确认 OK
2.400 服务器无法识别请求
3.404 服务器无法找到所请求的页面(一般时路径错误)
4.500 请求不完整,服务器遇见了出乎意料的状况
。。。。。
9.JSP表单处理
提交数据
浏览器中使用GET方法和POST方法向服务器提交数据
JSP读出表单数据
1.getParameter(): 使用 request.getParameter() 方法来获取表单参数的值。
2.getParameterValues(): 获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量 ,如checkbox类型。
3.getParameterNames():该方法可以取得所有变量的名称,该方法返回一个 Enumeration(枚举类)。
4.getInputStream():调用此方法来读取来自客户端的二进制数据流。
10.JSP cookie处理
1.使用JSP设置cookie
1.创建一个cookie对象 Cookie cookie = new Cookie("key","value");
2.设置有效期 cookie.setMaxAge(60*60*24);默认以秒单位
3.将cookie发送到HTTP响应头中 response.addCookie(cookie);
2.使用JSP读取Cookie
1.调用request.getCookies()方法,获取的是一个Cookie对象的数组
cookies = request.getCookies();
2.遍历数组,用getName()和getValue()方法获取每一个cookie的名称和值。
3.使用JSP删除cookie
1.获取一个已经存在的cookie然后存储在Cookie对象中
Cookie cookie = null;
假设存在的cookie为cookie[i]
cookie = cookie[i];
2.将cookie的有效期设置为0;
cookie.setMaxAge(0);
3.将这个cookie重写添加进响应头中
response.addCookie(cookie);
11.JSP Session处理
HTTP是无状态协议,意味着每次客户端检索网页时,都要单独打开一个服务器连接,因此服务器不会记录下先前客户端请求的任何信息,有三种方式来维持客户端与服务器的会话(拓展->有状态协议包括TCP.FTP,无状态协议包括HTTP,UDP,有状态和无状态帮助理解(转自某乎)有状态就是通信双方要记住双方,并且共享一些信息。而无状态协议的通信每次都是独立的,与上一次通信没什么关系)
1.Cookies
网络服务器可以指定一个唯一的sessionID作为cookie来代表每个客户端,用来识别这个客户端接下来的请求
2.隐藏表单域
一个网络服务器可以发送一个隐藏HTML表单域和一个唯一的sessionID,意味着当表单提交时,指定的名称和值会自动包含在GET或POST数据中。
3.重写URL
可以在每个URL后面添加一些额外的数据来分区会话,服务器能够根据这些数据来关联
session标识符
session对象的一些重要方法
1.getAttribute(String name)返回session对象中与指定名称绑定的对象
2.getId()返回session对象的ID
3.invalidate()将session无效化,解绑任何与该session绑定的对象
4.isNew()返回是否为一个新的客户端,或者客户端是否拒绝加入session
5.removeAttribute(String name)移除session中指定名称的对象
6.setMaxInactiveInterval(int interval),设置会话有效期,默认单位秒。
。。。。
删除Session数据(有以下几种方法)
1.移除一个特定的属性
用上面的removeAttribute方法
2.删除整个会话
调用上面的invalidate()方法使整个session无效
3.设置会话有效期
调用这个setMaxInactiveInterval(int interval)方法
4.登出用户
用logout()方法登出用户,并且使所有相关的session无效
5.配置web.xml文件
如果是tomcat,可以如下配置
<session-config>
<session-timeout>15</session-timeout>
</session-config>
即15分钟后失效,默认为30分钟,单位为分钟。
JSP文件上传
1.需要引入的包,commons-fileupload、commons-io
2.创建文件上传表单
(1.表单的method属性应该设置为POST方法,不能用GET方法-》为什么?post可以传送大量数据,GET传输的数据量小,因为受URL长度限制,但效率高)-》get和post的区别?1.GET把参数包含在URL中,POST通过request body传递参数 2.GET请求在URL中传送的参数是有长度限制,而POST没有 3.GET请求只能进行URL编码,而POST支持多种编码方式 4.对参数的数据类型,GET只接受ASCII字符,而POST没有限制。。。。。
(应付面试)
(2.表单enctype属性应该设置为multipart/form-data)
(3.表单action属性应该设置为在后端服务器上处理文件上传的servlet文件)
3.编写后台Servlet
定义一个UploadServlet继承HttpServlet,重写其中的方法,具体后面再讲。
4.在web.xml文件中配置UploadServlet
包括配置<servlet>以及<servlet-mapping>
JSP日期处理
1.Date类的构造函数
Date有两个构造函数 Date()和Date(long millisec)
Date()使用当前日期和时间来初始化对象
Date(long millisec)表示从1970年1月1日凌晨至所要表示时间的毫秒数。
2.获取Date对象后所拥有的方法
1.boolean after(Date date)
如果比给定的日期晚,则返回true,否则返回false
2.boolean before(Date date)
3.int compareTo(Date date)
如果与给定日期相等,则返回0,如果比给定日期早,则返回一个负数,如果比给定日期晚,则返回一个正数
4.boolean equals(Object date)
5.long getTime( )
返回从1970年1月1日凌晨至此对象所表示时间的毫秒数
6.String toString( )
将此对象转换为字符串并返回这个字符串
3.JSP获取当前日期和时间
<%
Date date = new Date();
out.print(date.toString);
%>
4.JSP使用SimpleDateFormat格式化日期
<%
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFomat("yyyy-MM-dd HH:mm:ss");
out.print(sf.format(date));
%>
JSP页面重定向
使用response对象的sendRedirect(String location)方法
该方法将状态码和新的页面位置作为响应返回给浏览器,可以如下替代
response.setStatus(response.SC_MOVED_TEMPORARILY);
respose.setHeader("location",site);
JSP点击量统计
用于查询某个页面被访问的次数,一般在页面上添加页面统计器。页面访问的统计一般在用户第一次载入时累加该页面的访问数上。
JSP页面代码
<%
Integer hitsCount =
(Integer)application.getAttribute("hitCounter");
if( hitsCount ==null || hitsCount == 0 ){
/* 第一次访问 */
out.println("欢迎访问菜鸟教程!");
hitsCount = 1;
}else{
/* 返回访问值 */
out.println("欢迎再次访问菜鸟教程!");
hitsCount += 1;
}
application.setAttribute("hitCounter", hitsCount);
%>
<p>页面访问量为: <%= hitsCount%></p>
JSP自动刷新
JSP自动刷新页面的方法 response对象的setIntHeader()方法
public void setIntHeader(String header, int headerValue)
给header取个名字即可,value值的单位为秒
模拟数字时钟
<%
response.setIntHeader("Refresh",5);//5秒钟刷新一次
Calendar calendar = new GregorianCalendar();
String am_pm;
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
if(calendar.get(Calendar.AM_PM) == 0)
am_pm = "AM";
else
am_pm = "PM";
String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
out.println("当前时间为: " + CT + "\n");
%>