zoukankan      html  css  js  c++  java
  • JSP基础学习

    入门学习

    1. 概念:

      • Java Server Pages:java服务器端页面
      • 可以理解为:一个特殊的页面,其中既可以指定定义 html 标签,又可以定义 java 代码
      • 用于简化书写!!!
    2. JSP原理

      • JSP本质上就是一个Servlet
    3. JSP脚本:JSP定义Java代码的方式

      1. <% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
      2. <%! 代码 %>:定义的java代码,在 jsp 转换后,在 java 类的成员位置
      3. <%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本就可以定义什么。
    • 示例:
      <%
        int i = 100;
        System.out.println("定义在service方法中");
      %>
    
      <%!
          int i = 500;
        public void method() {
          System.out.println("可以定义成员方法或成员变量");
        }
      %>
    
      <%=
      // 输出到页面
        i
      %>
      hi~ jsp
      $END$
    
    1. JSP的内置对象

      • 内置对象:在 jsp 页面中不需要获取和创建,可以直接使用的对象
      • jsp 一共有9个内置对象
      • 其中的三个
        • request:
        • response:
        • out:字符输出流对象。可以将数据输出到页面上。和 response.getWriter() 类似
          • response.getWriter() 和 out.writer() 的区别:
            • 在 tomcat 服务器真正给客户端做出响应之前,会先找 response 缓冲区数据,再找 out 缓冲区数据。
            • response.getWriter() 数据输出永远在 out.writer()之前
    2. 案例:使用jsp完成cookie中的案例

    <%@ page import="java.io.UnsupportedEncodingException" %>
    <%@ page import="java.net.URLDecoder" %>
    <%@ page import="java.net.URLEncoder" %>
    <%@ page import="java.text.SimpleDateFormat" %>
    <%@ page import="java.util.Date" %>
    <%@ page import="com.sun.jdi.Value" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>jsp标题</title>
    </head>
    <body>
    <%!
        /**
         * 更新时间
         *
         * @return 格式化的时间字符串格式
         * @throws UnsupportedEncodingException
         */
        private String updateTime() throws UnsupportedEncodingException {
            // 写回cookie,更新时间
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            String str_date = sdf.format(new Date());
            // URL编码
            str_date = URLEncoder.encode(str_date, "utf-8");
            return str_date;
        }
    %>
    <%
        // 1.获取所有的cookie
        Cookie[] cookies = request.getCookies();
        // 2.遍历cookies
        boolean flag = false; // 没有cookie,则为false
        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;
                    System.out.println("有cookie");
                    // 响应数据
                    String value = cookie.getValue();
                    // URL解码
                    value = URLDecoder.decode(value, "utf-8");
    %>
    <h1>您上次的访问时间为:<%= value %></h1>
    <%
                String str_date = this.updateTime();
                cookie.setValue(str_date);
                // 设置cookie的存活时间
                //cookie.setMaxAge(0); // 删除cookie
                response.addCookie(cookie); // 发送cookie
                // 找到lastTime的cookie后,退出,不再继续循环判断
                break;
            }
        }
        if (cookies == null || cookies.length == 0 || flag == false) {
            // 没有lastTime的cookie,第一次访问
            System.out.println("没有cookie,设置cookie");
            // 响应数据
    %>
    <h1>您好,欢迎首次登录</h1>
    <%
                String str_date = this.updateTime();
                Cookie cookie = new Cookie("lastTime", str_date);
    //                System.out.println(cookie.getValue().length());
                // 设置cookie的存活时间
                cookie.setMaxAge(60 * 60 * 24 * 30); // cookie存活1个月
                response.addCookie(cookie); // 发送cookie
            }
        }
    %>
    </body>
    </html>
    

    指令

    • 作用:用于配置JSP页面,导入资源文件
    • 格式:
      • <% 指令名称 属性名1=属性值1 属性名2=属性值2 ...%>
    • 分类:
      1. page:配置JSP页面的
        • contentType:等同于response.setContentType()
          1. 设置响应体的 mime 类型以及 字符集
          2. 设置当前 jsp 页面的编码(只能是高级IDEA才能生效,如果使用低级工具,则需要设置 pageEncoding 属性设置当前页面的字符集)
        • import:导包
        • errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
        • iserrorPage:表示当前页面是否是错误页面
          • true:是,可以使用内置对象 exception
          • false:否,默认值。不可以使用内置对象 exception
      2. include:页面包含的。导入页面的资源文件
        • <%@ include file="top.jsp" %>
      3. taglib:导入资源
        • <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

    注释

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

    内置对象

    • 在jsp页面中不需要创建,直接使用的对象
    • 一共有9个内置对象:
    变量名 真实类型 作用
    pageContext PageContext 当前页面共享数据,还可以获取其他八个内置对象
    request HttpServletRequest 一次请求访问的多个资源(转发)
    session HttpSession 一次会话的多个请求间
    application ServletContext 所有用户间共享数据
    response HttpServletResponse 响应对象
    page Object 当前页面(Servlet)的对象,也就是 this
    out JspWriter 输出对象,数据输出到页面上
    config ServletConfig Servlet的配置对象
    exception Throwable 异常对象

    注:exception 对象:声明了 iserrorPage="true" 才会有

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

    MVC:开发模式

    jsp演变历史

    1. 早期只有Servlet,只能使用 response 输出标签数据,非常麻烦
    2. 后来有sun公司制作 jsp标准,简化了Servlet的开发,如果过度使用 jsp,在 jsp 中写了大量的 java 代码,又写html标签,造成难于维护,难于分工协作
    3. 再后来,java的web开发,借鉴 mvc 开发模式,使得程序的设计更加合理性。

    MVC

    1. M:Model,模型。JavaBean

    • 完成具体的业务操作,如:查询数据库,封装对象

    2. V:View,视图。JSP

    • 展示数据

    3. C:Controller,控制器。Servlet

    • 获取用户的输入

    • 调用模型

    • 将数据交给视图进行展示

    优缺点:
    1. 优点:
    1. 耦合性低,方便维护,可以利于分工协作
    2. 重用性高
    2. 缺点:
    1. 使得项目的架构变得复杂,对开发人员要求高

  • 相关阅读:
    Rancher2.x部署K8s
    windows 安装 rabbitmq
    Mysql优化
    Docker部署Nginx应用(2)
    Docker入门笔记(1)
    kafka的安装及基本使用
    Dubbo的Api+Provider+Customer示例(IDEA+Maven+Springboot+dubbo)
    zookeeper 数据节点的增删改查
    zookeeper伪分布集群配置
    密集重建
  • 原文地址:https://www.cnblogs.com/rainszj/p/12188883.html
Copyright © 2011-2022 走看看