编者注: JavaServer Pages(JSP)技术使您可以轻松创建同时包含静态和动态组件的Web内容。 JSP技术提供了Java Servlet技术的所有动态功能,但提供了一种更自然的方法来创建静态内容。

JSP技术的主要功能包括用于开发JSP页面的语言,该语言是描述如何处理请求和构造响应的基于文本的文档,用于访问服务器端对象的表达语言以及用于定义JSP语言扩展的机制。

这是一篇独立的参考文章,旨在提供有关如何使用JSP的框架,并帮助您快速启动自己的应用程序。 请享用!

目录

1.简介
1.1。 为什么JSP比Servlet更受青睐?
2.生命周期
2.1。 翻译 2.2。 汇编 2.3。 加载和初始化 2.4。 执行 2.5。 毁灭
3.演示:首先 4.指令
4.1。 句法 4.2。 种类
5.脚本标签
5.1。 种类 5.2。 例
6.表达语言
6.1。 经营者 6.2。 隐式对象
7.异常处理
7.1。 介绍 7.2。 方法 7.3。 ErrorPage和isErrorPage 7.4。 在web.xml中
8.国际化
8.1。 区域设置类
9.会议
9.1。 方法 9.2。 例
10. JavaBean
10.1。 JavaBean属性 10.2。 useBean标签 10.3。 标签的属性 10.4。 例
11.请求和响应对象
11.1。 请求 11.2。 HttpServletRequest 11.3。 HttpServletResponse
12.参考
12.1。 网站 12.2。 书
13.总结 14.下载

1.简介

Java Server Pages(JSP)用于创建动态网页。 可以使用JSP标记将Java代码插入HTML页面。 这些标记用于从数据库检索信息,在页面之间共享信息等。通常用于运行JSP页面的IDE是NetBeansIDE和EclipseIDE。

为什么JSP比Servlet更受青睐?

  • JSP提供了一种创建和管理动态网页的简便方法。
  • 它不需要其他文件,例如java类文件和web.xml
  • 由于JSP由Web容器处理以对其代码进行任何更新,因此不需要像servlet一样进行重新编译。
  • 可以直接访问JSP页面,而Servlet需要使用web.xml进行映射。

2.生命周期

JSP生命周期与Servlet生命周期相同,只是增加了一步。 在此步骤中,将JSP编译到servlet中。 生命周期如下图所示:

翻译

在第一阶段,Web容器将JSP文档转换为等效的Java代码。 此Java代码是一个Servlet。 转换由Web服务器自动完成,该Web服务器定位,验证正确性并为JSP页面编写servlet。

汇编

在此阶段,JSP容器编译Java源代码,以创建相应的servlet和生成的类文件。

加载和初始化

在第三阶段,JSP容器加载在前两个阶段中生成的servlet。 正确加载后,JSP容器将创建servlet类的实例。 在这里,它使用无参数构造函数。

现在,JSP容器通过调用init方法初始化实例化的对象。 这是由容器通过调用jspInit()方法实现的。

public void jspInit() {// Initialization code...
}

执行

在此步骤中,JSP引擎调用_jspService()方法。 该方法有两个参数,即HttpServletRequest和HttpServletResponse,每个请求调用一次。 它还负责生成对此请求的响应。

void _jspService(HttpServletRequest request, HttpServletResponse response)
{
}

毁灭

最后一步完成了生命周期。 在这种情况下,容器使用jspDestroy()方法删除JSP。

public void jspDestroy()
{// any cleanup code
}

3.演示:首先

这是JSP使用的示例。 请遵循以下步骤,使用Eclipse IDE从第一个JSP应用程序开始。 使用的技术如下:

  • Java 1.8
  • Eclipse IDE:适用于Web开发人员的Eclipse Java EE IDE 4.4.1
  • JSP
  • Apache Tomcat 8

图1:让我们开始创建一个新的动态Web项目:

图2:将项目名称添加为RankWebApplication ,然后单击Next

跳过此步骤以配置项目,然后单击下一步,因为我们专注于一个简单的演示项目。

图3:配置项目:

图4:配置Web模块设置; 避免生成web.xml文件,因为此演示项目不需要该文件。

单击完成后 ,将创建动态Web项目。 该项目的目录在“ Package Explorer”下的左面板上可见:

图5:项目目录结构:

右键单击WebContent目录,然后将新的JSP文件添加到项目中。

