栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JSP规范

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JSP规范

目录

JSP文件运行原理

JSP文件中书写Java命令

JSP文件内置Java对象

application

session

request

Servlet和JSP联合使用

如何将Servlet中doGet/doPost方法执行结果交给JSP文件输出

附加:可以使用EL表达式简化JSP的开发。


一、JSP规范介绍 

  1. 来自于JAVAEE规范中一种。
  2. JSP规范制定了如何开发JSP文件代替响应对象将处理结果写入到响应体的开发流程。
  3. JSP规范制定了Http服务器应该如何调用管理JSP文件。

二、响应对象存在弊端

  1. 适合将数据量较少的处理结果写入到响应体
  2. 如果处理结果数量过多,使用响应对象增加开发难度

三、JSP文件优势

  1. JSP文件在互联网通信过程,是响应对象替代品。
  2. 降低将处理结果写入到响应体的开发工作量降低处理结果维护难度
  3. 在JSP文件开发时,可以直接将处理结果写入到JSP文件不需要手写out.print命令,在Http服务器调用JSP文件时,根据JSP规范要求自动的将JSP文件书写的所有内容通过输出流写入到响应体。

四、HTML文件与JSP文件区别

    1.作为资源文件类型不同

        HTML文件属于静态资源文件,其相关命令需要在浏览器编译并执行的。

        JSP文件属于动态资源文件,其相关命令需要在服务端编译并执行的。

   2.调用形式不同

        如果浏览器访问HTML文件,此时Http服务器直接通过一个输出流将HTML文件中所有的内容写入到响应体。

       如果浏览器访问JSP文件。此时Http服务器根据JSP规范来操作JSP文件编辑---->编译----->调用。

JSP文件运行原理

1、Http服务器调用JSP文件步骤:

    1)Http服务器将JSP文件内容【编辑】为一个Servlet接口实现类(.java)
    2)Http服务器将Servlet接口实现类【编译】为class文件(.class)
    3)Http服务器负责创建这个class的实例对象,这个实例对象就是Servlet实例对象
    4)Http服务器通过Servlet实例对象调用_jspService方法,将jsp文件内容写入到响应体

2、Http服务器【编辑】与【编译】JSP文件位置:【work】下看到

    C:Users[登录windows系统用户角色名].IntelliJIdea2018.3systemtomcat[网站工作空间]workCatalinalocalhost【网站别名】orgapachejsp

3、改进

        jsp中编写大量的java代码,会导致JSP很难维护,所以SUN推出了很多新语法,代替JSP中的java代码,使编程更加容易。增强可维护性。

        其中比较有代表性的EL表达式,函数库,JSTL标签库等。

4、HttpJspbase

        Tomcat将JSP文件编辑后生成的Java文件,继承与HttpJspbase。通过官方文档查看,其身份是HttpServlet的子类。所以Tomcat将JSP编辑为的文件为一个Servlet接口实现类。

5、_jspService方法

        1)作用:

          当一个JSP文件被访问时,Tomcat调用的并不是当前JSP文件。而是JSP文件对应的Servlet接口实现类中_jspService方法。_jspService方法负责将开发人员在JSP文件书写的所有内容写入到响应体中。

        2)内部结构:

  1. 判断当前请求方式。Jsp文件可以接收的请求方式有POST,GET,HEAD
  2. 声明局部变量。这些局部变量都可以在JSP文件开发时直接使用
  3. 输出部分。这部分执行时将JSP文件内容通过输出流写入到响应体

JSP文件中书写Java命令

在JSP文件中,只有书写在执行标记中内容才会被当做Java命令,语法格式:

<% java命令 %>

【注意】:在JSP文件中直接书写Java命令,是不能被JSP文件识别,此时只会当做字符串写入到响应体。

简单例子

<%
  int age = 14;
%>
<%
  if(age >= 18){
%>
    热烈欢迎
<%
  }else {
%>
    谢绝入内
<%
  }
%>

【总】:执行标记体中可以使用Java命令。

JSP文件内置Java对象

application

ServletContext application; 全局变量

同一个网站中Servlet与JSP,都可以通过当前网站的全局作用域对象实现数据共享。

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

<%
    application.setAttribute("key1", "hello world");
%>

session

类型:HttpSession

作用:JSP文件在运行时,可以session指向当前用户私人储物柜,添加共享数据,或者读取共享数据。

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

<%
    session.setAttribute("key1", 200);
%>

request

类型:HttpServletRequest

作用:在JSP文件运行时读取请求包信息 与Servlet在请求转发过程中实现数据共享。

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

<%
    // 在JSP文件执行时,借助于内置request对象读取请求包参数信息
    String userName = request.getParameter("userName");
    String password = request.getParameter("password");
%>
来访用户姓名:<%=userName%>
来访用户密码:<%=password%>

Servlet和JSP联合使用

        创建Student实体类

package com.km.entity;

public class Student {
    private Integer sid;
    private String sname;
    public Student() {
    }
    public Student(Integer sid, String sname) {
        this.sid = sid;
        this.sname = sname;
    }
    // set get 方法
}

        创建Servlet

package com.km.controller;

import com.km.entity.Student;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class oneServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Student stu1 = new Student(10, "mike");
        Student stu2 = new Student(20, "allen");
        List stuList = new ArrayList();
        stuList.add(stu1);
        stuList.add(stu2);
        //将处理结果添加到请求作用域对象
        request.setAttribute("key1", stuList);
        // 通过请求转发方案,向Tomcat申请调用user_show.jsp
        // 同时将request和response通过Tomcat交给user_show.jsp使用
        request.getRequestDispatcher("/user_show.jsp").forward(request, response);
    }
}

        将Servlet注册到/webWEB-INF/web.xml



    
        OneServlet
        com.km.controller.OneServlet
    
    
        OneServlet
        /one
    

        写JSP显示页面,user_show.jsp

<%@ page import="java.util.List" %>
<%@ page import="com.km.entity.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    // 从请求作用域对象得到OneServlet添加进去的集合
    List stuList =(List) request.getAttribute("key1");
%>


    <%
        for (Student stu : stuList){
    %>
        
    <%
        }
    %>
用户编号 用户姓名
<%=stu.getSid()%> <%=stu.getSname()%>

输入url,查看结果

http://localhost:8080/myweb/one

如何将Servlet中doGet/doPost方法执行结果交给JSP文件输出
  1. JSP文件被访问时,并不是JSP文件在执行。而是对应的Servlet在执行
  2. 自定义Serlvet接口实现类与JSP文件之间调用关系,等同于两个Servlet之间调用关系
  3. 自定义Servelt接口实现类与JSP文件之间可以通过重定向方案或则请求转发方案进行调用考虑到运行效率问题,一般采用【请求转发】
  4. 自定义Servlet接口实现类可以通过请求作用域对象将共享数据交给JSP来输出到响应体

附加:可以使用EL表达式简化JSP的开发。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/459465.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号