JAVA Web技术及应用

版权声明:@ 木开子 https://blog.csdn.net/sanhewuyang/article/details/82183997

引用块内容

第一章 JAVA Web 入门

1.1 Web应用概述
Web应用是一种通过互联网访问的应用程序,使用网页语言编写,通过浏览器运行的动静态网站。在实际应用中大多数网站采用动静结合的原则,网站中内容需要频繁更新,可采用动态网页技术,内容不需要更新,采用静态网页进行显示。
动态网站:由大量的动态页面。后台处理程序以及用于存储内容的数据库组成,具有交互性,自动更新,多样性的特点。动态网站技术有CGI,ASP,ASP.NET,PH,Servlet和JSP等几个重要的动态网站技术。

  1. CGI:在早期互联网发展过程中,动态网站技术主要采用CGI(通用网关接口)来实现,CGI程序在服务器端运行,能够根据不同的客户端请求输出相应的HTNL页面,同时可以访问存储在数据库中的数据以及其他系统中的文件,从而实现动态生成的效果(Perl和Shell)。
  2. ASP和ASP.NET:ASP(动态服务器接口)是微软公司推出的一种动态网页语言。ASP也可以运行在服务器端,可以包含HTML标记,普通文本,脚本命令以及对一些特定微软应用程序的的调用。
  3. PHP:PHP(超文本预处理语言):是基于开源代码的脚本式语言,与ASP一样,php也是采用脚本嵌入到HTML中,但PHP中混合了C,JAVA,Perl等语言语法的优秀部分。
  4. Servlet:sun公司发布基于Servlet的Web服务器,并建立了Java Servlet APL(应用程序编程接口)的编码标准。易于书写java代码,
  5. JSP:JSP是基于Java语言的服务器端脚本语言,是实现HTML代码和Java代码混合的编码技术。JSP是Servlet APL的一个扩展,能够支持多个操作系统平台。易于实现页面设计。

web应用架构
C/S(Client/Server)客户端/服务器:采用功能分布的原则,客户端负责数据处理,数据表示以及用户接口等功能;服务器端负责数据管理等核心功能,两端共同配合来完成复杂的业务应用。提高响应速度。
B/S(Borwser/Server)浏览器/服务器:是基于特定的HTTP通信协议的C/S结构,对S/C架构的一种变化或者该进的结构,web应用架构即是指这种架构。
web应用运行过程
基于B/S结构的web应用,通常有客户端浏览器,Web服务器和数据库服务器构成:

  • web服务器负责运行使用动态网站技术编写的Web应用程序;
  • 数据库服务器负责管理应用程序使用到的数据;
  • 浏览器负责帮助用户访问运行在Web服务器上的应用程序。

Web应用程序“请求——处理——响应”的基本运行流程

  1. Web浏览器发送请求: 客户通过URL地址发送的请求转换为标准的HTTP请求,并将服务器响应返回的HTML代发转换为客户端能够看到的图形界面。在典型的web应用程序中,一般通过运行在浏览器端的HTML和脚本代码来提供用户的输入数据的入口以及对数据进行初始化验证。浏览器会将数据通过HTTP协议的GET或POST方法发送到服务器端。
  2. 服务器端处理用户的请求:Web服务器首先需要检查请求的文件地址是否正确,若错误,返回错误信息,若正确,服务器将根据请求的GET或POST方法及文件的类型进行相应的处理,将结果以HTML或XML或着二进制文件等数据形式表示。并按照HTTP协议的响应消息格式反馈给浏览器,浏览器会根据消息附带的信息查看并显示该信息。
  3. 将结果返回给浏览器:一般情况下,服务器将处理结果返回给客户端浏览器时,要指明响应的内容类型,内容长度,然后把响应内容写入到输出流中,客户端浏览器收到响应后,首先查看响应头的内容类型,确实输入流中响应的信息的MIME类型,返回的内容可以是HTML.文本,XML,图像视频流等。

Java web应用的优势
Java web应用是用Java技术来解决相关的web互联网应用领域的技术总和 ,web应用包括web服务器端应用和web客户端应用两部分,Java在客户端的应用有Java Applet,在服务器端有Serve了他,JSP和第三方框架等,都遵循统一的Java EE技术标准,
常用的web服务器有:IIS,Apache,Tomcat,JBoss,Tomcat。

