jsp页面技术

jsp页面技术

jsp虽然已经被大部分公司淘汰,原因是前后端无法分离增加维护成本 但是学生用来写个毕业设计还是比较轻松的减少了后端的开发 小项目部署也比较简单

1、jsp的基本介绍

1.1 JSP的概念

  1. JSP简介

    JSP全称是Java Server Page,跟Servlet一样可以动态生成HTML响应, JSP文件命名为 xxx.jsp。

    JSP的本质其实就是一个Servlet,但与Servlet不同,JSP文件以HTML标记为主,然后内嵌Java代码段,用于处理动态内容。

1.2 JSP和HTML以及Servlet的适用场景

类别 适用场景
HTML 只能开发静态资源,不能包含java代码,无法添加动态数据。
Servlet 写java代码,可以输出页面内容,但是很不方便,开发效率极低。
JSP 它包括了HTML的展示技术,同时具备Servlet输出动态资源的能力。但是不适合作为控制器来用。

1. 3 JSP的示例

<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Hello Time</title>
    </head>
	<body>
		这是第一个JSP页面
	</body>
</html>

1.4 JSP的原理:

​ 明确JSP就是一个Servlet。是一个特殊的Servlet。

  1. JSP的原理:

    1. 客户端提交请求

    2. Tomcat服务器解析请求地址

    3. 找到JSP页面

    4. Tomcat将JSP页面翻译成Servlet的java文件

    5. 将翻译好的.java文件编译成.class文件

    6. 返回到客户浏览器上。

1.5 JSP与Servlet的关系

在这里插入图片描述

1.6 JSP的.java文件内容分析

  • 当我们打开index.jsp翻译的java文件看到的就是public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase类的声明,然后我们在Tomcat的源码中找到类的声明,如下图:
    在这里插入图片描述

    这张图一出场,就表明我们写的JSP它本质就是一个HttpServlet了。

在这里插入图片描述

  • 内容总结

    1. 同时,我们在index_jsp.java文件中找到了输出页面的代码,并且在浏览器端查看源文件,看到的内容是一样的。这也就是说明,我们的浏览器上的内容,在通过jsp展示时,本质都是用out.write()输出出来的。

    2. 讲到这里,我们应该清楚的认识到,JSP它是一个特殊的Servlet,主要是用于展示动态数据。它展示的方式是用流把数据输出出来,而我们在使用JSP时,涉及HTML的部分,都与HTML的用法一致,这部分称为jsp中的模板元素,在开发过程中,先写好这些模板元素,因为它们决定了页面的外观。

2、 JSP的语法

2.1 JSP语法结构

  • 声明区
  • 程序代码区
  • 表达式 注释
  • 指令和动作
  • 内置对象

1)声明区

  1. 基本语法:

    <%! %>

  2. 说明:可以定义全局变量、方法、类。

    <%!
        int i;
        public void setName(){… …}
    %>
    

2)程序代码区

  1. 基本语法:

    <%程序代码区%>

  2. 说明:可以定义局部变量以及放入任何的Java程序代码。

    <%
        int j;
        for (int k=0; k<10; k++) {
        	… …
        }
    %>
    

3)表达式

  1. 基本语法:

    <%=… …%>

  2. 说明: 可以输出一个变量或一个具体内容,但=后面必须是字符串变量或者可以被转换成字符串的 表达式。

  3. 注意:

    不需要以;结束,只有一行

    jsp在翻译完后是out.print(表达式内容);

    所以:<%out.print("当前时间);%>和<%=“当前时间”%>是一样的。

    在实际开发中,这种表达式语法用的也很少使用。

    <!--JSP表达式-->
    <%="这是JSP表达式"%><br/>
    就相当于<br/>
    <%out.println("这是没有JSP表达式输出的");%>
    

4) 注释

  1. 基本语法:

    格式:
    <!--… …--> 		HTML文件的注释,浏览器可以查看到
    <%--… …--%> 	JSP文件的注释,浏览器看不到
    <%//… …%> 		Java语言中的单行注释,浏览器看不到
    <%/*… …*/%> 	Java语言中的多行注释,浏览器看不到
    注释的内容不会被执行
    

5)语法的示例

JSP语法完整示例代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP语法</title>
</head>
<body>

