JSP入门篇,JSP了解、能看懂代码即可。
本文目录
- 1.JSP概念
- 2.JSP原理
- 3.JSP的脚本:JSP定义Java代码的方式
- 4.JSP的指令
- 5.JSP的注释
- 6.JSP的内置对象
- 案例:改造Cookie案例
1.JSP概念
JSP( Java Server Pages )
:java服务器端页面。
可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码。
目的就是为了简化代码编写。同时可以写Java代码和html,因此代码也不易阅读。
2.JSP原理
只需要记住JSP本质上就是一个Servlet。最终会生成一个.class字节码文件
3.JSP的脚本:JSP定义Java代码的方式
可以简单理解为几个标签,带有<>。
-
<% 代码 %>
:定义的java代码,最终代码会放在在service()
方法中。service方法中可以定义什么,该脚本中就可以定义什么。 -
<%! 代码 %>
:定义的java代码,在jsp转换后代码放在的java类的成员位置。 -
<%= 代码 %>
:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。
注意:只有将Java代码写在<>里面才能生效。
代码演示:index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<!-- service方法中的java代码 -->
<%
System.out.println("hello jsp");
//定义的是局部变量
int i = 5;
//获取虚拟目录
String contextPath = request.getContextPath();
//输出到页面上
out.print(contextPath);
%>
<%--成员位置上的代码--%>
<%!
//定义的是成员变量
int i = 3;
%>
<%--定义的代码在service方法中,out.print("hello");输出到页面上--%>
<%=
//java输出语句中可以定义什么,该脚本中就可以定义什么。
"hello"
%>
<%--response.getWriter()数据输出永远在out.write()之前--%>
<% response.getWriter().write("response....."); %>
</body>
</html>
运行,访问index.jsp:
4.JSP的指令
JSP的指令作用:用于配置JSP页面,导入资源文件。位于文件顶部。
格式:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
<!-- 例子 -->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
指令分类
分为三种指令:page、include、taglib;
1.page: 配置JSP页面的,常见的属性:
contentType
:等同于response.setContentType(),作用:
- 设置响应体的mime类型以及字符集
- 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置
pageEncoding
属性设置当前页面的字符集)
-
import
:导包,比如导入一些Java的类 -
errorPage
:当前页面发生异常后,会自动跳转到指定的错误页面。 isErrorPage
:标识当前页面是否是错误页面。属性值:
- true:是,可以使用内置对象exception
- false:否。默认值。不可以使用内置对象exception
例子:
jspDemo1.jsp
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="utf-8" language="java" buffer="8kb" errorPage="500.jsp" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
List list = new ArrayList<String>();
//发生错误,跳转到500.jsp
int i = 3/0;
%>
</body>
</html>
500.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>服务器繁忙..</h1>
<%
//设置属性isErrorPage="true",才能使用jsp内置对象exception
String message = exception.getMessage();
out.print(message);
%>
</body>
</html>
访问jspDemo1.jsp,出现错误跳转到500.jsp:
2.include: 页面包含的。导入页面的资源文件
<%@ include file="top.jsp" %>
例子:
jspDemo2.jsp
<%@ include file="top.jsp"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
使用include指令...
</body>
</html>
top.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h1>页面logo页面标题</h1>
访问jspDemo2.jsp
3.taglib: 导入资源,导入JSTL标准标签库资源(使用JSTL需要导入JSTL的jar包资源)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 属性
prefix
:前缀名称,自定义的,一般自定义为c。 - 属性
uri
:统一资源标识,导入的资源。
例子:
jspDemo3.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
使用taglib指令...
<c:if test="true">
<h1>我是真...</h1>
</c:if>
</body>
</html>
访问jspDemo3.jsp
5.JSP的注释
有两种注释的方式:
-
<!-- 内容 -->
:html注释,只能注释html代码片段。 -
<%-- 内容 --%>
:jsp注释,推荐使用,可以注释所有。
6.JSP的内置对象
JSP的内置对象指:在jsp页面中不需要获取和创建,可以直接使用的对象。jsp一共有9个内置对象。
先介绍熟悉的3个内置对象:
- request
- response
- out:字符输出流对象。可以将数据输出到页面上。和
response.getWriter()
类似
response.getWriter()
和out.write()
的区别:
- (底层)在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
-
response.getWriter()
数据输出永远在out.write()
之前。
jsp9个内置对象
变量名 | 真实类型 | 作用 |
pageContext | PageContext | 在当前页面共享数据,还可以获取其他八个内置对象 |
request | HttpServletRequest | 一次请求访问的多个资源(转发) |
session | HttpSession | 一次会话的多个请求间 |
application | ServletContext | 所有用户间共享数据 |
response | HttpServletResponse | 响应对象 |
page | Object | 当前页面(Servlet)的对象,理解为this |
out | JspWriter | 输出对象,数据输出到页面上 |
config | ServletConfig | Servlet的配置对象 |
exception | Throwable | 异常对象 |
例子:
jspDemo4.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>使用jsp内置对象</h1>
<%
ServletContext servletContext = pageContext.getServletContext();
pageContext.setAttribute("msg","hello");
%>
<%= pageContext.getAttribute("msg") %>
</body>
</html>
访问jspDemo4.jsp
案例:改造Cookie案例
用JSP实现在页面上:提示上一次访问时间的Cookie案例。
代码:home.jsp
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.net.URLDecoder" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//1.获取所有Cookie
Cookie[] cookies = request.getCookies();
boolean flag = false;//没有cookie为lastTime
//2.遍历cookie数组
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
//3.获取cookie的名称
String name = cookie.getName();
//4.判断名称是否是:lastTime
if ("lastTime".equals(name)) {
//有该Cookie,不是第一次访问
flag = true;//有lastTime的cookie
//设置Cookie的value
//获取当前时间的字符串,重新设置Cookie的值,重新发送cookie
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str_date = sdf.format(date);
System.out.println("编码前:" + str_date);
//URL编码
str_date = URLEncoder.encode(str_date, "utf-8");
System.out.println("编码后:" + str_date);
cookie.setValue(str_date);
//设置cookie的存活时间
cookie.setMaxAge(60 * 60 * 24 * 30);//一个月
response.addCookie(cookie);
//响应数据
//获取Cookie的value,时间
String value = cookie.getValue();
System.out.println("解码前:" + value);
//URL解码:
value = URLDecoder.decode(value, "utf-8");
System.out.println("解码后:" + value);
%>
<!--JSP脚本可以截断,组合html标签-->
<h1>欢迎回来,您上次访问时间为:<%= value %></h1>
<input>
<%
break;
}
}
}
if (cookies == null || cookies.length == 0 || flag == false) {
//没有,第一次访问
//设置Cookie的value
//获取当前时间的字符串,重新设置Cookie的值,重新发送cookie
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str_date = sdf.format(date);
System.out.println("编码前:" + str_date);
//URL编码
str_date = URLEncoder.encode(str_date, "utf-8");
System.out.println("编码后:" + str_date);
Cookie cookie = new Cookie("lastTime", str_date);
//设置cookie的存活时间
cookie.setMaxAge(60 * 60 * 24 * 30);//一个月
response.addCookie(cookie);
%>
<h1>您好,欢迎您首次访问</h1>
<span></span>
<%
}
%>
<input>
</body>
</html>
访问home.jsp
案例完成。
JSP入门基本就这些了。对JSP掌握不需要太深入,知道能看懂就行,甚至很多公司程序员已经不用了这个技术了。而EL表达式和JSTL标签非常实用。
欢迎点赞评论,指出不足,笔者由衷感谢哦!~