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

JSP入门篇,JSP了解、能看懂代码即可。



1.JSP概念

JSP( Java Server Pages ):java服务器端页面。

可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码。

目的就是为了简化代码编写。同时可以写Java代码和html,因此代码也不易阅读。


2.JSP原理

只需要记住JSP本质上就是一个Servlet。最终会生成一个.class字节码文件
在这里插入图片描述

在这里插入图片描述



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:
在这里插入图片描述



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:
在这里插入图片描述

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的注释

有两种注释的方式:

  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个内置对象

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

例子:

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

JSP1.png
案例完成。


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


推荐阅读:

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

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

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaWeb是一种用Java语言来开发动态网页的技术栈。它包括了Servlet和JSP两个主要的技术组件。JavaWeb的开发速度很快,功能也很强大,并且具有跨平台的特点。 JavaWeb可以用来开发静态网页和动态网页。静态网页是指提供给所有人看的数据始终不会发生变化,而动态网页是指提供给所有人看的数据会随着时间和地点的不同而发生变化。大部分网站都属于动态网页。在Java中,动态网页开发的技术统称为JavaWebJavaWeb采用B/S架构,即浏览器和服务器之间的交互。相比之下,C/S架构是客户端和服务器之间的交互。JavaWeb被广泛使用,因为它可以处理高并发、高性能和高可用性的问题,并且语法类似于ASP。 如果你想快速入门JavaWeb,你可以首先学习Servlet和JSP的基本语法和用法。Servlet是JavaWeb中的核心组件,用于处理请求和响应。JSP则是一种在HTML中嵌入Java代码的技术,可以方便地生成动态内容。你可以通过学习这两个组件的基础知识,了解JavaWeb的基本工作原理和开发流程。然后,你可以进一步学习JavaWeb框架,如Spring MVC和Struts,以提高开发效率和代码质量。还可以学习数据库连接和操作、前端技术等相关知识,以完善你的JavaWeb开发技能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [JavaWeb入门](https://blog.csdn.net/Massimo__JAVA/article/details/124496596)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值