为了账号安全,请及时绑定邮箱和手机立即绑定

Java EE (JSP 入门)

标签:
Java
目录
  1. 概述
  2. 页面元素及内置对象的概念
  3. Servlet 与 JSP 作用总结
  4. 登录案例

一、概述内容

1.1 动态网页的执行原理

  • 使用 Servlet 生成动态网页,任何网页的内容都可以通过 out.priintln() 一行一行的实现
  • 执行步骤:
    • 容器初始化 Servlet实例。根据网页相对应的请求方法,调用与之对应的 doXXX 方法,并初始化请求和响应对象,作为 doXXX 方法的参数使用
    • 执行 doXXX 方法后,将响应对象的数据流写到客户端
    • 游览器将收到的数据进行解析,显示给用户

问题提出?

Servlet 生成动态页面太麻烦了,其实大部分静态内容都是一行一行的输出

解决方案:

Java EE 提供了新的动态页面组件 JSP,可以更加便捷的生成动态网页

1.2 JSP 功能与特性

1.2-1 JSP 功能与特性
  • JSP (Java Server Page)是 JavaEE 规范中的 Web 组件,用来编写动态页面
  • JSP 运行在服务端,本质是 Servlet
  • JSP 文件以 .jsp 为后缀,存放在项目下的 WebContent 目录下
  • JSP 文件游览器可以直接访问
  • JSP 文件的内容是 HTML + Java 代码,静态部分使用 HTML 和 文本即可,动态部分使用 Java 代码
1.2-2 JSP 功能与特性

一个标准的 JSP 页面如下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!--前面两行是 Java 代码能够写在 HTML 中的特定格式,也是 JSP 中的指令格式。这里是 JSP 的指令格式 -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

这里就是 JSP 的静态文本结构,比Servlet 简单多

<% System.out.println("Hello World")%> <!--这里是专门写 Java 代码的地方,用于实现 HTML 不方便实现的功能,但是 JavaScript同样也可以实现 -->
</body>
</html>

特别强调,在 JSP 中, 动态部分是写 Java 代码为主<%%> 为脚本片段,<%=%> 为输出表达式

1.3 JSP 的执行流程解析

JSP 的执行流程主要分为三个部分:

首先我们编写好了一个 index.jsp 文件是打开游览器运行,这时候进行了如下过程

  1. Web 服务器找到了 index.jsp,然后会对其进行翻译,生成 index_jsp.java 文件,然后进入工作空间
\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost
  1. 编译、服务器(tomcat服务器) 会将 index_jsp.java 编译成 class 文件(类文件),翻译和编译过程遵守 Servlet规范,因此说 JSP 的本质也是 Servlet
  2. 运行:实例化并提供服务:服务器实例化类,调用类中的_jspService方法提供服务

我们可以在 生成的 index_jsp.java 文件中下的 _jspService 文件下可以看到一行行我们在 HTML 中编写的代码,全部都在这个文件中变成了 out.println(xxx)。静态内容都是用 out 输出,和 Servlet中输出的是一样的,而且
所有的 Java代码都直接翻译到相对应的位置。

总结一句话,JSP 的本质就是一个 Servlet,不过是服务器翻译生成了 Java 类,不用我们编写而已。但是也并不是 Servlet 没有任何用了,它还可以用来写一些后台逻辑等问题

提问 与 总结

  1. 为什么要用 JSP 组件?

答:Servlet 生成动态页面比较繁琐,使用 JSP生成动态页面比较便捷,其中静态内容可以使用 HTML 生成

  1. JSP 执行的流程是什么?

答:JSP 的执行过程 翻译—>编译—>实例化—>提供服务

JSP 的本质就是 Servlet,不过服务器是将 JSP 进行了翻译和编译,可以说 JSP 也是Java 类

二、页面元素及内置对象概念

知识点:

  1. 脚本元素
  2. 表达式元素
  3. 模板元素
  4. 声明元素
  5. 内置对象概念

2.1 脚本元素

  • 脚本元素可以包含 Java 代码
  • 基本格式: <%Java代码%>
<%System.out.println("我是脚本元素")%>
  • 服务器翻译脚本元素的时候,将其中的 java 代码直接翻译到 _jspService中,如果语法错误,游览器就会显示对应的错误

2.2 表达式元素

  • 表达式元素用来向叶面输出动态内容
  • 格式为:<%=Java代码%>,例如
<%=request.getRemoteAddr() %> 获取当前的端口
  • 服务器翻译表达式元素时,将把其中Java代码部分的返回值使用out.write语句输出,例如:
out.write("您的IP地址:");
out.print(request.getRemoteAddr() );

2.3 模板元素

  • 模板元素指 JSP 中静态 HTML 或者 XML 内容;
  • 在 JSP 中可以使用注释元素,有三种情况
    • 格式为 <%-- JSP --%>,JSP的注释只有在源代码中可见,翻译时已忽略
    • 在 JSP 中,除了使用 JSP 注释外,还可以使用 HTML 注释 <!-- HTML 注释 – >(这里直接打 HTML 注释会被隐藏) ,HTML 注释会被返回到客户端,但是不会显示到页面中
    • JSP 中的 Java 代码部分,可以使用 Java 注释;Java 注释会翻译到.java 文件中,但是编译时忽略

