文章目录
1. 概述
-
jsp本质上就是一个Servlet,jsp主要负责与用户交互,将最终的界面呈现给用户
html+js+css+java的混合文件 -
当服务器接收到一个后缀是jsp的请求时,将该请求交给jsp引擎去处理,每一个jsp页面第一次被访问的时候,jsp引擎会将它翻译成一个Servlet文件,再由Web容器调用Servlet完成响应
-
单纯从开发的角度开,jsp就是html中嵌入类java程序
2. jsp的三种嵌入方式
2.1 jsp脚本,执行java逻辑代码
<% Java代码 %>
2.2 jsp声明:定义java方法
<%!
声明 Java 方法
%>
2.3 jsp表达式:把java对象直接输出到html页面中
<%=Java变量 %>
例子:
<%!
public String test(){ return "HelloWorld";
} %>
<%
String str = test(); %>
<%=str%>
3.jsp的九个内置对象
-
1.request:表示一次请求,HttpServletRequest
-
2.response:表示一次响应,HttpServletResponse
-
3.pageContext:⻚面上下文,获取⻚面信息,PageContext。
-
4.session:表示一次会话,保存用户信息,HttpSession。
-
5.application:表示当前 Web 应用,全局对象,保存所有用户共享信息,ServletContext。
-
6.config:当前 JSP 对应的 Servlet 的 ServletConfig 对象,获取当前 Servlet 的信息。
-
7.out:向浏览器输出数据,JspWriter。
-
8.page:当前 JSP 对应的 Servlet 对象,Servlet。
-
9.exception:表示 JSP ⻚面发生的异常,Exception。
常用的是 request、response、session、application、pageContext
4.request 常用方法:
-
1、String getParameter(String key) 获取客户端传来的参数。
-
2、void setAttribute(String key,Object value) 通过键值对的形式保存数据。
-
3、Object getAttribute(String key) 通过 key 取出 value。
-
4、RequestDispatcher getRequestDispatcher(String path) 返回一个
RequestDispatcher 对象,该对 象的 forward 方法用于请求转发。
在index2.jsp中得到的
-
5、String[] getParameterValues() 获取客户端传来的多个同名参数。
-
6、void setCharacterEncoding(String charset) 指定每个请求的编码。
5.response 常用方法:
1、sendRedirect(String path) 重定向,⻚面之间的跳转。
转发 getRequestDispatcher 和重定向 sendRedirect 的区别:
转发是将同一个请求传给下一个⻚面,重定向是创建一个新的请求传给下一个⻚面,之前的请求结束生 命周期。
- 转发:同一个请求在服务器之间传递,地址栏不变,也叫服务器跳转。
- 重定向:由客户端发送一次新的请求来访问跳转后的目标资源,地址栏改变,也叫客户端跳转。
如果两个⻚面之间需要通过 request 来传值,则必须使用转发,不能使用重定向。
6.转发与重定向的区别
例子:用户登录,如果用户名和密码正确,则跳转到首⻚(转发),并且展示用户名,否则重新回到登陆⻚面 (重定向)。
login.jsp
<%--
Created by IntelliJ IDEA.
User: cc
Date: 2020/8/20
Time: 12:13
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>login</title>
</head>
<body>
<form action="/check.jsp" method="post">
用户名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="登录"/><br/>
</form>
</body>
</html>
check.jsp
<%--
Created by IntelliJ IDEA.
User: cc
Date: 2020/8/20
Time: 13:07
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>check</title>
</head>
<body>
<%
String username=request.getParameter("username");
String password=request.getParameter("password");
if(username.equals("admin")&&password.equals("123")){
//登录成功
request.setAttribute("name",username);
request.getRequestDispatcher("welcome.jsp").forward(request,response);
}
else{
//登录失败
response.sendRedirect("login.jsp");
}
%>
</body>
</html>
welcome.jsp
<%--
Created by IntelliJ IDEA.
User: cc
Date: 2020/8/20
Time: 13:51
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>welcome</title>
</head>
<body>
<%
String name=(String)request.getAttribute("name");
%>
欢迎回来!<%=name%>
</body>
</html>
输入正确并跳转
输入错误,还是在login
7.session
用户会话
服务器无法识别每一次 HTTP 请求的出处(不知道来自于哪个终端),它只会接受到一个请求信号,所 以就存在一个问题:将用户的响应发送给其他人,必须有一种技术来让服务器知道请求来自哪,这就是 会话技术。
会话:就是客户端和服务器之间发生的一系列连续的请求和响应的过程,打开浏览器进行操作到关闭浏 览器的过程。
会话状态:指服务器和浏览器在会话过程中产生的状态信息,借助于会话状态,服务器能够把属于同一 次会话的一系列请求和响应关联起来。
实现会话有两种方式:
- session
- cookie
属于同一次会话的请求都有一个相同的标识符,sessionID
7.1 session方法
- session 常用的方法:
- String getId() 获取 sessionID
- void setMaxInactiveInterval(int interval) 设置 session 的失效时间,单位为秒 int
- getMaxInactiveInterval() 获取当前 session 的失效时间
- void invalidate() 设置 session 立即失效
- void setAttribute(String key,Object value) 通过键值对的形式来存储数据 Object
- getAttribute(String key) 通过键获取对应的数据
- void removeAttribute(String key) 通过键删除对应的数据
8.HTTP 请求状态码
- 200:正常
- 404:资源找不到
- 400:请求类型不匹配
- 500:Java 程序抛出异常
9.JSP 内置对象作用域
4个
page、request、session、application
setAttribute、getAttribute
- page 作用域:对应的内置对象是 pageContext。
- request 作用域:对应的内置对象是 request。
- session 作用域:对应的内置对象是 session。
- application 作用域:对应的内置对象是 application。
- page < request < session < application
- page 只在当前⻚面有效。
- request 在一次请求内有效。
session 在一次会话内有效。 - application 对应整个 WEB 应用的。