图6:现在,在动态Web项目中添加JSP文件:

图7:从向导添加新的JSP文件:

单击上面的Next之后,将新文件命名为NewRankFile.jsp并单击Next

图8:添加了NewRankFile.jsp:

图9:设置JSP模板:

单击上方的完成将创建新文件。 现在,在清单1中添加以下给定的代码,该代码显示板球队的排名。

清单1:NewRankFile.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>ICC Ranking</title>
</head>
<body>
<h1>ICC ODI Ranking</h1><table><tr><th>Rank</th><th>Country</th></tr><tr><td>1</td><td>Australia</td></tr><tr><td>2</td><td>India</td></tr><tr><td>3</td><td>South Africa</td></tr></table><!--  JSP Expression is used here for getting system date --><b>Note:</b> Website updated on: <%= (new java.util.Date()).toLocaleString()%></body>
</html>

右键单击并选择运行方式运行项目。

图10:从选项中单击在服务器上运行

选择“在服务器上运行”,然后在EclipseIDE中运行第一个项目时, 手动定义一个新服务器“ Tomcat” 。 选中“在运行此项目时始终使用此服务器”,以避免重复此选择:

图11:选择服务器:

在这里,输出显示使用JSP表达式生成的ICC排名和网站更新时间。 输出链接:http:// localhost:8080 / RankWebApplication / NewRankFile.jsp

图12:显示ICC ODI排名和网站更新时间的输出:

4.指令

指令标签用于提供在JSP生命周期的翻译阶段使用的指导和说明。

句法

<%@ directive attribute="value" %>

这里的指令可以具有许多属性。

种类

图13:指令标记的类型:

4.2.1。 页面指​​令

页面指​​令标签提供了在JSP生命周期的转换阶段翻译人员使用的指令。 它可以包含在任何位置,但是根据惯例,它被认为是一种在顶部包含它的良好编程风格。 语法如下:

<%@page attribute ="value" %>

XML等效项如下所示:

<jsp:directive.page attribute="value" />

让我们以在页面顶部包含属性作为导入的示例为例。

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

页面指​​令标记中使用的属性如下:

属性
自动冲洗 它有两个值– true和false,默认值为true。 它指定在缓冲区已满时是否自动刷新输出。
缓冲 它以缓冲区大小(以千字节为单位)指定缓冲模型。
内容类型 它指定字符编码方案,默认为text / html。
延伸 它采用由Servlet等效类扩展的合格类名。
errorPage 它指定另一个页面的URL路径,将请求发送到该页面以处理当前JSP页面引发的运行时异常。
进口 该值是用逗号分隔的Java类列表,
信息 它指定可由getServletInfo()方法访问的字符串。
isErrorPage 它指定当前页面是否是具有两个值true和false的错误页面。 默认值为false。
pageEncoding 它指定编码类型。

4.2.2包含指令

在JSP生命周期的转换阶段使用此标记来包括文件。 它合并了另外两个文件的内容。 包含指令可以包含在页面中的任何位置。 语法如下:

<%@ include file="path/url" >

让我们以文件newFile.jsp为例,该文件可以放在需要的地方。

<%@ include file="newFile.jsp" %>

4.2.3标签库

它用于在JSP页面中定义定制标记库。 这样做是为了使相关标签可以在同一页面中使用。 语法如下:

<%@ taglib uri="URI" prefix="TagPrefix" %>

5.脚本标签

JSP脚本标记允许将脚本代码添加到生成的JSP页面的Java代码中。 该页面由JSP转换器生成。

种类

三种类型的Scriptlet标签或Scriptlet元素如下所示:

5.1.1。 脚本标签

Scriptlet标记通过编写脚本/ Java代码来实现_jspService方法功能。 它用于在JSP页面中编写Java代码。 语法如下:

<% Java code %>

等效的XML:

script code

示例如下:

<% out.println(value); %>

5.1.2。 声明性标签

声明标签被用来声明类变量和实现类方法jspIntjspDestroy。 语法如下:

<%!Declaration
%>

等效的XML:

<jsp:declaration>script code
</jsp:declaration>

示例如下:

<%!int value = 25;
%>

5.1.3。 表达标签

Expression Tag用于编写Java表达式。 切勿在表达式标签内使用分号(;)结束表达式。 语法如下:

<%= Java Expression %>

等效的XML:

