【解释】:HTML页面是静态页面,也就是事先由用户写好放在服务器上的,由web服务器向客户端发送。JSP页面是由JSP容器执行该页面的Java代码部分,然后实时生成的HTML页面,因此说它是服务端的动态页面。
2、JSP生命周期(与servlet的生命周期相对应)【1】编译阶段:servlet容器编译servlet源文件,生成servlet类
【2】初始化阶段:加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法
【3】执行阶段:调用与JSP对应的servlet实例的服务方法
【4】销毁阶段:调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例
3、JSP三大指令| 指令 | 作用 |
|---|---|
| <%@ page … %> | 常用于导包、定义网页的依赖属性等 |
| <%@ include … %> | 常用于引入其他页面文件 |
| <%@ taglib … %> | 引入标签库的定义 |
| 对象 | 描述 |
|---|---|
| request | HttpServletRequest 接口的实例 |
| response | HttpServletResponse 接口的实例 |
| out | JspWriter类的实例,用于把结果输出至网页上 |
| session | HttpSession类的实例 |
| application | ServletContext类的实例,与应用上下文有关 |
| config | ServletConfig类的实例 |
| pageContext | PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问 |
| page | 类似于Java类中的this关键字 |
| Exception | Exception类的对象,代表发生错误的JSP页面中对应的异常对象 |
out对象是 javax.servlet.jsp.JspWriter 类的实例,一般用来在response对象中写入内容。
常用语法:out.print("…")
pageContext对象是javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面。
3、request:请求对象request对象是javax.servlet.http.HttpServletRequest类的实例。每当客户端请求一个页面时,JSP引擎就会产生一个新的对象来代表这个请求。
【常用方法】:
返回客户端所有的cookie的数组
2 Enumeration getAttributeNames()返回request对象的所有属性名称的集合
3 Enumeration getHeaderNames()返回所有HTTP头的名称集合
4 Enumeration getParameterNames()返回请求中所有参数的集合
5 HttpSession getSession()返回request对应的session对象,如果没有,则创建一个
6 HttpSession getSession(boolean create)返回request对应的session对象,如果没有并且参数create为true,则返回一个新的session对象
7 Locale getLocale()返回当前页的Locale对象,可以在response中设置
8 Object getAttribute(String name)返回名称为name的属性值,如果不存在则返回null。
9 ServletInputStream getInputStream()返回请求的输入流
10 String getAuthType()返回认证方案的名称,用来保护servlet,比如 “BASIC” 或者 “SSL” 或 null 如果 JSP没设置保护措施
11 String getCharacterEncoding()返回request的字符编码集名称
12 String getContentType()返回request主体的MIME类型,若未知则返回null
13 String getContextPath()返回request URI中指明的上下文路径
14 String getHeader(String name)返回name指定的信息头
15 String getMethod()返回此request中的HTTP方法,比如 GET,,POST,或PUT
16 String getParameter(String name)返回此request中name指定的参数,若不存在则返回null
17 String getPathInfo()返回任何额外的与此request URL相关的路径
18 String getProtocol()返回此request所使用的协议名和版本
19 String getQueryString()返回此 request URL包含的查询字符串
20 String getRemoteAddr()返回客户端的IP地址
21 String getRemoteHost()返回客户端的完整名称
22 String getRemoteUser()返回客户端通过登录认证的用户,若用户未认证则返回null
23 String getRequestURI()返回request的URI
24 String getRequestedSessionId()返回request指定的session ID
25 String getServletPath()返回所请求的servlet路径
26 String[] getParameterValues(String name)返回指定名称的参数的所有值,若不存在则返回null
27 boolean isSecure()返回request是否使用了加密通道,比如HTTPS
28 int getContentLength()返回request主体所包含的字节数,若未知的返回-1
29 int getIntHeader(String name)返回指定名称的request信息头的值
30 int getServerPort()返回服务器端口号
4、response:响应对象 1 String encodeRedirectURL(String url)对sendRedirect()方法使用的URL进行编码
2 String encodeURL(String url)将URL编码,回传包含Session ID的URL
3 boolean containsHeader(String name)返回指定的响应头是否存在
4 boolean isCommitted()返回响应是否已经提交到客户端
5 void addcookie(cookie cookie)添加指定的cookie至响应中
6 void addDateHeader(String name, long date)添加指定名称的响应头和日期值
7 void addHeader(String name, String value)添加指定名称的响应头和值
8 void addIntHeader(String name, int value)添加指定名称的响应头和int值
9 void flushBuffer()将任何缓存中的内容写入客户端
10 void reset()清除任何缓存中的任何数据,包括状态码和各种响应头
11 void resetBuffer()清除基本的缓存数据,不包括响应头和状态码
12 void sendError(int sc)使用指定的状态码向客户端发送一个出错响应,然后清除缓存
13 void sendError(int sc, String msg)使用指定的状态码和消息向客户端发送一个出错响应
14 void sendRedirect(String location)使用指定的URL向客户端发送一个临时的间接响应
15 void setBufferSize(int size)设置响应体的缓存区大小
16 void setCharacterEncoding(String charset)指定响应的编码集(MIME字符集),例如UTF-8
17 void setContentLength(int len)指定HTTP servlets中响应的内容的长度,此方法用来设置 HTTP Content-Length 信息头
18 void setContentType(String type)设置响应的内容的类型,如果响应还未被提交的话
19 void setDateHeader(String name, long date)使用指定名称和日期设置响应头的名称和日期
20 void setHeader(String name, String value)使用指定名称和值设置响应头的名称和内容
21 void setIntHeader(String name, int value)指定 int 类型的值到 name 标头
22 void setLocale(Locale loc)设置响应的语言环境,如果响应尚未被提交的话
23 void setStatus(int sc)设置响应的状态码
5、session:会话对象 1 public Object getAttribute(String name)返回session对象中与指定名称绑定的对象,如果不存在则返回null
2 public Enumeration getAttributeNames()返回session对象中所有的对象名称
3 public long getCreationTime()返回session对象被创建的时间, 以毫秒为单位,从1970年1月1号凌晨开始算起
4 public String getId()返回session对象的ID
5 public long getLastAccessedTime()返回客户端最后访问的时间,以毫秒为单位,从1970年1月1号凌晨开始算起
6 public int getMaxInactiveInterval()返回最大时间间隔,以秒为单位,servlet 容器将会在这段时间内保持会话打开默认1800
7 public void invalidate()将session无效化,解绑任何与该session绑定的对象
8 public boolean isNew()返回是否为一个新的客户端,或者客户端是否拒绝加入session
9 public void removeAttribute(String name)移除session中指定名称的对象
10 public void setAttribute(String name, Object value)使用指定的名称和值来产生一个对象并绑定到session中
11 public void setMaxInactiveInterval(int interval)用来指定时间,以秒为单位,servlet容器将会在这段时间内保持会话有效
6、application:应用程序对象我们通过一个案例来解释:统计当前访问页面人数
<%--
Created by IntelliJ IDEA.
User: 执手天涯
Date: 2021/10/18
Time: 15:00
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%--application作用域--%>
<%
//所有的getAttribute都是object类型
Object object = application.getAttribute("count");
if (object == null) {
//表示我们系统启动后还没有人访问
application.setAttribute("count", 1);
} else {
int newCount = Integer.parseInt(application.getAttribute("count").toString());
application.setAttribute("count", newCount + 1);
}
out.print("当前系统在线人数是" + application.getAttribute("count"));
%>
此数据的统计与浏览器没有关系:不同浏览器访问时数据会依据原来的数据进行修改
7、page 对象类似与Java中的this关键字
8、config:配置对象config对象是 javax.servlet.ServletConfig 类的实例,直接包装了servlet的ServletConfig类的对象。
这个对象允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等。
9、exception:异常对象exception 对象包装了从先前页面中抛出的异常信息。它通常被用来产生对出错条件的适当响应。
【常用方法】
返回异常的信息。这个信息在Throwable构造函数中被初始化
2 public ThrowablegetCause()返回引起异常的原因,类型为Throwable对象
3 public String toString()返回类名
4 public void printStackTrace()将异常栈轨迹输出至System.err
5 public StackTraceElement [] getStackTrace()以栈轨迹元素数组的形式返回异常栈轨迹
6 public ThrowablefillInStackTrace()使用当前栈轨迹填充Throwable对象
5、JSP的四大作用域page:当前页面,指当前这个页面的范围
request:请求作用域 一个请求的时间(一个完整的请求包含一次请求和一次响应)
session:会话作用域 整个会话的过程 默认时间 1800秒
application:当前项目作用域 只要服务器不关闭就不会停止
【学完servlet后我们可以对此页面做改进——连接数据库】
1、编写login.jsp<%--
Created by IntelliJ IDEA.
User: 执手天涯
Date: 2021/10/18
Time: 12:01
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
1、编写success.jsp
<%--
Created by IntelliJ IDEA.
User: 执手天涯
Date: 2021/10/18
Time: 12:04
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
欢迎你<%
Object object=session.getAttribute("username");
if(object!=null) {
out.print(object.toString());
}
%>登录成功
3、编写error.jsp
<%--
Created by IntelliJ IDEA.
User: 执手天涯
Date: 2021/10/18
Time: 12:04
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
对不起,登陆失败!
4、编写dologin.jsp
<%--
Created by IntelliJ IDEA.
User: 执手天涯
Date: 2021/10/18
Time: 12:05
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%--处理登录验证--%>
<%
String name = request.getParameter("account");
String password = request.getParameter("password");
if (name.equals("admin") && password.equals("0000")) {
//表示登录成功跳转到success
//转发和重定向
//转发是一次请求地址栏不会发生改变,这个操作是服务器端进行的
//RequestDispatcher使用转发是一个分发器用来跳转页面
//表示将我们输入的用户名存放到reques作用域
// request.setAttribute("username",name);
session.setAttribute("username", name);
// RequestDispatcher dispatcher = request.getRequestDispatcher("success.jsp");
// dispatcher.forward(request, response);
response.sendRedirect("/BlogTest_war_exploded/static/login/success.jsp");
} else {
//表示登录失败跳转到error
//重定向 地址栏会发生改变
//两次请求,所以我们放在第一个请求对象中的内容无法获取
//重定向是客户端的操作
//地址写的是绝对路径,因为重定可以重定向到任何地方
response.sendRedirect("/BlogTest_war_exploded/static/login/error.jsp");
}
%>