Servlet基础
Servlet是基于Java语言的Web服务器段编程技术,是运行在Servlet容器中的Java类,它能够处理Web客户的http请求,并产出http响应。Servlet对请求的处理和响应过程分为:1,接受HTTP请求。2,取得请求信息,包括请求接头盒请求参数数据。3,调用其他Java类方法,完成具体的业务功能。4,实现到其他Web组件的跳转(包括重新定向和请求转发)。5,生出HTTP响应。servlet具有高效,方便,功能强大,可移植性好。

Servlet体系结构
Servlet是使用Servlet API及相关类和方法的Java程序,有两个软件包。
Javax.servlet包:包含支持所有协议的通用的Web组件和类,主要有javax.servlet.Servlet接口,javax.servlet.GenericServlet类,javax.servlet.ServletRequest接口,javax.servlet.ServletResponse接口。
javax.servlet.http包:包含支持http协议的接口和类,主要有javax.servlet.http.HttpServlet类,javax.servlet.http.HttpServletRequest接口,javax.servlet.http.HttpServletResponse接口。

Servlet接口:
javax.servlet.Servlet的定义如下:public interface Servlet,所有的Servlet都必须直接或间接实现javax.servlet.Servlet接口。Servlet接口规定了必须由Servlet类实现并且由Servlet引擎识别和管理的方法集。Servlet接口的基本目标是提供与Servlet生命周期相关的方法,如init(),service().

Servlet接口的方法

方法 方法描述
init(ServletConfig config) Servlet的初始方法。在Servlet实例化后,容器调用该方法进行Servlet的初始化;Servlet API规定对任何Servlet实例init()方法只能被调用一次,如果此方法没有正常结束,就会抛出一个ServletException异常,且不再执行,随后在次调用会导致容器重新加载并再次运行init()方法。
service(ServletRequset req,ServleResponse resp) Servlet的服务方法。当用户对Servlet发出请求时容器会调用该方法处理用户的请求;ServletRequest参数提供请求数据的方法,ServletResponse参数提供Servlet的构造响应的方法
destroy() Servlet的销毁方法。容器在终止Servlet服务前掉用此方法,容器调用此方法前必须给Service()线程足够时间来结束执行,因此接口规定当service()正在执行时,destroy()不被执行
getServletconfig() 此方法可以让Servlet在任何时候获得ServletConfig对象
getServletInfo() 此方法返回一个String对象,该对象包含Servlet的信息,例如开发者,描述信息等

GenericServlet类
javax.servlet.GenericServlet的定义:public abstrace class GenericServlet extends Object inlpements Servlet,ServletConfig,Serializable
Generic是一个抽象类,是Servlet接口的直接实现,除了service()方法外,提供有关其他的Servlet生命周期的方法,

GenericServlet类的主要方法

方法 方法描述
init(ServletConfig config) 该方法来源于Servlet接口,若重写该方法,必须调用super.init(config),这样GenericServlet类的其他方法才能正常工作
init(ServletConfig config) 该方法重载Servlet接口的上一个init()方法而无需调用super.init(config),而ServletConfig对象依然可以通过调用getServletConfig()方法获得
service(ServletRequst req,ServletRequest req,SrevletResponse resp) 这是一个抽象方法,当为执行网络请求继承GenericServlet类时必须实现
destroy() 与Servlet接口中的destroy()方法相同
getServletConfig() 返回一个Servlet的ServletConfig对象
getServletContext() 返回一个Servlet的ServletContext对象,通过ServletConfig。getServletContext()获得
getServletInfo() 该方法来源于Servlet接口,可以重写该方法以产生有意义的信息

GenericServlet类同时实现了ServletConfig接口,可以在不用获得ServletConfig对象的情况下直接调用ServletConfig的方法,例如:getInitParameter(),getInitParameterNames()和getServletContext()
HttpServlet类
若要实现一个在Web中处理HTTP请求的Servlet。则需要使用HttpServlet,Javax.servlet.http.HttpServlet的定义如下:
public abstract class Httpservlet exends GenericServlet implements Serlizable
HttpServlet类扩展了GenericServlet类并且对Servlet接口提供了与HTTP相关的实现,是在web开发中定义的Servlet最常用的类。

Httpservlet的主要方法