<jsp:expression>script code
</jsp:expression>

示例如下:

<%= --value %>
<%= (3*9) %>

此示例显示了三种脚本标记类型。 请遵循“演示”部分中给出的步骤,以便在EclipseIDE中创建一个项目。 使用的技术是相同的。

让我们从在Eclipse IDE中创建Dynamic Web Project ExampleApplication开始:

图14:创建示例应用程序:

图15:创建exampleCalculation.jsp:

清单2:example.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Scriptlet Tag Example</title>
</head>
<h1>Example to print k iterations</h1><%!int k;%><body><%for(k=1;k<=10;++k) {out.println(k);}
%>
<br>
<%out.println("The value of --k is:");%><%= --k %><br>Updated on: <%= (new java.util.Date()).toLocaleString() %>
</body>
</html>

图16:输出打印k次迭代和网站更新日期:

6.表达语言

一种使JSP开发人员能够访问存储在JavaBeans组件中的应用程序数据的语言。 它是在JSP2.0中引入的

EL表达式包含在“ $”和“}”字符之间。

经营者

6.1.1。 算术运算符

这些算术运算符可用于EL表达式:_,-,/,*,%

6.1.2。 关系运算符

EL表达式中使用的关系运算符可用以下给定符号和短文本形式表示:

经营者 短文字形式 内容描述
> gt 比...更棒 $ {150> 5}
< lt 少于 $ {15 <65}
> = ge 大于等于 $ {20> = 20}
<= 小于等于 $ {15 <= 15}
== 当量 等于 $ {5 == 5}
!= NE 不等于 $ {15!= 65}

6.1.3。 逻辑运算符

逻辑运算符是&&(AND运算符),|| (或运算符)和! (非运营商)

隐式对象

隐式对象可以直接在EL表达式中使用。 用户可以使用这些对象从不同的作用域和参数值获取属性。 下面给出一些隐式对象的类型:

宾语 描述
pageContext 它操纵页面属性。
pageScope 它将页面范围的属性名称映射到它们的值。
requestScope 它将请求范围的属性名称映射到它们的值。
sessionScope 它将会话范围的属性名称映射到它们的值。
应用范围 它将应用程序范围的属性名称映射到它们的值。
参数 它将参数名称映射到单个String参数值。
参数值 它将参数名称映射到String []。
标头 它将标头名称映射到单个String标头值。
headerValues 它将标头名称映射到String []。

6.2.1。 例

这是显示隐式对象参数的示例。 请按照“演示”部分中给出的步骤在EclipseIDE中创建项目。 使用的技术是相同的。

让我们从在Eclipse IDE中创建动态Web项目UserApplication开始:

图17:创建UserApplication

图18:创建新的jsp文件home.jsp

清单3:home.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Welcome</title>
</head>
<body>
<h1>Fill the form given below:</h1>
<form method="post" action="success.jsp">
User : <input type="text" name="userName"><br>
Email: <input type="email" name="emailID">
<input type="submit" value="submit">
</form></body>
</html>

图19:创建新的jsp文件success.jsp

清单4:success.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Email Successfully sent</title>
</head>
<body>
<h1>Success</h1>
<br>
<p>Hi ${param.userName}, thanks for giving the details.</p>
<p>Your unique password has been sent to you on <b>${param.emailID}</b></p>
</body>
</html>

现在,我们将在EclipseIDE中运行UserApplication 。 本地主机地址为:http:// localhost:8080 / UserApplication / home.jsp

图20:运行应用程序后的home.jsp

在这里,您可以添加自己的电子邮件。 我已经考虑过电子邮件,demo @ email.com

图21:添加用户名和电子邮件:

图22:单击“提交”按钮后,输出显示在此处:

7.异常处理

介绍

异常是程序的正常执行流程中的异常/不可预见的情况。 由于输入无效,访问磁盘上不可用的文件等原因,可能会发生这些异常。

在运行时处理这些异常称为异常处理。 用户在JSP代码中可能会遇到以下类型的错误:

7.1.1。 失误

这些是用户无法控制的问题。 例如,堆栈溢出将导致错误。

7.1.2。 检查异常

这些是编译时不能忽略的异常,被视为用户错误。 例如,IOException

7.1.3。 运行时异常/未经检查的异常

在运行时可以忽略这些异常。 例如,NullPointerException

方法

