JavaWeb高级编程(上) (3)

使用如上配置之后,所有访问应用程序相对URL/greeting的请求都将由helloServlet处理。
Web容器通过这种方式关联两个配置。
Servlet类的service方法会处理所有到达的请求。最终,它必须根据所使用的协议解析并处理到达请求中的数据,然后返回客户端可接受的响应。

了解doGet、doPost和其他方法

HttpServletRequest接口是对ServletRequest的扩展,它将提供关于收到请求的额外的与HTTP协议相关的信息。它指定了多个可以获得HTTP请求的详细信息的方法。它也允许设置请求特性。
HttpServletREquest最重要的功能:从客户端发送的请求中获取参数。
请求参数有两种不同的形式:查询参数(也成为URI参数)、以application/x-www-form-urlencoded或multipart/form-data编码的请求正文。所有的请求方法都支持查询参数,它们被添加在HTTP请求的第一行数据中,如:
GET /index.jsp?productId=123456789&category=Book HTTP/1.1
例子中包含两个查询参数:productId和category。
方法getParameter将返回参数的单个数值。如果参数有多个数值,getParameter将返回第一个值,而getParameterValues将返回参数的值的数组。如果参数只有一个值,则返回只有一个值的数组。方法getParameterMap将返回一个包含了所有参数名值对的java.util.Map<String, String[]>,而getParameterNames方法将返回所有可用参数的名字的枚举。
方法getInputStream将返回一个javax.servlet.ServletInputStream,而方法getReader将返回一个java.io.BufferedReader,它们都可用于读取请求内容。如果请求内容是基于字符编码的,使用BufferedReader是最简单的方式,请求数据是二进制的,必须使用ServletInputStream,这样才可以访问字节格式的请求内容。永远不应该在同一请求上同时使用这两种方法。

HttpServletResponse继承了ServletResponse接口,提供了对响应中与HTTP协议相关的属性的访问。可以使用响应对象完成设置响应头、编写响应正文、重定向请求、设置HTTP状态码以及将Cookies返回到客户端等任务。
方法getOutputStream返回一个javax.servletServletOutputStream,而方法getWriter将返回一个java.io.PrintWriter,通过对它们都可以向响应中输出数据。
我们可以在Servlet中重写doGet和doPost方法来分别处理get和post请求。
需要注意的是,我们应该在Servlet的声明上进行注解,如:

@WebServlet{ name = "helloServlet", urlPatterns = {"/greeting","/wazzup"}, loadOnStartup = 1 } public class HelloServlet extends HttpServlet { ... }

如上所示,可以代替编写对用的XML。

使用初始化参数配置应用程序
虽然在Servlet类上的注解代替了在部署描述符文件中的Servlet声明和映射,但是存在其它的一些配置必须通过部署描述符才能完成。上下文初始化参数就是其中之一。在web.xml文件中使用<context-param》标签声明上下文初始化参数。

声明初始化参数举例:

<context-param> <param-name>setting</param-name> <param-value>value</param-value> </context-param>

在Servlet代码的任何地方都能够轻松获得和使用初始化参数,使用代码举例:

ServletContext sc = this.getServletContext(); sc.getInitParameter("setting");

或者:
定义:

<servlet> <servlet-name>...</servlet-name> <servlet-class>...</servlet-class> <init-param> <param-name>setting</param-name> <param-value>hello</param-value> </init-param> </servlet>

使用:

ServletConfig sc = this.getServletConfig(); sc.getInitParameter("setting");

Web应用程序是天然的多线程应用程序。Web容器中通常会包含某种类型的线程池,它们被称为连接池或执行池。当容器收到请求时,它将在池中寻找可用的线程。如果找不到可用的线程,并且线程池已经达到了最大线程数,那么该请求将被放入一个队列等待获得可用的线程。

使用JSP显示页面内容

JSP是一个混合解决方案,它结合了Java代码和HTML标签。JSP可以包含除了Java代码之外的任何HTML标签、内建JSP标签、自定义JSP标签以及表达式语言。
JSP中的指令标签:

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

该指令标签提供了对JSP如何转换、渲染和传输的控制。
指令标签中:特性language将告诉容器JSP中使用的是哪种脚本语言。contentType告诉容器在发送响应时如何设置其中Content-Type头的值。Content-Type头同时包含内容类型和字符编码,以分号隔开。
JSP中除了各种不同的HTML和JSP标签,还有几种独特的结构用于JSP中:

使用指令

<%@ 指令 %>

指令用于指示JSP解释器执行某个操作或者对文件做出假设、导入类、在转换时包含其他JSP或者包含JSP标签库。

使用声明

<%! 声明 %>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxgps.html