JSP(java server pages)是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。

JSP是一种Java Servlet,主要用于实现Java Web应用程序的用户界面部分。

JSP其实是一个以“.jsp”为后缀的文件,该文件会被容器自动转换成一个Servlet然后执行。

网络服务器需要一个 JSP 引擎,也就是一个容器来处理 JSP 页面。容器负责截获对 JSP 页面的请求。通常使用内嵌 JSP 容器      的 Apache 来支持 JSP 开发。JSP 容器与 Web 服务器协同合作,为JSP的正常运行提供必要的运行环境和其他服务,并且能够正确识别专属于 JSP 网页的特殊元素。

一般情况下,JSP 引擎会检查 JSP 文件对应的 Servlet 是否已经存在,并且检查 JSP 文件的修改日期是否早于 Servlet。如果 JSP 文件的修改日期早于对应的 Servlet,那么容器就可以确定 JSP 文件没有被修改过并且 Servlet 有效。这使得整个流程与其他脚本语言(比如 PHP)相比要高效快捷一些。

总的来说,JSP 网页就是用另一种方式来编写 Servlet 而不用成为 Java 编程高手。除了解释阶段外,JSP 网页几乎可以被当成一个普通的 Servlet 来对待。

 

JSP语法

中文编码问题

如果我们要在页面正常显示中文,我们需要在 JSP 文件头部添加以下代码:

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

 

① 脚本程序

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

脚本程序的语法格式:

<% 代码片段 %>

程序示例:

<%
out.println("Your IP address is " + request.getRemoteAddr());
%>

 

② JSP声明

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

JSP声明的语法格式:

<%! declaration; [ declaration; ]+ ... %>

程序示例:

<%! int i = 0; %> 
<%! int a, b, c; %> 
<%! Circle a = new Circle(2.0); %> 

 

③ JSP表达式

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

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

表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。

JSP表达式的语法格式:

<%= 表达式 %>

程序示例:

<%= (new java.util.Date()).toLocaleString()%>

 

JSP指令

JSP指令用来设置与整个JSP页面相关的属性。

 

这里有三种指令标签:

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

 

JSP隐含对象

 

JSP隐含对象由容器自动创建,在JSP文件中可以直接使用的对象,支持九个自定义的变量,称隐含对象。

对象描述
request HttpServletRequest类的实例
response HttpServletResponse类的实例
out PrintWriter类的实例,用于把结果输出至网页上
session HttpSession类的实例
application ServletContext类的实例,与应用上下文有关
config ServletConfig类的实例
pageContext PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
page 类似于Java类中的this关键字
Exception Exception类的对象,代表发生错误的JSP页面中对应的异常对象

 

转发

 

一个web组件(Servlet/JSP)将未完成的处理通过容器转交给另一个web组件继续完成。

通常是一个Servlet将数据转发给JSP去展现。

如何转发?

①绑定数据到request

request.setAttribute(String name,Object obj);

②根据绑定名找到其对应的绑定值,绑定名不存在则返回null。

Object request.getAttribute(String name);

绑定值包装成了Object类型,所以在这一步通常需要强转成实际类型。

③获得转发器

RequestDispatcher rd = request.getRequestDispatcher(String url);

④转发

rd.forward(request,respones);

 

转发的特点

①转发之后地址栏不会发生变化。

原因是转发的过程是发生在服务器内部的,浏览器并不知道。

②转发所涉及的各个web组件会共享同一个request对象和response对象。

 

转发和重定向的区别

①重定向:是浏览器发送请求并收到响应以后再向一个新的地址发送请求。

    转发:服务器收到请求之后为了完成响应再转发到一个新的地址。

②重定向:产生两次请求对象,不共享数据。

    转发:只产生一次请求对象且在组件间共享数据。

③重定向:地址栏发生改变。

    转发:地址栏不发生改变。

④重定向:新地址可以是任意地址。

    转发:新地址必须是同一个应用内的某地址。

 

posted on 2018-05-19 23:03  FuYingju  阅读(47)  评论(0编辑  收藏  举报