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字节码文件

java jsp演示代码 jsp中java代码_java

java jsp演示代码 jsp中java代码_jsp_02


3.JSP的脚本:JSP定义Java代码的方式

可以简单理解为几个标签,带有<>。

  1. <% 代码 %>:定义的java代码,最终代码会放在在service()方法中。service方法中可以定义什么,该脚本中就可以定义什么。
  2. <%! 代码 %>:定义的java代码,在jsp转换后代码放在的java类的成员位置。
  3. <%= 代码 %>:定义的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:

java jsp演示代码 jsp中java代码_java_03


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(),作用:
  1. 设置响应体的mime类型以及字符集
  2. 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
  • import:导包,比如导入一些Java的类
  • errorPage:当前页面发生异常后,会自动跳转到指定的错误页面。
  • isErrorPage:标识当前页面是否是错误页面。属性值:
  1. true:是,可以使用内置对象exception
  2. 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:

java jsp演示代码 jsp中java代码_java_04


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

java jsp演示代码 jsp中java代码_java_05


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

java jsp演示代码 jsp中java代码_java jsp演示代码_06



5.JSP的注释

有两种注释的方式:

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

6.JSP的内置对象

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

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

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

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

  1. (底层)在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
  2. 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

java jsp演示代码 jsp中java代码_java jsp演示代码_07



案例:改造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

java jsp演示代码 jsp中java代码_java jsp演示代码_08


案例完成。



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


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