JSP基础语法

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类的实例,是向客户端输出内容的对象;

常用方法如下:
1void	println();	//向客户端打印字符串
2void	clear();	//清除缓冲区的内容,如果是flush之后调用会抛出异常
3void	clearBuffer();	//清除缓冲区的内容,如果是flush之后,不会抛出异常;
4void	flush();	//将缓冲区内容输出到客户端
5int	getBufferSize();	//返回缓冲区 以字节数的大小,若是不设置缓冲区则为0
6int	getRemaining();	//返回缓冲区剩余的空间大小
7boolean	isAutoFlush();	//返回缓冲区满时,是自动清空还是抛出异常
8void	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、销毁:

  1. 调用session.invalidate();方法,进行销毁session。
  2. 等到session过期,即可
  3. 服务器重新启动,销毁旧的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对象

  1. application对象实现了用户间数据的共享,可存放全局变量
  2. application开始于服务器启动,终止于服务器关闭
  3. 在用户的前后连接或不同用户之间的连接,都可以对application对象的同一个属性进行操作
  4. 在任何地方对application对象的属性操作,都将会影响其他用户对此的访问
  5. 服务器的启动和关闭决定了application对象的生命
  6. 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对象

  1. pageContext对象提供了对JSP页面内所有的对象及名字空间的访问
  2. pageContext对象可以访问到本页所在的session,也可以取本页面所在的application的某一个属性值
  3. pageContext对象相当于页面中所有功能的集大成者
  4. 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>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值