2.4 声明元素

  • 需要在 JSP 文件中定义类的成员变量或者方法,可以使用声明元素
  • 格式: <%! 声明语句 %>
  • 声明元素被翻译到 Java类中,而不是 jspService 中
    eg:比如我写一个比较大小的函数
<%!
private String path="WEB-INF";
public void readPropertiesFile(){

}

public int max(int x,int y)
{
	return a>b?a:b;
}
%>

这样在 jsp 其他页面中就可以直接通过方法名调用我们写的方法

2.5 内置对象的概念

  • 内置对象指的是在 JSP 中可以直接使用的对象,不需要申明,直接使用固定的名字即可
    比如:
<%=request.getRemoteAddr()%>中的 request 就是内置对象

问题1:不用声明,对象从哪里来的?
答1:服务器在翻译编译 JSP 时默认声明创建的,都在 JSPService 方法的参数和方法体内。

问题2:为什么可以直接使用呢(直接使用 request 方法)?
答2:我们所编写的 JSP 的所有内容,都被服务器翻译在内置对象声明创建后,因此可以直接用

问题3:有哪些内置对象?
答3:有 9个,比如 request、response、out、session等等。查看 JSP 翻译成的 Java 文件就很清楚了

2.6 总结及提问 【页面元素及内置对象】

  1. 脚本元素、表达式元素的作用是什么?
  2. 有几种注释? (三种)
  3. 声明元素有什么不同?
  4. 内置对象时是什么意思?如何使用?

问题一:

JSP 中的 Java 代码都可以直接写到脚本元素 <%%> 中
如果要向游览器输出动态内容,可以使用表达式元素 <%=%>

问题二:

JSP中有三种注释,分别是JSP注释、HTML注释、Java注释;

问题三:

<%!%>声明元素只能用来编写声明代码,翻译到Java类中,而不是_jspService方法中;

问题四:

内置对象指的是服务器已经声明并赋值的对象,可以直接使用

第三节 Servlet 与 JSP 的作用

  1. Servlet与JSP的作用总结
  2. Servlet与JSP之间跳转的方式
  3. 请求属性的使用

3.1 Servlet 与 JSP 作用总结

  • Servlet 和 JSP 都可以生成动态页面,然而 JSP 中静态页面可以直接使用 HTML 来编写,动态部分通过 java 语言编写即可
  • Servlet 一般不会用来生成动摇页面,而是会用来接收来自 JSP 的请求,处理请求,然后跳转到 JSP 页面吧结果显示给客户端看

3.2 Servlet 与 JSP 之间的跳转方式

跳转方式一:响应重定向
方法声明 方法描述
void sendRedirect(java.lang.String location) 响应重定向到location,相当于客户端重新请求location所在的资源;

请求转发后,页面会重新加载到 显示的 jsp 页面

跳转方式二:请求转发
方法声明 方法描述
forward(ServletRequest request, ServletResponse response) 响应重定向到location,相当于客户端重新请求location所在的资源;
  • 要使用 forward 方法,需要现货的 RequestDispatcher 对象,请求接口中提供了获得该对象的方法
方法声明 方法描述
RequestDispatcher getRequestDispatcher(java.lang.String path)
使用path返回一个RequestDispatcher 对象

3.3 请求属性的使用

  • 如果需要在Servlet,JSP之间跳转时,同时把一些自定义的、或者通过数据库查询的、或者调用其他资源获得的数据传递到下一个资源时,就可以把这些数据设置为请求的属性即可。
  • 请求接口中定义了一系列与属有关的方法
方法声明 方法描述
void setAttribute(java.lang.String name, java.lang.Object o) 将任意类型对象设置为请求的属性,指定一个名字;
java.lang.Object getAttribute(java.lang.String name) 通过属性的名字,获取属性的值;
void removeAttribute(java.lang.String name) 通过属性的名字,删除属性;
3.4 总结与提问
1. Servlet 与 JSP 分别有什么作用?
  • JSP 往往用来生成动态页面, 而Servlet虽然可以生成动态页面却比较麻烦,往往用来接收JSP 请求,处理请求,然后跳转到不同的 JSP 页面进行结果显示

2. Servlet 和 JSP 之间跳转有几种方式,有何区别?

  • Servlet 和 JSP 之间的跳转方式有两种,分别是 响应重定向 和 请求转发
  • 响应重定向 相当于客户端重新发出请求,之前的请求不再保存; 请求转发是把当前请求转发到下一个资源; 请求转发比较常用

3. 什么是请求属性?和请求参数有啥区别?

  • 请求属性可以是任意类型的对相爱过,可以用 setAttribute 方法将对象作为属性存储到请求对象中
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消