整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

JSP实现数据传递

SP内置对象

九种对象简介:

  1. out对象:用于向客户端、浏览器输出数据。
  2. request对象:封装了来自客户端、浏览器的各种信息。
  3. response对象:封装了服务器的响应信息。
  4. exception对象:封装了jsp程序执行过程中发生的异常和错误信息。
  5. config对象:封装了应用程序的配置信息。
  6. page对象:指向了当前jsp程序本身。
  7. session对象:用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数
  8. application对象:代表了当前应用程序的上下文。可以在不同的用户之间共享信息。
  9. pageContext对象:提供了对jsp页面所有对象以及命名空间的访问。

JSP实现数据传递-表单为例

根据表单名称获取提交的数据信息:

request.getParameter(“name”)返回的是一个String

获取表单对应多个值时的请求数据信息:

request.getParameterValues(“name”)返回的是一个String数组需要遍历

解决中文乱码问题

< form action=”Welcome.jsp” method=”get” >

表单get方式提交,中文乱码处理-治标:

request.getParameter(“name”)返回的是一个String

返回的值.getByte(“ISO-8859-1”)=byte[] 数组名 以ISO-8859-1的格式打散

String name=new String(数组名,”格式”)或者

new String(返回的值.getByte(“ISO-8859-1”),utf-8)返回是一个String类型

表单g所有方式提交,中文乱码处理-治本:

修改Tomcat配置文件

配置tomcat\conf\server.xml文件

connectionTimeout=”20000”

redirectPort=”8443” URIEncoding=”utf-8”/>

如图:

表单post方式提交,中文乱码处理:

request.setCharacterEncoding(“utf-8”)

response.setCharacterEnconding(“utf-8”)

在请求中存取属性

在请求中保存属性:

public void setAttribute(String name,Object o)

request.setAttribute(mess,”注册失败”)

在请求中获取属性:

public Object getAttribute(String name)

注意:

1.在使用属性值的时候要做非空判断,否则会出现空指针

2.它的返回值类型是Object类型,需要做数据类型的转换

转发与重定向:

转发:

RequestDispatcher对象

forward()方法

1.requestDispatcher(“url”).forward(request,response)

< jsp:forward page=”url” >

重定向:

response.sendRedirect(request.getContextPath(到上文)+”url”)

通过编码URLEncode.encode(String,格式)

或者解码URLDecode.Decode(String,格式)

作用域问题:

request作用域:在一次请求的范围内

response作用域:在二次请求的范围内

转发和重定向的区别:

  1. 行为区域的区别:转发是服务器端的行为区域,重定向是客户端行为区域
  2. URI:转发不会发生变化,重定向会改变地址栏的URL
  3. 请求问题:转发是一次请求,重定向是两次请求
  4. 跳转区域问题:转发不可以跳转到第二个项目,重定向可以地址会发生改变(跳转到第二个项目)
  5. 携带请求问题:转发可以携带request相关信息,重定向不会携带

SP 代表 Java 服务器页面。它是一种在应用服务器端使用的编程工具。JSP 基本上用于支持平台 – 独立和动态的方法来构建 Web 依赖的应用程序。JSP 页面类似于 ASP 页面,因为它们是在服务器上编译的,而不是在用户的 Web 浏览器上进行编译。

JSP 是由 Sun Microsystems 公司于 1999 年开发的。JSP 的开发使用语言,其中内置的所有功能都是用 Java 编程语言创建的。

JSP的特点:

  • JSP 是 Servlet 技术的扩展版本。
  • JSP 技术类似于 Servlet 应用程序接口(API)。
  • 它提供了一些附加功能,例如表达式语言和自定义标签等。
  • JSP 文件更容易部署,因为 JSP 引擎会自动执行 Java 代码的重新编译。

JSP的优势:

JSP 有很多优点。

  • 对 Servlet 的扩展: Servlet 的 JSP 扩展。我们可以在 JSP 中使用 Servlet 的所有功能。我们可以轻松使用 JSP 开发的隐式对象、预定义标签、自定义标签和表达式语言。
  • 易于维护: 它易于管理,因为我们可以轻松地分离我们的业务逻辑,在 Servlet 技术中,我们可以将我们的业务逻辑与 Presentation 逻辑混合。
  • 快速发展: 无需重新编译和重新部署。如果 JSP 页面被修改。我们不需要重新编译和重新部署项目。如果我们想改变应用程序的外观和感觉,则需要重新编译和更新 Servlet 代码。
  • 比 Servlet 更少的代码: 在 JSP 中,我们可以使用很多标签,例如 action 标签、jstt、Custom 标签等,以减少代码。我们可以使用 EL 和隐式对象。
  • JSP 页面代码在客户端上不可见,只有生成的 HTML 可见。