这是Throwable类中可用的重要方法的列表。 您可以从oracle官方文档中参考完整列表。

方法 描述
公共Throwable getCause() 返回此throwable的原因。 如果原因未知,则返回null。
公共字符串getMessage() 返回此throwable的消息字符串。
公共字符串toString() 返回对此throwable的描述。
公共无效printStackTrace() 它打印堆栈跟踪。
公共Throwable fillInStackTrace() 它填充执行堆栈跟踪。

ErrorPage和isErrorPage

页面指​​令的ErrorPage属性用于设置错误页面。 为此,请使用以下给定的指令。 任何jsp页面都可以设置为错误页面,这里是“ DisplayError.jsp ”:

<%@ page errorPage="DisplayError.jsp" %>

isErrorPage属性用于通过包含以下指令来生成异常实例变量。 您还必须编写DisplayError.jsp:

<%@ page DisplayError="true">

7.3.1。 例

这是显示上面讨论的两个指令的用法的示例。 请按照“演示”部分中给出的步骤在EclipseIDE中创建项目。 使用的技术是相同的。

让我们从在Eclipse IDE中创建动态Web项目ErrorHandlingApplication开始:

图23:创建ErrorHandlingApplication:

图24:创建jsp文件conditionChecker.jsp:

在这里,将errorPage设置为DisplayError.jsp:

清单5:conditionChecker.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page errorPage="DisplayError.jsp" %><html>
<head><title>Error Handling Example</title>
</head>
<body>
<%// Throw an exception to invoke the error pageint s = 10;if (s < 5) {out.println("Bingo!!well done!! You're right");}else {throw new RuntimeException("Error found - "); }
%>
</body>
</html>

图25:创建错误文件DisplayError.jsp:

在这里,属性isErrorPage设置为true:

清单6:DisplayError.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page isErrorPage="true" %>
<html>
<head>
<title>Error Page</title>
</head>
<body>
<h1>Sorry :Error occurred</h1>
<b>Stack trace:</b>
<pre>
<% exception.printStackTrace(response.getWriter()); %>
</pre>
</body>
</html>

在web.xml中

<Error-page>可以包含在部署描述符(即web.xml)中。 通过此功能,用户还可以为不同的异常类型甚至HTTP错误代码配置不同的错误页面。

当出现状态码为404的错误时,将调用jsp文件anyErrorPage.jsp,如下所示:

清单7:错误代码404

<error-page><error-code>404</error-code><location>/anyErrorPage.jsp</location>
</error-page>

如果应用程序引发IOException,则将调用anyErrorPage.jsp:

清单8:对于Exception-TypeIOException

<error-page><exception-type>java.io.IOException</exception-type ><location>/HandlerClass</location>
</error-page>

如果要避免添加单独的元素的开销,请使用java.lang.Throwable作为异常类型:

清单9:对于所有异常,请提及java.lang.Throwable:

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

8.国际化

Web应用程序被世界各地的人们访问; 这引起了国际化的需求。 国际化使Web应用程序可以在不同的国家和地区工作,而无需进行更改和重新编译代码。

区域设置类

国际Java应用程序使用java.util.Locale类。 语言环境定义语言和地理区域。

8.1.1。 语言环境类的构造函数

它具有三个构造函数,可通过这些构造函数构造一个语言环境对象:

建设者 描述
语言环境(字符串lang) 它使用语言代码构造一个Locale对象
语言环境(字符串lang,字符串国家/地区) 它使用语言代码和国家/地区代码构造一个Locale对象。
语言环境(字符串lang,字符串国家/地区,字符串变体) 它使用语言代码,国家/地区代码和变体构造一个Locale对象。

这是国际化的一个例子。 请按照“演示”部分中给出的步骤在EclipseIDE中创建项目。 使用的技术是相同的。

让我们开始在Eclipse IDE中创建Dynamic Web Project LocaleApplication。

图26:动态Web项目LocaleApplication

图27:创建新的jsp文件LocaleFile.jsp

清单10:LocaleFile.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page import="java.io.*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%// get the user's LocaleLocale userLocale = request.getLocale();String userCountry = userLocale.getCountry();
%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Finding the Locale of user</title>
</head>
<body>
<% out.println("Your Country  : " + userCountry);
%></body>
</html>

图28:输出如http:// localhost:8080 / LocaleApplication / LocaleFile.jsp所示 :

9.会议

会话是客户端和服务器之间的HTTP请求的集合。 这3种方式用于维护服务器和客户端之间的会话,即cookie,URL重写和隐藏的表单字段。 JSP还利用servlet提供的HttpSession接口。 下面列出了一些方法及其说明:

方法

会话对象中的一些重要方法:

方法 描述
公共对象getAttribute(字符串名称)

返回在此会话中绑定了指定名称的对象,如果该名称下未绑定任何对象,则返回null。

公共字符串getId() 返回一个字符串,其中包含分配给该会话的唯一标识符。
公共长getLastAccessedTime() 返回客户最后一次发送与此会话相关联的请求的时间,以格林尼治标准时间1970年1月1日午夜以来的毫秒数为单位。
公共无效invalidate() 使该会话无效,并取消绑定到该会话的任何对象。
公共无效removeAttribute(字符串名称) 从此会话中删除与指定名称绑定的对象。
公共无效setAttribute(字符串名称,对象值) 使用指定的名称将对象绑定到该会话。
公共无效setMaxInactiveInterval(int间隔) 指定客户端请求之间的时间间隔(以秒为单位),该时间间隔表示servlet容器使该会话无效。

这是jsp中会话处理的示例。 请按照“演示”部分中给出的步骤在EclipseIDE中创建项目。 使用的技术是相同的。

使用jsp文件SessionHandling.jsp创建项目“ SessionApplication”

清单11:SessionHandling.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@ page import="java.io.*,java.util.*" %>
<%// creation time of sessionDate create = new Date(session.getCreationTime());Integer visitCount = new Integer(0);String key = new String("visitCount");// for new visitorif (session.isNew()){session.setAttribute(key, visitCount);} visitCount = (Integer)session.getAttribute(key);visitCount = visitCount + 1;session.setAttribute(key,  visitCount);
%>
<html>
<head>
<title>Session Tracking</title>
</head>
<body>
<h1>Session Tracking</h1>
<table border="1">
<tr><th>Session Information</th><th>Value</th>
</tr>
<tr><td>id</td><td><% out.print(session.getId()); %></td>
</tr>
<tr><td>Creation Time</td><td><% out.print(create); %></td>
</tr> <tr><td>Number of visits</td><td><% out.print(visitCount); %></td>
</tr>
</table>
</body>
</html>

图29:显示会话信息的输出– visit1:

图30:显示会话信息的输出– visit2:

图31:显示会话信息的输出– visit3:

10. JavaBean

JavaBeans是用Java编写的Java类,用于开发动态内容。 它将业务逻辑与表示逻辑分开。

表示代码和业务逻辑可以分开管理。 JavaBeans还确保它们之间的通信。

JavaBean属性

JavaBean属性是一个命名属性,可以是任何数据类型。 可以通过以下给定方法访问这些属性:

  • setPropertyName():仅写属性将仅具有setPropertyName()方法。
  • getPropertyName():只读属性将具有getPropertyName()方法。

useBean标签

<jsp:useBean>语法为:

<jsp:useBean attributes><!--  content -->
</jsp:useBean>

这些属性如下:

标签的属性

10.3.1。 ID

这表示分配给的id属性的变量名,用于查找现有的bean实例。

10.3.2。 范围

此属性表示Bean实例必须位于的范围。 范围在下面列出,此处默认为页面范围:

  • 页面范围
  • 请求范围
  • 会话范围
  • 适用范围

10.3.3。 类

它是用于创建bean实例的类名,但该类不应是抽象类。

10.3.4。 bean名称

它采用合格的类名称或表达式。

10.3.5。 类型

它采用合格的类名称或接口。

这是jsp中bean处理的示例,其中包括用于bean创建和访问的代码段。

10.4.1。 豆类创作

清单12:EmployeeClass.java

在这里,EmployeeClass显示了Bean的创建,该Bean具有一些用于雇员姓名和工作点的属性。

import java.io.Serializable;public class EmployeeClass implements Serializable
{private int points = 0;private String name = null;public EmployeeClass() {}public String getName(){return name;}public int getPoints(){return points;}public void setName(String firstName){this.name = name;}public void setPoints(Integer points){this.points = points;}
}

10.4.2。 访问豆

action用于访问get方法,而action用于访问set方法。 这些可以与动作配合使用。

清单13:BeansApplication.jsp

一个示例,说明如何访问JavaBeans属性。

<html>
<head>
<title>Employee Work Report</title>
</head>
<body><!-- setProperty -->
<!-- name attribute under setProperty references the id of beans in useBean action -->
<jsp:useBean id="emp" class="com.new.EmployeeClass"> <jsp:setProperty name="emp" property="name" value="Mahendra"/><jsp:setProperty name="emp" property="points" value="50"/>
</jsp:useBean><!-- getProperty -->
<!-- name attribute under getProperty references the id of beans in useBean action -->
<p>Name of the Employee:
<jsp:getProperty name="emp" property="name"/>
</p>
<p>Work Performance Points:
<jsp:getProperty name="emp" property="points"/>
</p></body>
</html>

清单13:显示bean实现的输出

Name of the Employee: Mahendra
Work Performance Points: 50

11.请求和响应对象

请求

Web浏览器请求Web页将信息发送到Web服务器。 该头信息包括以下内容:

接受 接受字符集
接受编码 接受语言
授权书 连接
内容长度 曲奇饼
主办 用户代理

HttpServletRequest

它是javax.servlet.http.HttpServletRequest对象的实例。 这些方法可用于HttpServletRequest对象,并用于在JSP程序中获取HTTP标头信息。 其中一些在下面给出说明:

方法 描述
Cookie [] getCookies() 返回一个数组,其中包含客户端与此请求一起发送的所有Cookie对象。
枚举getHeaderNames() 返回此请求包含的所有标头名称的枚举。
枚举getParameterNames() 返回包含此请求中包含的参数名称的String对象的Enumeration。
对象getAttribute(字符串名称) 将命名属性的值作为Object返回;如果不存在给定名称的属性,则返回null。
字符串getCharacterEncoding() 返回此请求正文中使用的字符编码的名称。
字符串getMethod() 返回发出此请求的HTTP方法的名称,例如GET,POST或PUT。
字符串getPathInfo() 返回与客户端发出此请求时发送的URL关联的任何其他路径信息。
字符串getQueryString() 返回路径后面的请求URL中包含的查询字符串。
字符串getRemoteAddr() 返回发送请求的客户端的Internet协议(IP)地址。
字符串getRequestedSessionId() 返回客户端指定的会话ID。

HttpServletResponse

它是javax.servlet.http.HttpServletResponse对象的实例。 这些方法可用于HttpServletResponse对象,并用于在Servlet程序中设置HTTP响应标头。

方法 描述
布尔containsHeader(字符串名称) 通过在其中包含会话ID对指定的URL进行编码,或者,如果不需要编码,则返回不变的URL。
布尔containsHeader(字符串名称) 返回一个布尔值,指示是否已设置命名响应头。
无效addCookie(Cookie cookie) 将指定的cookie添加到响应中。
void addHeader(字符串名称,字符串值) 添加具有给定名称和值的响应头。
void setContentLength(int len) 设置响应中内容主体的长度在HTTP servlet中,此方法设置HTTP Content-Length标头。
void setContentType(String type) 如果尚未提交响应,则设置发送给客户端的响应的内容类型。
void setHeader(字符串名称,字符串值) 用给定的名称和值设置响应头。
setLocale(Locale loc)无效 设置响应的语言环境(如果尚未提交响应)。
setIntHeader(字符串名称,整数值) 用给定的名称和整数值设置响应头。

12.参考

网站

  • Sun官方网站
  • 免费Java下载
  • 免费Eclipse IDE下载

  • 首要的Servlet和JSP:通过Sun认证的Web组件开发人员考试,作者Bryan Basham,Kathy Sierra和Bert Bates
  • Jdbc,Servlet和Jsp黑皮书,新版平装本-2008,Santosh Kumar

13.总结

Java Server Pages(JSP)用于创建动态网页。 通过本指南,您可以轻松学习与JSP相关的概念。 项目代码是在EclipseIDE下开发的,因此您还将对它的一些惊人的用户友好功能有所了解。

14.下载

这是有关JavaServer Pages(JSP)的教程。

下载
您可以在这里下载本教程的完整源代码: jsp_tutorial

翻译自: https://www.javacodegeeks.com/2015/06/jsp-tutorial.html

