<!--
1.什么是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>
<body>
<%
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(date);
%>
今天是:
<%=str%>
</body>
</html>
//输出九九乘法表
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<table border="1" width="70%" align="center">
<%
for (int i = 0; i < 10; i++) {
%><tr><%
for (int j = 0; j <=i; j++) {
%><td><%=i+"*"+j+"="+i*j%></td> <%
}
%></tr><%
%><br/><%
}
%>
</table>
</body>
</html>
<%–
JSP注释
–%>
JSP的九大内置对象
1.out对象:输出对象 负责将内容输出显示到页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
String str = "你好,中国!";
out.print(str);
out.println(str+"<br/>");//换行要加后面的<br/>,否则在页面中不显示
out.print(str);
%>
</body>
</html>
2.request对象:请求对象 获取浏览器发送过来的请求(最重要的对象)
<%@ page import="jdk.internal.util.xml.impl.Input" %>
<%@ page import="java.io.InputStream" %>
<%@ 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();//得到客户端的端口号
out.print(serverName+"<br/>");
out.print(serverPort+"<br/>");
out.print(in+"<br/>");
out.print(uri+"<br/>");
out.print(remoteUser+"<br/>");
out.print(ip+"<br/>");
out.print(port+"<br/>");
%>
</body>
</html>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.Arrays" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Request对象</title>
</head>
<body>
<%
//注意:最重要的方法
String value1 = request.getParameter("name");//获取表单提交的信息
String value2 = request.getParameter("age");//字符串形式
String value3 = request.getParameter("sex");//即对应名字的表单信息
String[] value4 = request.getParameterValues("love");//得到请求参数的值 是数组形式的 一般用于复选框
Map<String,String[]> map = request.getParameterMap();//该返回值记录着前端(如jsp页面)所提交请求中的请求参数和请求参数值的映射关系,这个返回值有个特别之处---只能读
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>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>表单</title>
</head>
<body>
<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>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>对Request容器的操作</title>
</head>
<body>
c4
<%
request.setCharacterEncoding("utf-8");//只针对post请求的乱码处理
request.setAttribute("key1","value1");//将value1放到request容器中 第一个参数一般为String类型 第二个参数为Object类型
request.setAttribute("key2",27);
request.setAttribute("key3",new Date());
request.removeAttribute("key2");//移除
Object obj1 = request.getAttribute("key1");//获取key1映射的值
Object obj2 = request.getAttribute("key2");
Object obj3 = request.getAttribute("key3");
out.print(obj1+"<br/>");
out.print(obj2+"<br/>");
out.print(obj3+"<br/>");
//不转发的话请求c5.jsp显示是全空,因为其生命周期结束
//转发(学名)
request.getRequestDispatcher("c5.jsp").forward(request,response);//跳转
//请求的是c4.jsp,转发的是c5.jsp,显示的是c5.jsp
%>
</body>
</html>
<%--
request容器的生命周期:从发送请求开始创建,到作出响应结束
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
c5
<%
Object obj1 = request.getAttribute("key1");//获取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对象:响应对象 服务器对浏览器作出的响应结果
<%@ page import="java.io.OutputStream" %>
<%@ 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>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
d2;
</body>
</html>
4.session对象:会话对象 服务器和浏览器之间的一次通话
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Session对象</title>
</head>
<body>
<%
String id = session.getId();//获得session编号 它是唯一的(一个浏览器的id,是唯一的)
boolean b = session.isNew();//是第一次请求还是非第一次请求 测试它是否是一个新会话
long maxInactiveInterval = session.getMaxInactiveInterval();//获取会话不活动情况下的最大存活时间,默认30分钟
//session.setMaxInactiveInterval(1000);//设置它的最大存活时间 单位:秒 如果参数为-1,则永久存活
//session.invalidate(); //销毁会话
long creationTime = session.getCreationTime();//第一次请求的时间 1970年1.1到--请求时
long lastAccessedTime = session.getLastAccessedTime();//最后一次请求的时间
out.print(id+"<br/>");
out.print(b+"<br/>");
out.print(maxInactiveInterval+"<br/>");
out.print(creationTime+"<br/>");
out.print(lastAccessedTime+"<br/>");
%>
</body>
</html>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>session容器</title>
</head>
<body>
e2
<%
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/>");
//request.getRequestDispatcher("e3.jsp").forward(request,response);
response.sendRedirect("e3.jsp");
%>
</body>
</html>
<%--
session的生命周期:
浏览器的第一次请求开始
结束有如下情况:
1.浏览器关闭了
2.服务器关闭了
3.手动调用了invalidate()
4.最大存活时间到了
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
e3
<%
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>
5.application对象:上下文对象 服务器的全局操作
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>application对象</title>
</head>
<body>
<%
//一个服务器一个application,是一个全局容器
application.setAttribute("A","asd");
application.setAttribute("B",77);
application.setAttribute("C",new Date());
Object object1 = application.getAttribute("A");
Object object2 = application.getAttribute("B");
Object object3 = application.getAttribute("C");
out.print(object1);
out.print(object2);
out.print(object3);
%>
</body>
</html>
<%--
application的生命周期:
服务器启动开始
服务器关闭结束
比如,在一个浏览器放的东西,在另一个浏览器也能拿到
--%>
6.page对象:当前对象
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>page对象</title>
</head>
<body>
<%
//page 等同于this 当前页面的对象
//Object中有的方法它也有
%>
</body>
</html>
7.exception对象:异常对象
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="h1.jsp" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
int i = 9/0;//如果这边出错,errorPage 跳转到另一个页面
%>
</body>
</html>
<%@ 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.config对象:配置对象
9.pageContext对象:总控对象 控制其他对象
这个对象代表页面上下文,该对象主要用于访问JSP之间的共享数据。
pageContext是PageContext类的实例,使用pageContext可以访问page、request、session、application范围的变量。
getAttribute(String name):取得page范围内的name属性。
setAttribute(String name,值,int scope):如果没有指定scope,该属性默认在page范围内,如:pageContext.setAttribute(“page”,“hello”);
使用pageContext将属性设置在request范围中pageContext.setAttribute(“request2”,“hello” , pageContext.REQUEST_SCOPE);
使用pageContext将属性设置在session范围中pageContext.setAttribute(“session2”,“hello” , pageContext.SESSION_SCOPE);
使用pageContext将属性设置在application范围中pageContext.setAttribute(“app2”,“hello” , pageContext.APPLICATION_SCOPE);
getAttribute(String name,int scope):取得指定范围内的name属性,其中scope可以是如下4个值:
PageContext.PAGE_SCOPE:对应于page范围。
PageContext.REQUEST_SCOPE:对应于request范围。
PageContext.SESSION_SCOPE:对应于session范围。
PageContext.APPLICATION_SCOPE:对应于application范围。
<%@ 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("B",2);
//pageContext.removeAttribute("C",3);
//pageContext.removeAttribute("D",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);
out.print(obj1.toString()+"<br/>");
out.print(obj2.toString()+"<br/>");
out.print(obj3.toString()+"<br/>");
out.print(obj4.toString()+"<br/>");
%>
</body>
</html>
全域查找:
Object findAttribute(String name):依次在page、request、session、application范围查找名称为name的数据,如果找到就停止查找。这说明在这个范围内有相同名称的数据,那么page范围的优先级最高!
处理过程见下图: