zoukankan      html  css  js  c++  java
  • Jsp 入门学习

    JSP 简介

    什么是Java Server Pages?

    1. JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
    2. JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。
    3. JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
    4. JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。

    为什么使用JSP?

    1. JSP 基于Java Servlet API,因此,JSP拥有各种强大的企业级Java API,包括JDBC,JNDI,EJB,JAXP等等。
    2. JSP页面可以与处理业务逻辑的 Servlet 一起使用,这种模式被Java servlet 模板引擎所支持。
    3. JSP是Java EE不可或缺的一部分,是一个完整的企业级应用平台。这意味着JSP可以用最简单的方式来实现最复杂的应用。

    JSP的优势

    1. 与纯 Servlet 相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。
    2. 与JavaScript相比:虽然JavaScript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。
    3. 与静态HTML相比:静态HTML不包含动态信息。

    JSP 的执行过程

    1. 首先,客户端发出请求(request ),请求访问JSP网页
    2. 接着,JSP Container将要访问的.JSP文件 转译成Servlet的源代码(.java文件)
    3. 然后,将产生的Servlet的源代码(.java文件)经过编译,生成.class文件,并加载到内存执行
    4. 最后把结果响应(response )给客户端

    实例引入

    创建一个Java EE Tomcat项目,在 index.jsp 文件里面,进行修改:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>JSP 的入门学习</title>
      </head>
      <body>
        <%
          System.out.println("这里可以定义Java代码!");
        %>
        这里是HTML ~ ~ ~
      </body>
    </html>
    

    启动tomcat服务器,访问该页面,页面内容如下:

    这里是HTML ~ ~ ~
    

    控制台输出:

    这里可以定义Java代码!
    

    项目被部署到的根目录为:~/Library/Caches/JetBrains/IntelliJIdea2020.1/tomcat/Tomcat_8_5_54_CookieStudy

    在目录:apache/jsp/ 中可以看到一个 index_jsp.java 文件,这个文件就是通过index.jsp的内容生成的。查看该文件部分内容:

    20200530231540

    通过这里与上面的jsp文件,可以知道,其实给文件就是通过index.jsp文件生成的。且该类继承了Servlet的子类。


    JSP定义Java代码的方式

    1. <% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。

      如上面 20200530231540.png 图中的内容都是在 _jspService 类中的。

    2. <%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置。

    3. <%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。


    JSP的内置对象

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

    如:

    • request

    • response

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

      javax.servlet.jsp.JspWriter out=null
      

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

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

    案例

    原Java类实现:cookie案例

    通过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>Cookie 练习</title>
        </head>
        <body>
            <%
                // 设置响应的消息体的数据格式以及编码
                response.setContentType("text/html;charset=utf-8");
                // 获取所有Cookie
                Cookie[] cookies = request.getCookies();
                // 默认没有cookie为lastTime
                boolean flag = false;
                // 遍历cookie数组
                if(cookies != null && cookies.length > 0) {
                    for (Cookie cookie : cookies) {
                        // 获取cookie的名称
                        String name = cookie.getName();
                        // 判断名称是否是:lastTime
                        if("lastTime".equals(name)) {
                            // 有cookie为lastTime,不是第一次访问
                            flag = true;
                            // 获取当前时间的字符串
                            Date date  = new Date();
                            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                            String stringDate = simpleDateFormat.format(date);
                            // 由于stringDate字符串中存在特殊字符(空格),需要URL编码
                            String encodeCookie = URLEncoder.encode(stringDate, "utf-8");
                            // 重新设置Cookie的值
                            cookie.setValue(encodeCookie);
                            // 设置cookie的存活时间:存活一个小时
                            cookie.setMaxAge(60 * 60);
                            // 在响应对象中添加该设置的cookie
                            response.addCookie(cookie);
    
                            // 响应数据
                            // 获取Cookie的value(时间)
                            String value = cookie.getValue();
                            // 对获取到的cookie值进行URL解码
                            String decodeValue = URLDecoder.decode(value, "utf-8");
                            %><h1>欢迎回来,您上次访问时间为:<%=decodeValue%></h1><%
                            // 已经完成了需求
                            break;
                        }
                    }
                }
                // 假如上面遍历了所有的cookie,都没有cookie为lastTime,或者用户的请求中没有cookie,说明用户是第一次访问
                if(cookies == null || cookies.length == 0 || flag == false) {
                    // 获取当前时间的字符串
                    Date date  = new Date();
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                    String stringDate = simpleDateFormat.format(date);
                    // 由于stringDate字符串中存在特殊字符(空格),需要URL编码
                    stringDate = URLEncoder.encode(stringDate, "utf-8");
                    // 重新设置Cookie的值
                    Cookie cookie = new Cookie("lastTime", stringDate);
                    // 设置cookie的存活时间
                    cookie.setMaxAge(60 * 60);
                    // 重新发送cookie
                    response.addCookie(cookie);
                    %><h1>您好,欢迎您首次访问!</h1><%
                }
            %>
        </body>
    </html>
    

    与原java程序相比,这里将页面的输出语句,直接单独定义为HTML标签。

    开启服务器,浏览器访问:http://localhost:8080/CookieStudy_war_exploded/cookie.jsp

    20200531144010

    再次访问该网址:

    20200531144500

    参考文献

    1. JSP 简介| 菜鸟教程
    2. JSP运行原理
    Good Good Write Bug, Day Day Up
  • 相关阅读:
    Reverse Bits
    Number of 1 Bits
    Single Number,Single Number II
    Repeated DNA Sequences
    Fraction to Recurring Decimal
    Isomorphic Strings
    Valid Sudoku
    Count Primes
    Bulls and Cows
    高性能Web服务器Nginx的配置与部署研究(12)应用模块之Memcached做文件缓存时压缩引起的问题
  • 原文地址:https://www.cnblogs.com/liyihua/p/14477412.html
Copyright © 2011-2022 走看看