jsp的简介:
JSP全称:Java Server Pages
将java代码嵌入到html页面中
1.1:指令部分:对当前页面设置的区域,一般在页面的第一行
1.2:小脚本:java代码嵌入的区域
1.3:表达式:输出区域 输出显示到页面中
<!--JSP的组成部分-->
<!--这个区域是JSP的指令部分-->
<%@ page language="java" import="java.util.Date,java.text.SimpleDateFormat" pageEncoding="utf-8" %>
<!--这些是HTML静态内容-->
<html>
<head>
<title>我的第一个JSP页面</title>
</head>
<!--这个是JSP的小脚本-->
<body>
<%
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String now=sdf.format(date);
%>
今天是:<%=now %>
</body>
</html>
jsp的九大内置对象
out对象:输出对象 负责将内容输出显示到页面
request对象:请求对象 获取浏览器发送过来的请求
response对象:响应对象 服务器对浏览器做出的响应结果
session对象:会话对象 服务器和浏览器之间的一次通话
application对象:上下文对象 服务器的全局操作
page对象:当前对象
exception 对象:异常对象
config 对象:配置对象
pageContext:总控对象 控制其他对象
(1)out输出对象:主要将内容进行输出
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>out对象</title>
</head>
<body>
<%
//out对象主要将内容进行输出
String str="我爱你中国";
out.print(str);
out.print(str+"<br/>");
out.println(str);
//print和println效果一样
%>
<%= str%>;
</body>
</html>
(2)request请求对象:获取浏览器发送过来的请求
a)request对象的第一组方法
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Request对象的第一组方法</title>
</head>
<body>
<%
String servername=request.getServerName();//得到服务器的名字
int serverport=request.getServerPort();//得到服务器的端口号
InputStream in=request.getInputStream();//得到输入流对象
String uri=request.getRequestURI();//得到所请求的路径
String remoteuser=request.getRemoteUser();//得到当前用户名
String ip=request.getRemoteAddr();//得到客户端的ip地址
int port=request.getRemotePort();//得到客户端的端口号
%>
</body>
</html>
b)request对象的第二组方法(容器)
在网页上进行填写通过发送按钮发送到c3
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Request对象的第2组方法</title>
</head>
<body>
<br>
<form action="c3.jsp" method="get">
name:<input type="text" name="name"/></br>
age:<input type="number" name="age"/></br>
sex:
<input type="radio" name="sex" value="nan" checked/>男
<input type="radio" name="sex" value="nv"/>女</br>
love:
<input type="checkbox" name="love" value="zuqiu"/>足球
<input type="checkbox" name="love" value="lanqiu"/>篮球
<input type="checkbox" name="love" value="paiqiu"/>排球
<input type="checkbox" name="love" value="wangqiu"/>网球
<br/>
<button>发送</button>
</form>
</body>
</html>
c3
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//注意:重要的3个方法
String value1=request.getParameter("name");
String value2=request.getParameter("age");
String value3=request.getParameter("sex");//获取到客户端发送的请求
String[] value4=request.getParameterValues("love");//得到请求参数对应的值得到的是String的数组
Map<String,String[]>map=request.getParameterMap();//将所有的东西全部接收接受的是一个map数组
out.print(value1+"</br>");
out.print(value2+"</br>");
out.print(value3+"</br>");
out.print(Arrays.toString(value4)+"</br>");
out.print(map.keySet()+"</br>");
out.print(map.values()+"</br>");
%>
</body>
</html>
c)request对象的第三组方法
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
c4
<%
request.setCharacterEncoding("utf-8");//设置指定的编码集,只针对于post请求
request.setAttribute("key1","values");//把东西放到requst容器里,第一个参数String类型,第二个object类型什么都可以
request.setAttribute("key2",27);
request.setAttribute("key3",new Date());//key值如果重名覆盖掉
request.removeAttribute("key2");//删除
Object obj1= request.getAttribute("key1");
Object obj2= request.getAttribute("key2");
Object obj3=request.getAttribute("key3");
out.print(obj1+"<br/>");
out.print(obj2+"<br/>");
out.print(obj3+"<br/>");
//转发
request.getRequestDispatcher("c5.jsp").forward(request,response);//打出c5,一次请求
%>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
c5
<%
//c4和c5是两个请求,不共享
Object obj1= request.getAttribute("key1");
Object obj2= request.getAttribute("key2");
Object obj3=request.getAttribute("key3");
out.print(obj1+"<br/>");
out.print(obj2+"<br/>");
out.print(obj3+"<br/>");
%>
</body>
</html>
(3)response对象
d1
//将d1重定向到d2
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Response对象</title>
</head>
<body>
d1
<%
response.setCharacterEncoding("utf-8");//响应编码集,服务器到浏览器端
response.setContentType("text/html:charset-UTF-8");
OutputStream os=response.getOutputStream();//输出流
//重定向
response.sendRedirect("d2.jsp");
%>
</body>
</html>
d2
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
d2
</body>
</html>
转发和重定向的区别
(3)response响应对象 服务器对浏览器做出的响应结果
response1
<%@ page import="org.omg.CORBA.portable.OutputStream" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
request.setAttribute("A",23);
request.setAttribute("B",15);
request.setAttribute("C",99);
%>
<%
response.setCharacterEncoding("utf-8");//定义编码集
response.setContentType("text/html;charset=UTF-8");
java.io.OutputStream os=response.getOutputStream();//获得输出流
response.sendRedirect("response2.jsp");//重定向
%>
</body>
</html>
response2
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
Object v1=request.getAttribute("A");
Object v2=request.getAttribute("B");
Object v3=request.getAttribute("C");
Object v4=request.getAttribute("D");
out.print(v1+"<br/>");
out.print(v2);
out.print(v3);
out.print(v4);
%>
</body>
</html>
转发和重定向
直接转发方式(Forward),客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的。
**间接转发方式(Redirect)**实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。
举个通俗的例子:
直接转发就相当于:“A找B借钱,B说没有,B去找C借,借到借不到都会把消息传递给A”;
间接转发就相当于:“A找B借钱,B说没有,让A去找C借”。
(4)session会话对象 服务器和浏览器之间的一次通话
a)session的常用方法
session1
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>session对象</title>
</head>
<body>
<%
//保存会话信息 session服务器和浏览器之间的一次通话
String id=session.getId();//session编号,唯一
boolean b=session.isNew();//判断是否是新会话
long maxinactiveinterval= session.getMaxInactiveInterval();//获取会话不活动情况下的最大存活时间,默认是30min
/* session.setMaxInactiveInterval(-1);*///设置最大存活时间 -1永久存活
/*session.invalidate();*///销毁会话
long creationtime=session.getCreationTime();//第一次请求的时间
long lastaccesstime=session.getLastAccessedTime();//最后一次请求的时间
%>
</body>
</html>
session2
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>session的第二组方法--容器</title>
</head>
<body>
<%
session.setAttribute("A","h");
session.setAttribute("B",55);
session.setAttribute("C",new Date());
session.removeAttribute("B");
Object v1=session.getAttribute("A");
Object v2=session.getAttribute("B");
Object v3=session.getAttribute("C");
out.print(v1+"<br/>");
out.print(v2+"<br/>");
out.print(v3+"<br/>");
%>
</body>
</html>
session3
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
Object v1=session.getAttribute("A");
Object v2=session.getAttribute("B");
Object v3=session.getAttribute("C");
out.print(v1+"<br/>");
out.print(v2+"<br/>");
out.print(v3+"<br/>");
request.getRequestDispatcher("session2.jsp").forward(request,response);//可以输出数据,因为session容器的存活时间长
%>
</body>
</html>
b)session的生命周期:
浏览器的第一次请求开始
结束有如下情况:
1、浏览器关闭
2、服务器关闭
3、手动调用了invalidate()
4、时间到了
(5)application上下文对象 服务器的全局操作
application1
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>application对象</title>
</head>
<body>
<%
//服务器打开时创建,关闭时销毁
//一个服务器一个application,是一个全局容器
application.setAttribute("A",12);
application.setAttribute("B",13);
application.setAttribute("C",new Date());
application.removeAttribute("B");
Object v1=application.getAttribute("A");
Object v2=application.getAttribute("B");
Object v3=application.getAttribute("C");
out.print(v1+"<br/>");
out.print(v2+"<br/>");
out.print(v3+"<br/>");
%>
</body>
</html>
application2
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
Object v1=application.getAttribute("A");
Object v2=application.getAttribute("B");
Object v3=application.getAttribute("C");
out.print(v1+"<br/>");
out.print(v2+"<br/>");
out.print(v3+"<br/>");
request.getRequestDispatcher("application.jsp").forward(request,response);//可以输出数据,因为application容器的存活时间长
%>
</body>
</html>
(6)page当前对象
page等同于this object的方法都可以使用
(7)exception异常对象
exception1
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="exception2.jsp" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
int a=9/0;
%>
</body>
</html>
exception2
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
String str=exception.getMessage();
out.print(str);
%>
</body>
</html>
(8)pageContext总控对象,控制其他对象
<%@ page import="java.io.PrintWriter" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>pageContext对象</title>
</head>
<body>
<%
HttpServletRequest req = pageContext.getRequest();
HttpServletResponse resp = pageContext.getResponse();
PrintWriter o = resp.getWriter();
HttpSession sess = req.getSession();
Object obj = pageContext.getPage();
pageContext.setAttribute("A","page",1);
pageContext.setAttribute("A","request",2);
pageContext.setAttribute("A","session",3);
pageContext.setAttribute("A","application",4);
//pageContext.removeAttribute("A",1);
//pageContext.removeAttribute("A",2);
//pageContext.removeAttribute("A",3);
//pageContext.removeAttribute("A",4);
Object obj1 = pageContext.getAttribute("A",1);
Object obj2 = pageContext.getAttribute("A",2);
Object obj3 = pageContext.getAttribute("A",3);
Object obj4 = pageContext.getAttribute("A",4);
%>
</body>
</html>
jsp内置对象的比较
名称 | 类型 | 中文 | 说明 | 注意 |
---|---|---|---|---|
Out | PrintWrite | 输出对象 | 通过流输出显示到页面中 | |
Request | ServletRequest|HttpServletRequest | 请求对象 | 服务器获取浏览器的请求信息 | Request的生命周期 Request的容器 转发和重定向 |
Response | ServletRequest|HttpServletRequest | 响应对象 | 服务器对浏览器的响应 | 响应格式 |
Session | HttpSession | 会话对象 | 服务器和浏览器之间的一次通话 | Session的生命周期 Session的容器 什么时候Sesssion结束 |
Application | ServletContext | 全局对象 | 服务器全局信息 | Application容器是共享的 |
Page | Object | 当前对象 | 当前页面对象 | |
Exception | Runnable | 异常对象 | 页面出现异常时出现 | 只有isErrorPage="true"时才能使用 |
PageContext | PageContext | 控制其他对象,其他容器 | 1,2,3,4四大容器的编号 page容器只能通过pageContext操作,它的生命周期是当前页面 |
jsp四大容器的生命周期
名称 | 生命周期 |
---|---|
Request | 从发送请求开始创建,到做出响应结束 |
Session | 浏览器的第一次请求开始 结束有如下情况: 1、浏览器关闭 2、服务器关闭 3、手动调用了invalidate() 4、时间到了 |
Application | 服务器启动开始 服务器关闭结束 |
Page | 它的生命周期是当前页面 |