<!--Java代码块-->
<% out.println("这是Java代码块");%>
<hr/>

<!--JSP表达式-->
<%="这是JSP表达式"%><br/>
就相当于<br/>
<%out.println("这是没有JSP表达式输出的");%>

<hr/>
<!--JSP声明-->
<%! String str = "声明语法格式";%>
<%=str%>

<hr/>

<%--JSP注释--%>
<!--HTML注释-->

</body>
</html>

JSP语法运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dfX3JO2Q-1632734223444)(…/…/images/mysql多表 外键 数据库设计/image-20210927022644255.png)]

2.2 JSP指令和动作

  1. 指令格式:

    <%@指令 属性=“属性值”%>

  2. 指令的属性可以设定多个。

  3. JSP常用指令有:page、taglib、include。

1)page指令

  • page指令用于导包和设置一些页面属性,常用属性如下:

    参数名 参数说明
    import 导入相应的包,惟一允许在同一文档中多次出现的属性
    contentType 设置Content-Type响应报头,标明即将发送到浏览器的文档类型
    pageEncoding 设置页面的编码 response.setContentType(“text/html;charset=UTF-8”);
    language 告知引擎,脚本使用的是java,默认是java,支持java。不写也行
    session 告知引擎是否产生HttpSession对象,即是否在代码中调用request.getSession()。默认是true
    isErrorPage 当前页是否可以作为其他页面的错误处理页面
    errorPage 处理当前页面中抛出但未被捕获的任何异常
    extends 告知引擎,JSP对应的Servlet的父类是哪个,不需要写,也不需要改。
    buffer JspWriter用于输出JSP内容到页面上。告知引擎,设定他的缓存大小。默认8kb
    isELIgnored 告知引擎,是否忽略EL表达式,默认值是false,不忽略。

    注意事项

    1. 当在errorpage上使用了isErrorPage=true之后,ie8有时候不能正常显示

    2. 配置全局错误页面:web.xml

    <error-page>    
        <exception-type>java.lang.Exception</exception-type>    			
        <location>/error.jsp</location>
    </error-page>
    <error-page>
        <error-code>404</error-code>
        <location>/404.html</location>
    </error-page>                                 
    
    1. 当使用了全局错误页面,就无须再写errorPage来实现转到错误页面,而是由服务器负责跳转到错误页面。

2)include指令

  1. include指令用于引入另一个JSP程序或HTML文件等 语法格式:

    <%@include file=“被包含的文件地址%>

  2. JSP引擎会在JSP文件的转换时期先把file属性设定的文件包含进来,然后开始执行转换及编译的工 作。

    属性:file,以/开头,就代表当前应用。

  3. 使用示例

在这里插入图片描述

  1. 静态包含的特点

在这里插入图片描述

3)taglib指令

  1. taglib指令用来扩展JSP程序的标签元素,引入其他功能的标签库文件

  2. 语法格式:

    <!-- prefix属性用于指定库前缀 -->
    <!-- uri属性用于指定库的标识 -->
    <%@taglib uri=“tagLibary” prefix=“prefix”%>
    
  3. 作用:

    该指令用于引入外部标签库。html标签和jsp标签不用引入。

4)jsp:include/jsp:param

  1. jsp:include动作用于引入另一个JSP程序或HTML文件等。

  2. 执行到include时,被include的文件才会被编译。

  3. 如果include的是jsp文件,那它不会被转换成Servlet文件。

    <jsp:include page=“URLSpec” flush=“true”/>
    <jsp:include page=“URLSpec” flush=“true”>
    	<jsp:param name=“key” value=“value”/>
    </jsp:include>
    

5)include指令和include动作的区别

  • include指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入再编译执行(静态包 含)。
  • include动作在转换时期是不会被编译的,只有在客户端请求时期被执行到才会被动态的编译载入 (动态包含,推荐)。

6)jsp:forward/jsp:param

  • forward动作用于在JSP中实现转发,将请求转发到另一个指定的JSP程序或者Servlet中处理。

    <jsp:forward page=“urlSpec” flush=“true”/>
    <jsp:forward page=“urlSpec”>
        <!-- 用于指定参数和其对应的值 -->
        <jsp:param name=“key” value=“value”/>
    </jsp:forward>
    

