JavaWeb高级编程(上) (2)

GlassFish服务器是一个开源的、也是商业的完整Java EE应用服务器实现。它提供了Java EE规范的所有特性,包括Web容器,而且它还是Java EE规范的参考实现。GlassFish的开源版本由社区提供支持,而Oracle的商业GlassFish服务器版本由Oracle公司提供收费的商业支持。Oracle只为Java EE7之前的版本提供商业支持,从Java EE8开始,GlassFish不再包含商业支持选项。

GlassFish的一个优势是它的管理界面,可以通过图形Web用户界面、命令行界面和配置文件等方式对服务器进行设置。服务器管理员甚至可以使用管理界面在GlassFish集群中部署新的GlassFish实例。
GlassFish详细信息

之后我们的Web应用服务器将使用Tomcat。
Tomcat的安装,和对应IDE的配置参考教程:
Windows版
Ubuntu版

在Java EE平台中,Servlet用于接收和响应终端用户的请求。Servlet在Java EE API规范中的定义如下:

Servlet是一个运行在Web服务器中的Java小程序。Servlet将会接收和响应来自Web客户端的请求,使用HTTP进行通信。

使用IDEA创建具有Maven依赖的Webapp方法

创建Servlet

Servlet是所有Web应用程序的核心类,它是唯一的既可以直接处理和响应用户请求,也可以将处理工作委托给应用中的其它部分的类。
除非某些过滤器提前终止了客户端的请求,否则所有的请求都将被发送到某些Servlet中。
所有的Servlet都实现了javax.servlet.Servlet接口,但通常不是直接实现的。Servlet只是一个简单接口,它包含了初始化并销毁Servlet和处理请求的方法。

多数情况下,Servlet都继承自javax.servlet.GenericServlet。GenericServlet仍然是一个不依赖于具体协议的Servlet,它只包含一个抽象的service方法,但它同时也包含了几个辅助方法用于日志操作和从应用和Servlet配置中获取信息。
作为响应HTTP请求的java.servlet.http.HttpServlet,它继承了GenericServlet,并实现了只接受HTTP请求的service方法。然后它提供了响应每种HTTP方法类型的方法的空实现。
我们之后的Servlet将总是继承HTTPServlet。它的方法接收的是javax.servlet.http.HttpServletRequest和javax.servlet.http.HttpServletResponse参数。
eg:

import javax.servlet.http.HttpServlet; public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest r,HttpServletResponse ,re) throws ServletException,IOException{ response.getWriter().println("Hello, World") } }

以上,该Servlet即能够对GET请求做出响应,并在响应主体中显示出“Hello, World”。

初始化和销毁方法 @Override public void init() throws ServletException{ ... } @Override public void destroy(){ ... }

在Web容器启动Servlet时,会调用Servlet的init方法,有时也会在部署应用程序时调用该方法。
在容器关闭Servlet时,会调用destroy方法。

配置可部署的Servlet

在web-INF目录中创建web.xml文件,并对Servlet进行配置,使它可以正确地部署到服务器中。

向描述符中添加Servlet

如在web.xml中添加部署描述:

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee " version="3.1"> <display-name>Hello World Application</display-name>

示例中,<display-name></display-name>描述的为应用程序在应用服务器中显示的名字。<web-app></web-app>中version特性描述应用程序使用的Servlet API版本。
在该例中,init方法将在web应用程序启动后,第一个请求到达Servlet时调用,但是如果init需要花费过长时间来完成工作,则会导致第一个请求的时间被延长很多,因此我们可以在Servlet配置中进行调整,以让它在Web应用启动之后立即启动。

<servlet> <servlet-name>helloServlet</servlet-name> <servlet-class>com.wrox.HelloServlet</servlet-class> <load-on-start-up>1</load-on-start-up> </servlet>

如上,在<load-on-start-up>标签中设置1,使得Web容器在应用程序启动之后,立即启动Servlet。如果多个Servlet配置都包含了该标签,它们的启动顺序将按照标签内的值的大小顺序启动,1表示第一个启动,数字越大表示启动越晚。如果出现值相同的情况,则按照它们出现在配置文件中的顺序来启动。
使用配置文件来告诉Servlet来应该对哪些请求URL做出响应:

<servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>/greeting</url-pattern> </servlet-mapping>

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

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