JSP学习笔记(一)

JSP 学习

一. JSP的执行过程

以下步骤表明了Web服务器是如何使用JSP来创建网页的:

就像其他普通的网页一样,浏览器发送一个HTTP请求给服务器。Web服务器识别出这是一个对JSP网页的请求,并且将该请求传递给JSP引擎。通过使用URL或者.jsp文件来完成。

JSP引擎从磁盘中载入JSP文件,然后将它们转化为servlet。这种转化只是简单地将所有模板文本改用println()语句,并且将所有的JSP元素转化成Java代码。 JSP引擎将servlet编译成可执行类,并且将原始请求传递给servlet引擎。 Web服务器的某组件将会调用servlet引擎,然后载入并执行servlet类。在执行过程中,servlet产生HTML格式的输出并将其内嵌于HTTP response中上交给Web服务器。Web服务器以静态HTML网页的形式将HTTP response返回到浏览器中。

最终,Web浏览器处理HTTP response中动态产生的HTML网页,就好像在处理静态网页一样。

在这里插入图片描述

二. JSP中的注释

JSP可以添加的注释:

  • HTML注释:<!–HTML注释-- >
  • JSP注释:<%–JSP注释–%>
  • JSP脚本中的Java注释:<%//单行注释%>、<%/多行注释/%>

注意区别:

  • JSP注释不会被转译, 在JSP文件转译的.java文件和浏览器得到的HTML源码中都不会有JSP注释的内容, 仅作用于JSP文件
  • Java注释会被转译, 在.Java文件中可以看到Java注释, 但是浏览器得到的HTML源码中没有Java注释, 作用于Java文件
  • HTML注释在.java文件和浏览器得到的HTML源码中都可以看到,作用于HTML

在JSP文件中添加以下注释:

<!-- html 注释  -->
<%
	/* java 注释  */
	// java 注释
%>
<%-- jsp 注释--%>

在JSP转译的java文件中看到:

在这里插入图片描述

浏览器得到的HTML源码:

在这里插入图片描述

三. JSP 指令

JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。

指令可以有很多个属性,它们以键值对的形式存在,并用逗号隔开。

JSP中的三种指令标签:

指令描述
<%@ page … %>定义网页依赖属性, 比如脚本语言、error页面、缓存需求等等
<%@ include… %>包含其他文件
<%@ taglib… %>引入标签库的定义

示例:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
属性说明
language指定JSP页面使用的脚本语言
import通过该属性来引用脚本语言中使用到的类文件
contentType用来指定HTML页面的MIME类型, 以及字符编码方式

单独使用jsp指令导包。如:

<%@page import="java.util.Date" %>

四. JSP语法

脚本程序

脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。

脚本程序的语法格式:

<% 代码片段 %>

示例:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
    <%
		out.println("Hello World!");
	%>
</body>
</html>

JSP声明

一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量和方法然后才能使用它们。

JSP声明的语法格式:

<%! 变量或方法声明 %>

转译为java文件后, <%! %>中的声明将会类成员变量或类方法

示例:

<%!
	int i = 0;
	public void func(){}
%>

转译后的java文件:

在这里插入图片描述

JSP表达式

一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。

由于表达式的值会被转化成String,所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。

表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。相当于在转译的servlet中调用了out.write(str)

JSP表达式的语法格式:

<%= 表达式 %>

示例:

<%= "hello world"%>

五. Web程序的常见状态码

状态码类别原因
1XXInformational(信息性状态码)接受的请求正在处理
2XXSuccess(成功状态码)请求正常处理完毕
3XXRedirection(重定向状态码)需要进行附加操作以完成请求
4XXClient Error(客户端错误状态码)服务器无法处理请求
5XXServer Error(服务器错误状态码)服务器处理请求出错

2XX : 成功

这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。

  • 200 OK

    请求已成功,请求所希望的响应头或数据体将随此响应返回。

3xx : 重定向

这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明。

  • 301 Moved Permanetly
    永久性重定向。该状态码表示请求的资源已经被分配了新的URI,以后应使用资源现在所指的URI。也就是说,如果已经把资源对应的URI保存为书签了,这时应该按照Location首部字段指示的URI重新保存。
  • 303 See Other
    该状态码表示由于请求对应的资源存在着另外一个URI,应该使用GET方法重定向获取请求的资源。
    这个方法的存在主要是为了允许由脚本激活的POST请求输出重定向到一个新的资源。

4xx : 客户端错误

  • 403 Forbidden
    表明对请求资源的访问被服务器拒绝了。服务端并没有必要给出拒绝的详细理由,但如果想作出说明的花,可以在实体的主体部分对原因描述,这样用户就能看到了。
  • 404 Not Found
    表明服务器上无法找到请求的资源。除此之外,也可以在服务端拒绝请求且不想说明理由时使用。

5xxx : 服务器错误

  • 500 Internal Server Error
    该状态码表明服务器断在执行请求时发生了错误。也可能是Web应用存在的bug或某些临时的故障。
  • 503 Service Unavailable
    表明服务器暂时处于超负荷或正在停机维护的状态,现在无法处理请求。如果事先得知解除以上状况需要的时间,最好写入Retry-After 首部再返还给客户端。

六. 请求转发和重定向

请求转发:

  1. 作用: 实现一次请求多个servlet联动操作处理请求,这摊避免了代码冗余,让servlet的职责更加明确

  2. 使用:

    req.getRequestDispatcher("要转发的地址").forward(request, response);
    

    getRequestDispatcher()的参数中接受要转发的地址(一个相对地址)

    forward()的参数是当前页面中的requestresponse两个对象, 直接传递给下一个页面

  3. 特点: 一次请求,浏览器地址栏信息不改变

在这里插入图片描述

重定向:

  1. 作用:跳转到指定的url,解决了刷新会重复提交的问题,以及当前servlet无法处理的请求

  2. 使用:

    response.sendRedirect(uri);
    

    sendRedirect()的参数为重定向的地址(网址的绝对路径)

  3. 特点: 请求分为了两次,所以有两个servlet对象, 浏览器地址栏改变

  4. 使用时机:

    • 如果请求中有表单数据,不能重复提交,则建议使用重定向
    • 如果当前的servlet无法处理,需要发送给别的servlet处理

在这里插入图片描述

区别:

请求转发: 属于服务器端的行为 是由服务器内部来进行跳转的 如果服务器跳转了页面的地址 浏览器不知道 所以浏览器的地址还停留在上一个页面的地址上. 拿生活中的示例举例: 一个办理人去政府机关办理业务, 前台受理了他的业务, 但是办理的业务超过了前台的业务范围, 此时需要把业务转给机关内部的人员继续办理. 就这样, 经过机关内部的层层处理,盖章, 最终处理完成, 回到了办理人的手中, 但是办理人并不清楚这其中的业务逻辑. 这里的办理人就相当于我们的客户端浏览器, 而政府机关就是我们的服务器.

重定向:属于客户端行为 是由客户端来发起跳转请求的.还是拿上面的例子举例: 办理人政府机关办理业务, 但是前台受理后发现这个业务不是本机关的受理业务, 并通知办理人前往另一个政府机关去办理相应的业务, 于是办理人需要再次发起一次请求给另一个政府机关.

比较项转发重定向
URL变化
重新发出请求不会
是否携带请求
目标URL要求仅本Web应用任意URL

注意:

  • 重定向是客户端行为, 请求转发是服务器行为
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值