2.2.3 JSP细节

1)九大隐式对象(JSP内置对象)

  1. 基本概念

    • 什么是隐式对象呢?它指的是在jsp中,可以不声明就直接使用的对象。
    • 它只存在于jsp中,因为java类中的变量必须要先声明再使用。
    • 其实jsp中的隐式对象也并非是未声明,只是它是在翻译成.java文件时声明的。所以我们在jsp中可以直接使用。
  2. 九大隐式对象

    隐式对象名称 类型 备注
    out javax.servlet.jsp.JspWriter 字符输出流,相当于printwriter
    request javax.servlet.http.HttpServletRequest 请求信息
    response javax.servlet.http.HttpServletResponse 响应信息
    session javax.servlet.http.HttpSession 会话
    application javax.servlet.ServletContext 全局的上下文对象
    pageContext javax.servlet.jsp.PageContext JSP页面上下文
    page Java.lang.Object JSP页面本身
    config javax.servlet.ServletConfig Servlet配置对象
    exception java.lang.Throwable 捕获网页异常

2)out内置对象

  1. out内置对象是一个缓冲的输出流,用来给客户端输出信息

  2. 常用方法如下:

    方法声明 功能介绍
    void println(String x) 向客户端输出各种类型数据
    void newLine() 输出一个换行符
    void close() 关闭输出流
    int getBufferSize() 返回缓冲区的大小
    int getRemaining() 返回缓冲区中未使用的字节数
    void flush() 输出缓冲区里的数据
    void clearBuffer() 清除缓冲区里的数据,同时把数据输出到客户端
    void clear() 清除缓冲区里的数据,但不把数据输出到客户端

3)request内置对象

  1. request对象封装的是调用JSP页面的请求信息,它是HttpServletRequest接口的一个实例。

  2. 该对象的属性值只在一个请求中保存。

  3. 常用方法如下:

    方法声明 功能介绍
    String getMethod() 返回客户端向服务器端传送数据的方式
    String getParameter(String name) 返回客户端向服务器端传送的参数值
    String[] getParameterValues( String name) 获得指定参数的所有值
    String getRequestURI() 获得请求地址
    String getRemoteAddr() 返回发送请求的客户端或最后一个代理的IP地址
    int getRemotePort() 返回发送请求的客户端或最后一个代理的端口号
    String getServerName() 获取服务器的名字
    int getServerPort() 获取服务器端的端口
    void setAttribute(String name,Object o) 在此请求中存储属性。属性在请求之间重置
    Object getAttribute(String name) 将指定属性的值作为对象返回,若不存在则返回空 值

4)response内置对象

  1. response对象用于给客户端相应输出处理结果,它是HttpServletResponse接口的一个实例。

    经常用于设置HTTP标题,添加cookie、设置响应内容的类型和状态、发送HTTP重定向和编码 URL。

  2. 常用方法如下:

    方法声明 功能介绍
    void addCookie(Cookie cookie) 添加一个Cookie对象,用于在客户端保存特定的信 息
    void addHeader(String name, String value) 添加HTTP头信息,该Header信息将发送到客户端
    boolean containsHeader(String name) 判断指定名字的HTTP文件头是否存在
    void sendRedirect(String location) 重定向JSP文件
    void setContentType(String type) 设置类型与编码方式

5)session内置对象

  1. session对象表示浏览器和服务器之间的一次会话,一次会话可以包含多次请求,在多次请求之间 可以借助session对象存储信息,它是HttpSession类型的一个实例。

    该对象的属性值在一次会话范围中保存,保存在服务器端,只要不关闭浏览器,默认半个小时内都 可以访问

  2. 常用方法如下:

    方法声明 功能介绍
    void setAttribute(String name, Object value) 使用指定的名称将对象绑定到此会话
    Object getAttribute(String name) 返回在此会话中用指定名称绑定的对象,如果没有对象在该 名称下绑定则返回空值

6)application内置对象

  1. application对象是一个web程序的全局变量,它是ServletContext类型的一个实例。

    在整个服务器上保存数据,所有用户共享。

  2. 常用方法如下:

    方法声明 功能介绍
    void setAttribute(String name, Object object) 将对象绑定到此servlet上下文中的给定属性名
    Object getAttribute(String name) 返回给定名称的servlet容器属性,若没有该名称的属 性返回null

