jsp 基础使用
jsp 基础使用
ruoxijunJSP
负责与用户的交互,将最终界面呈现给用户。是 HTML + js + Css + java 的混合文件。
JSP 文件最终转换为一个 java 文件,之后编译为 class 文件。java 中将页面整个
write
输出。本质上是一个servlet
。请求常见状态码:404 资源找不到,400 请求类型不匹配,500 java 程序异常
JSP 编码问题:
1 | <%@ page contentType="text/html; charset=utf-8" %> |
JSP 的 HTML 中嵌入 Java 程序:
- JSP 脚本
注意:只能写 java 逻辑代码,不能定义方法<% java代码(不常用也不不建议) %>
1 | <body> |
- 声明(嵌入 java 方法)
1 | <%!//在jsp的HTML中 |
3.JSP 表达式
把 java 对象直接输出在 HTML 中<%= java变量 %>
1 | <% |
- java 代码与 HTML 的混合使用
HTML 标签写在 java 语句块中,标签也会被代码控制。
1 | <table border="1"> |
JSP 内置对象:
- request:表示一次请求,属于 HttpServletRequest 类
- response:表示一次响应,HttpServletResponse
- pageContext:页面上下文可获取页面信息,PageContext
- session:表示一次回话,保存用户信息,HttpSession
- application:web 应用全局对象,保存所有用户共享信息,ServletContext
- config:当前 jsp 对应 servlet 的 ServletConfig 对象,获取当前 Servlet 的信息
- out:向浏览器输出数据,JspWriter
- page:当前 Jsp 对应的 Servlet 对象,pageContext
- exception:表示 jsp 页面发生的异常,Exception
常用 request,response,session,application,pagecontext
下面这些对象使用的方法即是它们所属类的方法,在 servlet 中取得同类型对象可使用。
request 常用方法
String getParameter(String key)
如在浏览器中访问并传值:http://localhost:8080/?value=haha
此为 get 传值,url 后跟?
传值使用key=value
格式,多个值用&
隔开。
1 | <%//内置对象使用与在servlet中使用一样 |
void setAttribute(String key,Object value);
通过键值对形式保存数据Object getAttribute(String key);
通过 key 取出 value
- 两方法一般用于将客户端拿到的数据 set 存储起来,完成服务端内数据传输通过 get 获取。
- 页面跳转:
RequestDispatcher getRequestDispatcher(String path)
方法和该对象的forward(request,response)
方法使用,此方法可用于登录
- 它可让浏览器访问到WEB-INF(客户端无法直接访问,只有服务端可以访问。直接访问会引起 404 错误,也可用映射访问)文件夹下的文件,此方法可用于用户登录
在被访问的 jsp 中:
1 | <%//将数据存储起来,并将请求转发给其它jsp |
在接收的 jsp 中(页面会跳转至此 jsp,但浏览器地址栏不会改变):
1 | <%//获取数据并转型 |
String[] values=request.getParameterValues(String key)
当浏览器传值时有多个同名的 key,那么 getParameter
只取第一个,而此方法能将所有同名 key 的值组成一个数组返回。适用于接收复选框的值。
response 常用方法
void sendRedirect(String path)
重定向:
- 相等于浏览器直接发生请求访问,因此方法无法访问到WEB-INF下的文件
- 此方法可用于登录后的退出
如:<%response.sendRedirect("test.jsp");%>
Session 常用方法
- 属于同一次回话(一个浏览器或服务器的关闭标识一次会话结束)的请求都有一个相同的标识符,sessionID:**
String id=session.getId()
**。
void setMaxInactiveInterval(int)
:设置 session 失效时间,单位为秒。int getMaxInactiveInterval()
:获取当前 id 失效时间void invalidate()
:设置 session 立即失效void setAttribute(String key,Object value)
:通过键值对的形式来存储数据,key 相同的数据将被覆盖Object getAttribute(String key)
:通过键获取对应的数据void removeAttribute(String key)
:通过键删除对应的数据
在servlet中获取 session:
1 | public class TestServlet extends HttpServlet { |
HttpServletRequest是ServletRequest的子类,在参数非HttpServletRequest的方法中我们可以通过转型得到HttpSession(session):((HttpServletRequest)servletRequest).getSession();
浏览器存储数据 Cookie:
- cookie 在浏览器是以键值对方式存放数据,同名 key 的值将被覆盖。每一对键值对用等号隔开 ‘ = ‘ ,每一组数据用分号 ‘ ; ‘ 隔开。
- 浏览器发送请求时会把现有的 Cookie 数据传递给服务器,服务器可以对 Cookie 做操作,响应时又自动返回Cookie,浏览器将本地 Cookie更新为服务器返回的 Cookie。
java 中 Cookie 是一个类,每一个 cookie 对象保存一对键值对。在 jsp 和 servlet 中都可使用 Cookie,HttpServletRequest 和 HttpServletResponse 分别提供了获取浏览器的 Cookie 和给 Cookie 添加新值的方法。
以 jsp 中为例:
1 | <% |
设置 cookie 有效时间方法:
1 | //设置cookie有效时间,单位为秒 |
session 与 cookie 区别:
session | cookie |
---|---|
数据时 object | 数据时 string |
保存在服务器,会话结束时销毁 | 长期保存在浏览器 |
保存重要信息 | 不重要信息 |
内置对象(域对象)作用域:
我们主要探讨 4 个内置对象的作用域。他们都有一些这两个存储数据的方法,根据它们作用域不同,数据存储的作用域也不同。
1 | //储存数据 |
内置对象 | 作用域 |
---|---|
pageContext | 当前页面有效 |
request | 一次请求内有效 |
session | 一次会话内有效 |
application | 整 web 应用(服务器) |
EL 表达式:
域对象 存储数据的便捷取值方法: ${域对象存储数据的key}
只能在 jsp 中使用。
1 | <% //存储字符串 |
存取对象时:
- 对象类中:
1 | public class User { |
- jsp 中
1 | <% //存储对象 |
关系运算:
1 | <%--EL中还能进行,关系运算(&&,||,><==!=)--%> |
JSTL:
- 需要借助 jar 外包
jstl.jar
和standard.jar
两个包。在 WEB-INF 文件夹中新建 lib 文件夹,将 jar 导入其中。
- 下载地址:jakarta-taglibs-standard-1.1.2.zip,解压将 lib 下的两个 jar 文件提取出来。
- 在需要使用的 jsp 中 HTML 标签上方导入核心库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
,其中 c 是之后在 jsp 中使用该库就需要使用 c 来调用。可以自定义但建议用 c 来表示
案例:后端给 jsp 传递一个集合,jsp 需要在页面中遍历出来里面的元素,并显示在页面上。
- java 文件中:
1 |
|
- jsp 中:
1 | <%--导入jstl库--%> |
上面我们使用了 foreach 标签,它还用其它标签如:
1 | <%--set就是setAttribute,scope指定存储在哪一个对象中,默认page--%> |
以上都是 核心标签库标签 。