JSP
1、jsp简介
由于servlet不擅长输出html代码,所以就发明了能直接在html中写java代码的方式(jsp)
2、jsp代码解释
<%@page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
你好 JSP
<br>
<%=new Date().toLocaleString()%>
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%>
jsp的 <%@page指令,必须要带这句代码
contentType="text/html; charset=UTF-8"
通知浏览器以UTF-8进行中文解码,相当于 response.setContentType("text/html;charset=UTF-8");
pageEncoding="UTF-8"
设置jsp中文编码格式为 utf-8
import="java.util.*
导入其它类,如果有多个类可以使用逗号隔开
<%=new Date().toLocaleString()%>
输出当前时间,相当于在Servlet中使用 response.getWriter()
进行输出,response.getWriter().println(new Date().toLocaleString());
3、jsp页面元素
-
静态内容
就是 html、css、javascript等
-
指令
以 <%@开始 %>结尾,如 <%@page import = “java.util.*”%>
-
表达式
<%=%>
用于输出一段 html
-
Scriptlet
在<%%>之间,可以写任何java代码
-
声明
在<%!%>之间可以声明字段或者方法,不建议
-
动作
<jsp:include page = “Filename”> ,在jsp页面中包含另一个页面
-
注释
<%-- --%>
与html注释不同,浏览器看不到响应代码,相当于从servlet中注释掉了
4、jsp include
-
指令include
<%@include file = "fileName" %>
指令include相当于将两个jsp文件进行合并
-
动作include
<jsp:include page = "fileName" />
动作include不会把 page内容插入到当前jsp文件中,实际是通过当前jsp文件访问了 page内容,然后把结果返回,嵌入到响应中
-
传参
指令include将两个文件合并成一个java文件,所以不涉及传参
动作include 涉及传参
举例:
当前jsp
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%> 你好 JSP <%=new Date().toLocaleString()%> <jsp:include page="footer.jsp"> <jsp:param name="year" value="2017" /> </jsp:include>
include jsp
<hr> <p style="text-align:center">copyright@<%=request.getParameter("year")%> </p>
5、jsp跳转
jsp跳转也是分为客户端跳转和服务端跳转,和servlet是一样
-
客户端跳转(客户端两次请求)
<% response.sendRedirect("hello.jsp"); %>
-
服务端跳转(客户端一次请求)
request.getRequestDispatcher("hello.jsp").forward(request, response);
或使用简化代码
<jsp:forward page="hello.jsp"/>
6、jsp cookie
cookie的作用是一种浏览器和服务器的数据交互方式,由服务器创建,保存在浏览器本地,每次访问网站的时候,都会把cookie发送给服务器
-
设置cookie
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%> <% Cookie c = new Cookie("name", "Gareen"); c.setMaxAge(24*60*60); c.setPath("/"); response.addCookie(c); %> <a href = "getCookie.jsp" >跳转到cookie获取页面</a>
-
获取cookie
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="javax.servlet.http.Cookie"%> <% Cookie[] cookies = request.getCookies(); if(null != cookies){ for(int i = 0; i < cookies.length - 1; i++){ out.print(cookies[i].getName() + " : " + cookies[i].getValue() + "<br>"); } } %>
7、jsp session
-
什么是session
session是会话,指的是用户打开浏览器网站开始,无论中间进行了什么操作,只要不关闭浏览器,都属于同一个会话
8、jsp的作用域
8.1-jsp有4个作用域,分别是
- pageContext 当前页面
- requestContext 一次请求
- sessionContext 当前会话
- applicationContext 全局,所有用户共享
四个作用域范围从小到大,优先级从高到低
通过 pageContext.setAttribute(key, value) 的数据,只能在当前页面访问,其它页面不能访问
request.setAttribute(key,value) 表示一次请求的范围,可以使用jsp服务端跳转,进行数据的传递,服务端跳转也只算一次请求
session.setAttribute(key,value),设置的数据,可以在同一个会话任何页面获取
application.setAttribute(key,value) 设置的数据,所有用户都可获取
9、jsp对象
jsp一共有9个隐藏对象,隐藏对象指的是不需要显示定义,直接就可以使用的对象
对象名称 | 作用 |
---|---|
request | 请求 |
response | 响应 |
out | 输出 |
pageContext | 当前页面作用域 |
session | 当前会话作用域 |
application | 当前全局作用域 |
page | 当前对象 |
config | 获取 web.xml中的配置和参数 |
exception | exception 对象只有当前页面的<%@page 指令设置为isErrorPage="true"的时候才可以使用。用来处理异常 |