【JavaWeb】JSP入门学习(全面)

【JavaWeb】JSP入门学习(全面)

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" %>

$Title$

<%

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....."); %>

运行,访问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:是,可以使用内置对象exceptionfalse:否。默认值。不可以使用内置对象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" %>

Title

<%

List list = new ArrayList();

//发生错误,跳转到500.jsp

int i = 3/0;

%>

500.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>

Title

服务器繁忙..

<%

//设置属性isErrorPage="true",才能使用jsp内置对象exception

String message = exception.getMessage();

out.print(message);

%>

访问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" %>

Title

使用include指令...

top.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

页面logo页面标题

访问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" %>

Title

使用taglib指令...

我是真...

访问jspDemo3.jsp

5.JSP的注释

有两种注释的方式:

:html注释,只能注释html代码片段。<%-- 内容 --%>:jsp注释,推荐使用,可以注释所有。

6.JSP的内置对象

JSP的内置对象指:在jsp页面中不需要获取和创建,可以直接使用的对象。jsp一共有9个内置对象。

先介绍熟悉的3个内置对象:

requestresponseout:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似

response.getWriter()和out.write()的区别:

(底层)在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。response.getWriter()数据输出永远在out.write()之前。

jsp9个内置对象

变量名真实类型作用pageContextPageContext在当前页面共享数据,还可以获取其他八个内置对象requestHttpServletRequest一次请求访问的多个资源(转发)sessionHttpSession一次会话的多个请求间applicationServletContext所有用户间共享数据responseHttpServletResponse响应对象pageObject当前页面(Servlet)的对象,理解为thisoutJspWriter输出对象,数据输出到页面上configServletConfigServlet的配置对象exceptionThrowable异常对象

例子:

jspDemo4.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

Title

使用jsp内置对象

<%

ServletContext servletContext = pageContext.getServletContext();

pageContext.setAttribute("msg","hello");

%>

<%= pageContext.getAttribute("msg") %>

访问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" %>

Title

<%

//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);

%>

欢迎回来,您上次访问时间为:<%= value %>

<%

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);

%>

您好,欢迎您首次访问

<%

}

%>

访问home.jsp

案例完成。 JSP入门基本就这些了。对JSP掌握不需要太深入,知道能看懂就行,甚至很多公司程序员已经不用了这个技术了。而EL表达式和JSTL标签非常实用。

推荐阅读:

JSP进阶:EL表达式和JSTL标签.

欢迎点赞评论,指出不足,笔者由衷感谢哦!~

相关推荐

荣耀Earbuds对比-荣耀耳机怎么样
bat365在线登录官网

荣耀Earbuds对比-荣耀耳机怎么样

📅 07-31 👁️ 2018
您所访问的页面不存在
365bet新网址

您所访问的页面不存在

📅 07-23 👁️ 8008
怎么使用Win10自带修复系统功能?使用Win10自带修复功能操作方法