方法 方法描述
service(HttpservletRequest req,HTTPServletResponse resp) HTTPServlet在现实Servlet接口时,重写了Servlet()方法,该方法会自动判断用户的请求方式:若为GET()请求,则调用HTTPServlet的doGET()方法。若为POST请求,则调用doPost()方法,因此,开发人员在编写Servlet时,通常重写doGet()和doPost()方法,不用重写servlet方法,如果Servlet收到一个HTTP请求而没有重新加载相应的do方法,它就返回一个方法对资源不可用的标准HTTP错误
doGet(HttpServletRequest req,HttpServletResponse resp) 此方法被本类的service()方法调用,处理HTTP请求
doPost(HttpServletRequest req,HttpServletRespose resp) 此方法被本类的service()方法调用,处理Http请求

HttpServlet作为Http请求的分发器,还提供了Http的其他请求类型:HEAD,OPTIONS,DELETE,PUT和TRACE也提供了相应的处理方法。HttpServlet能够处理HTTP请求的Servlet,在Servlet接口上添加了对HTTP协议的处理,在编写Servlet时,通常继承这个类。

Servlet生命周期

Servlet本身不直接在Java虚拟机上运行,而是由Servlet容器负责管理其整个生命周期,Servlet生命周期是指Servlet实例从创建到响应客户端请求,直至销毁的过程,会经过创建,初始化,服务可用,服务不可用,处理请求,终止服务和销毁服务7种状态。

  1. 加载和实例化:Servlet创建,在服务器运行中,客户机首次向Servlet发送请求,重新装入Servlet时,在为Servlet配置了自动装入选项(load-on-startup)时。
  2. 初始化:Servlet容器调用Servlet的init(ServletConfig config)方法来对Servlet实例进行初始化。读取固定数据,初始化JDBC连接等资源连接,init()方法的参数ServletConfig对象由Servlet容器创建并传递给Servlet,一直存在,直到销毁。
  3. 处理请求:服务器接受到客户端请求后,会为该请求创建一个请求对象和响应对象,并调用service()方法,service()方法在调用其他方法。
  4. 销毁:当Servlet容器需要终止Servlet,它会先调用Servilet的destroy()方法.

    Serlvet的声明配置

    Servlet代码编写完成,若要进行运行访问,还需要对其进行声明配置,Servlet的声明配置信息主要包括Servlet的描述,名称,初始参数,类路径以及访问地址等,在Servlet3.x中可以使用注解方式实现,注解@WebServlet用于将一个类声明为Servlet,容器会根据具体的属性配置把相应的类部署为Servlet。
    @Webservlet(
    name = “Servlet的名字”,utlPatterns = {“/xx”},
    initParams ={ @WebInitParam(name = “username”,value = “qst”)},
    loadOnStartup = 0,asyncSupported = true,
    displayName = “XXServliet”,description = “Servlet 样例”
    )//Servlet 的最简声明配置。

    注释@WebServlet的属性及其描述

属性名 类型 描述
name String 指定Servlet的名字,可以为任何字符串,一般与Servlet的类名相同,如果没有显示指定,则该Servlet的取值即为类的权限定名
urlPatterns String[] 指定一组Servlet的URL匹配模式,可以是匹配地址映射(如/SimpleServlet),匹配目录映射(/servlet/ 通配符)和匹配扩展名映射(如 通配符.action)
value String[] 该属性等价于urlParams,不能同时使用
loadOnStrams int 指定servlet的加载顺序。当此选项没有时,表示容器在该Servlet第一次被请求时才加载;当值为0或者大于0时,表示容器在启动时就加载这个Servlet.,值越小,启动该Servlet的优先级越高
initParams WebInitParam[] 指定一组Servlet初始化参数,可选
asyncription boolean 声明Servlet是否支持异步操作模式,默认false
description String 指定该Servlet的描述信息
displayName String 指定该Servlet的显示名,通常配合工具使用

通过项目得配置文件web.xhl完成,内容遵循XML语法格式,
html
<servlet>
<description>Servletrliexi</description>
<display-name>asd</display-name>
<servlet-name>aServlet</servlet-name>
<servlet-class>com.liruilong.zuiyan.aservlet</servlet-class>
<init-paranm>
<param-name>username</param-name>
<param-value>qst<param-value>
</init-paranm>
<load-on-started>0</load-on-started>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>aServlet</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>

猜你喜欢

转载自blog.csdn.net/sanhewuyang/article/details/82183997