JSP的缺点:

  • 由于 JSP 页面在编译过程之前首先被转换为 servlet,因此很难调试或跟踪错误。
  • 由于 JSP 页面被转换为 Servlets 并被编译,因此很难跟踪 JSP 页面中发生的错误。
  • 数据库连接并不容易。
  • JSP 页面需要更多的磁盘空间来保存 JSP 页面。
  • 第一次访问 JSP 页面时需要更多时间,因为它们要在服务器上编译。

JSP的用途:

  • JSP 有很多优点。首先,动态部分是用 Java 编写的,而不是 Visual Basic 或其他 MS 特定的语言,因此它更强大,更易于使用。
  • 它是独立于非 Microsoft Web 服务器和其他操作系统的平台
  • JSP 帮助开发人员使用特殊的 JSP 标签在 HTML 页面中插入 Java 代码
  • JSP 也可用于访问 JavaBeans 对象。JSP 允许使用请求和响应对象跨页面共享信息。
  • 它可以用于将视图层与 Web 应用程序中的业务逻辑分离


作者:海拥
链接:https://juejin.cn/post/7026954540683362340

浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的。您可以查看 HTTP 协议 了解更多相关信息。

以下是来自于浏览器端的重要头信息,您可以在 Web 编程中频繁使用:

头信息描述
Accept这个头信息指定浏览器或其他客户端可以处理的 MIME 类型。值 image/pngimage/jpeg 是最常见的两种可能值。
Accept-Charset这个头信息指定浏览器可以用来显示信息的字符集。例如 ISO-8859-1。
Accept-Encoding这个头信息指定浏览器知道如何处理的编码类型。值 gzipcompress 是最常见的两种可能值。
Accept-Language这个头信息指定客户端的首选语言,在这种情况下,Servlet 会产生多种语言的结果。例如,en、en-us、ru 等。
Authorization这个头信息用于客户端在访问受密码保护的网页时识别自己的身份。
Connection这个头信息指示客户端是否可以处理持久 HTTP 连接。持久连接允许客户端或其他浏览器通过单个请求来检索多个文件。值 Keep-Alive 意味着使用了持续连接。
Content-Length这个头信息只适用于 POST 请求,并给出 POST 数据的大小(以字节为单位)。
Cookie这个头信息把之前发送到浏览器的 cookies 返回到服务器。
Host这个头信息指定原始的 URL 中的主机和端口。
If-Modified-Since这个头信息表示只有当页面在指定的日期后已更改时,客户端想要的页面。如果没有新的结果可以使用,服务器会发送一个 304 代码,表示 Not Modified 头信息。
If-Unmodified-Since这个头信息是 If-Modified-Since 的对立面,它指定只有当文档早于指定日期时,操作才会成功。
Referer这个头信息指示所指向的 Web 页的 URL。例如,如果您在网页 1,点击一个链接到网页 2,当浏览器请求网页 2 时,网页 1 的 URL 就会包含在 Referer 头信息中。
User-Agent这个头信息识别发出请求的浏览器或其他客户端,并可以向不同类型的浏览器返回不同的内容。

读取 HTTP 头的方法

下面的方法可用在 Servlet 程序中读取 HTTP 头。这些方法通过 HttpServletRequest 对象可用。

序号方法 & 描述
1Cookie[] getCookies()

返回一个数组,包含客户端发送该请求的所有的 Cookie 对象。

2Enumeration getAttributeNames()

返回一个枚举,包含提供给该请求可用的属性名称。

3Enumeration getHeaderNames()

返回一个枚举,包含在该请求中包含的所有的头名。

4Enumeration getParameterNames()

返回一个 String 对象的枚举,包含在该请求中包含的参数的名称。

5HttpSession getSession()

返回与该请求关联的当前 session 会话,或者如果请求没有 session 会话,则创建一个。