JSP教程–最终指南相关推荐

  1. java jsp学习指南_JSP教程–最终指南

    java jsp学习指南 编者注: JavaServer Pages(JSP)技术使您可以轻松创建同时包含静态和动态组件的Web内容. JSP技术提供了Java Servlet技术的所有动态功能,但提 ...

  2. 用于单元测试的JUnit教程–最终指南(PDF下载)

    编者注: 我们在Java Code Geeks上提供了许多JUnit教程,例如JUnit入门示例 , 使用断言和注释的 JUnit 示例 , JUnit注释示例等. 但是,为了方便读者,我们希望将所有 ...

  3. Amazon Elastic Beanstalk教程–最终指南(PDF下载)

    编者注: AWS Elastic Beanstalk是Amazon Web Services提供的一项编排服务,用于部署基础架构,该基础架构协调了各种AWS服务,包括EC2,S3,简单通知服务(SNS ...

  4. Spring Batch教程–最终指南

    这是Spring批处理教程,它是Spring框架的一部分. Spring Batch提供了可重用的功能,这些功能对于处理大量记录至关重要,包括日志记录/跟踪,事务管理,作业处理统计信息,作业重新启动, ...

  5. Java Servlet和JSP教程

    http://www.bccn.net/article/web/jsp/jc/200409/72.html 简介 这是一个比较完整的Servlet.JSP教程,包含大量的实用资料和示例,仙人掌工作室倾 ...

  6. Java8新特性教程 - 终极指南

    转载来源:https://www.javacodegeeks.com/2014/05/java-8-features-tutorial.html Java 8 新特性教程 - 终极指南 编者按:在这篇 ...

  7. Java Servlet 和JSP教程(2)

    Java Servlet 和JSP教程(2) 2 安装 2.1 安装Servlet和JSP开发工具 要学习Servlet和JSP开发,首先你必须准备一个符合Java Servlet2.1/2.2和Ja ...

  8. 【Java学习路线之JavaWeb】JSP教程

    文章目录 为什么要学习JSP? 读者 阅读条件 JSP到底是什么 JSP的由来 Servlet与JSP异同点 JSP相对于Servlet的优点 1)易于维护 2)快速开发:无需重新编译和部署 3)代码 ...

  9. JSP页面最终是编译为Servlet执行的

    JSP页面最终是编译为Servlet执行的,你可以在Tomcat的%CATALINA_HOME%/work/Catalina/localhost中找到一个文件夹,该文件夹跟你的web-project的 ...

最新文章

  1. 使用 Go module 后 VScode 智能提示不生效解决方案
  2. 从语言、模型和规模三个维度,打造下一代AI
  3. MySQL必知必会教程:深入理解MySQL技术内幕
  4. C++语言map和unordered_map的下标操作
  5. Linux shell文件测试运算符
  6. Unity中使用Attribute
  7. 双卡项目如何在状态栏显示或隐藏G,3G以及卡1和卡2的信号标识
  8. open cv+C++错误及经验总结(十四)
  9. Oracle的学习一:安装与卸载、sql *plus常用命令、Oracle用户管理
  10. Flask和WebSocket
  11. 快速提取PPT文件里面的视频、音频素材
  12. 红外图像、灰度图像、深度图像对比
  13. 激活windows 2008 r2
  14. 关于Linux消息队列的简单说明、使用、编码
  15. TD041S485H完全兼容ISO3080, ISO3086 ISO3082, ISO3088
  16. 双方确认函_确认函格式范文
  17. 麻雀虽小,五脏俱全!RT-Thread BK7252 麻雀一号开发板上手体验
  18. 如何识别服务器连接的偶发故障?
  19. 压力测试 闪存_[实验]苹果今年大范围使用的TLC闪存颗粒真的是那么不堪吗?
  20. 每个互联网人才都应该知道的SQL注入

热门文章

  1. 《四世同堂》金句摘抄(四)
  2. java实现人脸识别(使用百度云V3版本)
  3. 用一年的时间,依靠SEO创造一个成功的网站
  4. 2的负x次幂图像_数学| NO.2,3 函数 T15
  5. 微信小程序父级之间的传值_微信小程序自定义组件封装及父子间组件传值的方法...
  6. python中ls是什么_使用Python代码实现Linux中的ls遍历目录命令的实例代码
  7. java异步线程内存可见性实验
  8. java转换文本文件到xlsx(自制缓冲区,无需先验文件行数)
  9. kafka异步发送数据_在Kafka上异步发送数据
  10. cuba 平台_认识CLI for CUBA平台