JSP基础语法
1、JSP指令
page指令
<%@page 属性1="属性值" 属性2="属性值1,属性值2" .....属性n="属性值1"%>
2、JSP注释
3、JSP脚本
在JSP页面中执行的java代码。
语法:
<% Java代码 %>
4、Jsp声明
5、JSP表达式
6、JSP页面生命周期
2、Jsp内置对象
简介:JSP内置对象是web容器创建的一组对象,不使用new关键字就可以使用的内置对象
Web程序的请求响应模式
1、用户发送请求(request)
2、服务器请求响应对象(response)
缓冲区:Buffer,所谓缓冲区就是内存中的一块区域用来保存临时数据;
2.1、out对象
out对象是JspWriter类的实例,是向客户端输出内容的对象;
常用方法如下:
1、void println(); //向客户端打印字符串
2、void clear(); //清除缓冲区的内容,如果是flush之后调用会抛出异常
3、void clearBuffer(); //清除缓冲区的内容,如果是flush之后,不会抛出异常;
4、void flush(); //将缓冲区内容输出到客户端
5、int getBufferSize(); //返回缓冲区 以字节数的大小,若是不设置缓冲区则为0
6、int getRemaining(); //返回缓冲区剩余的空间大小
7、boolean isAutoFlush(); //返回缓冲区满时,是自动清空还是抛出异常
8、void close(); //关闭输出流
2.2、get与post的区别
<form name="regDorm" action="动作" method="提交方式">
</form>
表单有两种提交方式: get 和 post
1、get:以明文的方式通过URL提交数据,数据在URL中可以看见。提交的数据最多不超过2KB。安全性较低,效率高。适合提交数量不大,安全性不高的数据。例如:搜索,查询等功能。
2、post: 将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性搞得用户信息。比如:注册,修改,上传等功能.
2.3、request对象
客户端的请求信息被封装在request对象中,通过request才能了解客户的需求,之后进行相应。
request是HttpServletRequest类的实例,request对象具有请求域,即完成客户端请求之前,该对象一直有效。
//常用方法如下
String getParameter(String name); //返回name指定参数的参数值
String[] getParameterValues(String name); //犯规包含参数name的所有值的数组
void setAttribute(String name,String value); //存储此请求中的属性
Object getAttribute(String name); //返回指定属性的属性值
String getContentType(); //得到请求体的MINE型号
String getProtocol(); //返回请求用的协议类型及版本号
String getServerName(); //返回接收请求的服务器主机名
int getServerport(); //返回服务器接受请求所用的端口号
String getCharacterEncoding(); //返回字符编码方式
void setCharacterEncoding(); //设置请求的字符编码方式
int getContentLength(); //返回请求体的长度
String getRemoteAddr(); //返回发送请求的客户端IP地址
String getRealPath(); //返回 虚拟路径的真实路径
String request.getContextPAth(); //返回上下文路径
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="requestRegister.jsp" name="requestForm" method="post">
<table>
<tr>
<td>姓名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>爱好:</td>
<td><input type="checkbox" name="hobby" value="read">读书
<input type="checkbox" name="hobby" value="listen">听音乐
<input type="checkbox" name="hobby" value="film">电影
<input type="checkbox" name="hobby" value="internet">上网</td>
</tr>
<tr>
<td><input type="submit" value="注册"/></td>
</tr>
</table>
</form>
<br/>
<br/>
<a href="/HelloJsp/InsideObject/requestRegister.jsp?username=李四">测试使用URL传递参数</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setAttribute("password","123456");
request.setCharacterEncoding("utf-8");//解决form表单 ,中文乱码问题。无法解决URL传递乱码问题;
%>
<%
String username = request.getParameter("username");
String[] hobbys = request.getParameterValues("hobby");
%>
用户名:<%
if (username != null) {
out.println(username);
}
%><br /> 爱好:<%
if (hobbys != null) {
for (String hobby : hobbys) {
out.println(hobby + " ");
}
}
%>
<br/>
password:<%=request.getAttribute("password") %><br/>
<br/>请求体的MIME类型:<%=request.getContentType() %>
<br/>协议类型和其版本号:<%=request.getProtocol() %>
<br/>服务器的主机名:<%=request.getServerName() %>
<br/>服务器接受请求所用的端口号:<%=request.getServerPort() %>
<br/>字符编码方式:<%=request.getCharacterEncoding() %>
<br/>请求体的长度:<%=request.getContentLength() %>
<br/>发送请求的客户端IP地址:<%=request.getRemoteHost() %>,<%=request.getRemoteUser() %>,<%=request.getRemoteAddr()%>,<%=request.getRemotePort() %>
<br/>虚拟路径的真实路径:<%=request.getRealPath("requestRegister.jsp") %>
<br/>返回上下文路径:<%=request.getContextPath() %>
<br/>
</body>
</html>
2. 4、response对象
response对象包含了响应客户请求的有关信息,但是在JSP中很少直接用到它。response是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其他页面的response对象对当前页面无效。
//常用方法
String getCharacterEncoding(); //返回响应 用的是何种字符编码
void setContentType(String type); //设置响应的MIME类型
PrintWriter getWriter(); //返回可以向客户端输出字符的一个对象(比较:PrintWriter与内置对象out对象的区别)
//PrintWriter对象打印出来的内容,是先于 Jsp内置对象out打印出来的内容 显示。使用out.flush方法解决该问题。
sendRedirect(java.lang.String location); //重新定向客户端的请求
<%@page import="java.io.PrintWriter"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
response.setCharacterEncoding("utf-8");//设置响应编码
response.setContentType("text/html; charset=UTF-8");
out.println("这是Jsp内置对象out!");
out.flush();
%>
<hr/>
<%
PrintWriter outer = response.getWriter();//通过response对象获取输出流对象
outer.println("这是response对象生成的输出流outer对象!");
%>
<%
response.sendRedirect("responseRedirect.jsp");
%>
</body>
</html>
2.5、请求转发与重定向的区别
请求转发:服务器行为,request.getRequestDispatcher(“url”).forward(request,response);
是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变
请求重定向:客户端行为,response.sendRedirect(“URL”);
从本质上来讲,等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变;
2.6、什么是session
1、session表示客户端与服务器的一次会话
2、Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。
3、session实际上是一个特定的时间概念。
4、在服务器的内存中保存着不同的session。
2.7、session对象
1、session对象是一个JSP内置对象
2、session对象在第一个JSP页面被装载时自动创建,完成会话期间管理。
3、从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束被称为一个会话。
4、当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种方法知道这是一个客户,就需要session对象。
5、session对象是HttpSession类的实例。
session对象常用方法
long getCreateTime(); //返回SESSION创建时间
public String getId(); //返回SESSION创建时JSP引擎为它设的唯一ID号
public Object setAttribute(String name,Object value); //使用指定名称将对象绑定到次会话
public Object getAttribute(String name); //返回于此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null
String[] getValueNames(); //返回一个包含次Session中所有可用属性的数组
int getMaxInactiveInterval(); //返回两次请求间隔多长时间此SESSION被取消(单位:秒)
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.text.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session.jsp</title>
</head>
<body>
<%
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date d = new Date(session.getCreationTime());
%>
Session创建时间:<%=sdf.format(d) %><br/>
唯一ID号:<%=session.getId() %><br/>
<%session.setMaxInactiveInterval(1000); %>
Session被取消间隔时长:<%=session.getMaxInactiveInterval() %>秒<br/>
<%
session.setAttribute("username", "zhangsan");
session.setAttribute("password", "123456");
session.setAttribute("collage", "THU");
session.setAttribute("class", "computer and technology");
session.setAttribute("age", "17");
session.setAttribute("hobby", "basketball,boxing");
%>
<a href="sessionDemo2.jsp">跳转到sessionDemo2.jsp页面</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
用户名:<%=session.getAttribute("username")%> <br/>
session中所有的属性:<br/>
<% String[] valuesName = session.getValueNames();
for(String name :valuesName){
out.println(name+":");
out.println(session.getAttribute(name));
out.println("<br/>");
}
%>
</body>
</html>
2.8、session生命周期
1、创建:当客户端第一次访问某个jsp或者Servlet时,服务器会为当前会话创建一个SessionId,每次客户端向服务器发送请求时,都会将次SessionId携带过去,服务器会对此SessionId进行校验。
2、活动:
-
2.1、某次会话当中通过超链接打开的新页面属于同一次会话
-
2.2、只要当前会话页面没有完全关闭,重新打开新的浏览器窗口访问同一个项目资源,都属于同一次会话
-
2.3、除非本次会话的所有页面都关闭后,再重新访问某个Jsp或者Servlet,都将会创建新的会话
-
注意:只要原会话还存在,只要旧的SessionId仍然存在于服务端,只不过再也不会有客户端携带它进行服务器端校验
3、销毁:
- 调用session.invalidate();方法,进行销毁session。
- 等到session过期,即可
- 服务器重新启动,销毁旧的session。
设置Session对象存在时间:
1、Tomcat默认session超时时间为30分钟
2、设置session超时时间的两种方式
2.1、session.setMaxInactiveInterval(时间);//单位:秒
2.2、web.xml文件中
<session-config>
<session-timeout>
10
</session-timeout>
</session-config> //单位是分钟
2.9、application对象
- application对象实现了用户间数据的共享,可存放全局变量
- application开始于服务器启动,终止于服务器关闭
- 在用户的前后连接或不同用户之间的连接,都可以对application对象的同一个属性进行操作
- 在任何地方对application对象的属性操作,都将会影响其他用户对此的访问
- 服务器的启动和关闭决定了application对象的生命
- application对象是ServletContext类的实例
public void setAttribute(String name,Object value); //使用指定名绑定属性值
public Object getAttribute(String name); //返回次会话中指定的名称绑定的属性值,无则null
Enumeration getAttributeNames(); //返回所有可用属性名的枚举
String getServerInfo(); //返回JSP(Servlet)引擎名及其版本号
2.10、page对象
page对象就是指向当前JSP页面本身,有点像类中的this指针,它是java.lang.Object类的实例。
常用方法如下:
class getClass(); //返回此Object的类
int hashCode(); //返回此Object的hash码
boolean equals(Object obj); //判断此Object是否与指定的Object对象相等
void copy(Object obj); //将此Object拷贝到指定的Object对象中
Object clone(); //克隆此Object对象
String toString(); //将次Object对象转化为String类的对象
void notify(); //唤醒一个等待的线程
void notifyAll(); //唤醒所有等待的线程
void wait(int timeout); //将一个线程处于等待,知道timeout结束或者被唤醒
void wait(); //使一个线程处于等待直到被唤醒
2.11、pageContext对象
- pageContext对象提供了对JSP页面内所有的对象及名字空间的访问
- pageContext对象可以访问到本页所在的session,也可以取本页面所在的application的某一个属性值
- pageContext对象相当于页面中所有功能的集大成者
- pageContext对象的本类名也叫pageContext
常用方法如下:
JspWriter getOut(); //返回当前客户端响应被使用的JspWriter流(out)
HttpSession getSession(); //返回当前页中的HttpSession对象(session)
Object getPage(); //返回当前页的Object对象(page)
ServletRequest getResuest(); //返回当前页的ServletRequest对象(request)
ServletResponse getResponse(); //返回当前页的ServletResponse对象(response)
void setAttribute(String name,Object attribbute); //设置属性及其属性值
Object getAttribute(String name,int scope); //在指定范围内取出属性的值
int getAttributeScope(); //返回某个属性的作用范围
void forword(String relativeURLPath); //使当前页面重导到另一个页面
void include(String relativeUrlPatrh); //在当前位置包含另一文件
2.12、Config对象
config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)
常用方法如下:
ServletContext getServletContext(); //返回含有服务器相关信息的ServletContext对象
String getInitParameter(String name); //返回初始化参数的值
Enumeration getInitParameterNames(); //返回Servlet初始化所需要参数的枚举
2.13、Exception对象
exception对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。如果一个JSP页面要应用次对象,就必须把isErrorPage设置为true,否则无法编译。它实际上是一个java.lang.Throwable的对象。
常用方法如下:
String getMessage(); //返回描述异常的消息
String toString(); //返回关于异常的简短描叙信息
void printStackTrace(); //显示异常及其栈轨迹
Throwable FillInStackTrace(); //重写异常的执行栈轨迹
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true" errorPage="exceptionDeal.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>测试异常界面</title>
</head>
<body>
<%
System.out.println(5/0); //抛出运行时异常。算术异常。
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Exception Deal</title>
</head>
<body>
异常消息:<%=exception.getMessage() %>
<br/>
异常的堆栈轨迹:<%=exception.getStackTrace() %>
<br/>
异常的字符串描述:<%=exception.toString()%>
</body>
</html>