7) pageContext内置对象

  1. 简介

    它是JSP独有的对象,Servlet中没有这个对象。本身也是一个域(作用范围)对象,但是它可以操作其他3个域对象中的属性。而且还可以获取其他8个隐式对象。

    只在一个页面中保存数据。

  2. 生命周期

    它是一个局部变量,所以它的生命周期随着JSP的创建而诞生,随着JSP的结束而消失。每个JSP页面都有一个独立的PageContext。

  3. 常用方法

    方法声明 功能介绍
    void setAttribute(String name, Object value, int scope) 使用适当的作用域设置指定的名称和值
    Object getAttribute(String name, int scope) 返回指定作用域中名称关联的对象,若找不到 则返回null
    ServletRequest getRequest() 获取请求对象
    ServletResponse getResponse() 获取响应对象
    HttpSession getSession() 获取会话对象
    ServletConfig getServletConfig() 获取配置对象
    JspWriter getOut() 获取输出对象
    Object getPage() 获取页面对象
    Exception getException() 获取异常对象

8) exception内置对象

  1. exception 对象是Throwable的实例,表示的是JSP的异常信息

    如果要使用它,必须将对应页面page指令的isErrorPage属性设置成true。

  2. 单个页面的处理方式

    <%@page errorPage="error.jsp" %>
    
  3. 在web.xml中配置统一的异常处理页面。

    <error-page>
        <exception-type>java.lang.Throwable</exception-type>
        <location>/error.jsp</location>
    </error-page
    

3、jsp 四大域对象

域对象名称 范围 级别 备注
PageContext 页面范围 最小,只能在当前页面用 因范围太小,开发中用的很少
ServletRequest 请求范围 一次请求或当期请求转发用 当请求转发之后,再次转发时请求域丢失
HttpSession 会话范围 多次请求数据共享时使用 多次请求共享数据,但不同的客户端不能共享
ServletContext 应用范围 最大,整个应用都可以使用 尽量少用,如果对数据有修改需要做同步处理

4、JavaBean组件

  1. 基本概念

    javaBean 是使用 Java 语言开发的一个可重用的组件,在 JSP 开发中可以使用 JavaBean 减少重复 代码,使整个 JSP 代码的开发更加简洁。

  2. JavaBean本质上就是Java类,通常要求如下

    属性:全部私有化,通过get和set方法进行访问。、

    方法:必须是public关键字修饰。

    构造器 :必须有无参构造方法。

  3. 使用方式

    1. 使用jsp:useBean的方式创建javaBean实例

      <jsp:useBean id=“对象名” scope=“保存范围 class=“包名.类名” />
      保存范围有:page|request|sessin|application,默认为page范围。
      
    2. 使用jsp:setProperty的方式设置javaBean的属性值

      <jsp:setProperty name="对象名" property="属性名" value="属性值" param="参数名"/>
      
    3. 使用jsp:getProperty的方式获取javaBean的属性值

      <jsp:getProperty name="对象名" property="属性名"/>
      
  4. 保存范围

    JavaBean的保存范围有page、request、session以及application,默认是page范围。

  5. 删除方式

    <%
    	内置对象.removeAttribute(“JavaBean的名字”);
    %>
    

5、JSP最佳实战-MVC模型

5.1 基本概念

MVC是模型(Model)和视图(View)以及控制器(Controller)的简写,是一种将数据、界面显示和业务 逻辑进行分离的组织方式,这样在改进界面及用户交互时,不需要重新编写业务逻辑,从而提高了 代码的可维护性。

  1. M:主要用于封装业务数据的JavaBean(Bean) 和 业务逻辑的JavaBean(Service)及访问数据库的 DAO对象
  2. V:主要负责数据收集 和 数据展现,通常由JSP文件完成。
  3. C:主要负责流程控制 和 页面跳转,通常由Servlet完成。

5.2 基本模型

在这里插入图片描述

  1. 例如:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WQXMYlDp-1632734223449)(…/…/images/javaweb/assets/在这里插入图片描述
    )]

おすすめ

転載: blog.csdn.net/Junsunnyl/article/details/120513136