6HttpSession getSession(boolean create)

返回与该请求关联的当前 HttpSession,或者如果没有当前会话,且创建是真的,则返回一个新的 session 会话。

7Locale getLocale()

基于 Accept-Language 头,返回客户端接受内容的首选的区域设置。

8Object getAttribute(String name)

以对象形式返回已命名属性的值,如果没有给定名称的属性存在,则返回 null。

9ServletInputStream getInputStream()

使用 ServletInputStream,以二进制数据形式检索请求的主体。

10String getAuthType()

返回用于保护 Servlet 的身份验证方案的名称,例如,"BASIC" 或 "SSL",如果JSP没有受到保护则返回 null。

11String getCharacterEncoding()

返回请求主体中使用的字符编码的名称。

12String getContentType()

返回请求主体的 MIME 类型,如果不知道类型则返回 null。

13String getContextPath()

返回指示请求上下文的请求 URI 部分。

14String getHeader(String name)

以字符串形式返回指定的请求头的值。

15String getMethod()

返回请求的 HTTP 方法的名称,例如,GET、POST 或 PUT。

16String getParameter(String name)

以字符串形式返回请求参数的值,或者如果参数不存在则返回 null。

17String getPathInfo()

当请求发出时,返回与客户端发送的 URL 相关的任何额外的路径信息。

18String getProtocol()

返回请求协议的名称和版本。

19String getQueryString()

返回包含在路径后的请求 URL 中的查询字符串。

20String getRemoteAddr()

返回发送请求的客户端的互联网协议(IP)地址。

21String getRemoteHost()

返回发送请求的客户端的完全限定名称。

22String getRemoteUser()

如果用户已通过身份验证,则返回发出请求的登录用户,或者如果用户未通过身份验证,则返回 null。

23String getRequestURI()

从协议名称直到 HTTP 请求的第一行的查询字符串中,返回该请求的 URL 的一部分。

24String getRequestedSessionId()

返回由客户端指定的 session 会话 ID。

25String getServletPath()

返回调用 JSP 的请求的 URL 的一部分。

26String[] getParameterValues(String name)

返回一个字符串对象的数组,包含所有给定的请求参数的值,如果参数不存在则返回 null。

27boolean isSecure()

返回一个布尔值,指示请求是否使用安全通道,如 HTTPS。

28int getContentLength()

以字节为单位返回请求主体的长度,并提供输入流,或者如果长度未知则返回 -1。

29int getIntHeader(String name)

返回指定的请求头的值为一个 int 值。

30int getServerPort()

返回接收到这个请求的端口号。

31int getParameterMap()

将参数封装成 Map 类型。

HTTP Header 请求实例

下面的实例使用 HttpServletRequest 的 getHeaderNames() 方法读取 HTTP 头信息。该方法返回一个枚举,包含与当前的 HTTP 请求相关的头信息。

一旦我们有一个枚举,我们可以以标准方式循环枚举,使用 hasMoreElements() 方法来确定何时停止,使用 nextElement() 方法来获取每个参数的名称。

//导入必需的 java 库import java.io.IOException;import java.io.PrintWriter;import java.util.Enumeration;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/DisplayHeader")//扩展 HttpServlet 类public class DisplayHeader extends HttpServlet { // 处理 GET 方法请求的方法 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "HTTP Header 请求实例 - 菜鸟教程实例"; String docType = "<!DOCTYPE html> \n"; out.println(docType + "<html>\n" + "<head><meta charset=\"utf-8\"><title>" + title + "</title></head>\n"+ "<body bgcolor=\"#f0f0f0\">\n" + "<h1 align=\"center\">" + title + "</h1>\n" + "<table width=\"100%\" border=\"1\" align=\"center\">\n" + "<tr bgcolor=\"#949494\">\n" + "<th>Header 名称</th><th>Header 值</th>\n"+ "</tr>\n"); Enumeration headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()) { String paramName = (String)headerNames.nextElement(); out.print("<tr><td>" + paramName + "</td>\n"); String paramValue = request.getHeader(paramName); out.println("<td> " + paramValue + "</td></tr>\n"); } out.println("</table>\n</body></html>"); } // 处理 POST 方法请求的方法 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}

以上测试实例是位于 TomcatTest 项目下,对应的 web.xml 配置为: