Java Web编程技术第二章

1.Servlet是Java Web技术的核心基础,是CGI(公共网关接口)的一种替代,用于实现动态Web文档的Java解决方案。(Servlet和JSP运行在Web容器(Tomcat)里面,Servlet属于容器中的一个组件

2. Servlet API定于了若干接口和类:

Servlet API组成:javax.servlet包(定义了开发与协议无关的接口和类)、javax.servlet.http包(定义了开发采用HTTP协议的接口和类)、javax.servlet.annotation包、javax.servlet.descriptor包

3.javax.servlet.Servlet接口是Servlet AP中的基本接口,每个Servlet接口都必须直接或间接使用该接口,其重要方法:

public void init(ServletConfig config):完成Servlet初始化,准备提供服务。

public void service(ServletRequest req,ServletResponse res):对每个客户请求调用一次该方法,允许Servlet为请求提供响应。

public void destroy():指示Servlet清除本身、释放请求的资源,并准备结束服务

4.GenericServlet类:javax.servlet.GenericServlet抽象类实现了Servlet接口和ServletConfig接口,提供Servlet接口之中除service()外所有的方法得实现。

5.HttpServlet类:javax.servlet.http包中定义了使用HTTP协议创建的Servlet所需要的接口和类。

HttpServlet抽象类:用于创建支持HTTP协议的Servlet。

HttpServletRequest接口:基于HTTP协议的请求对象,继承了ServletRequest接口。(继承ServletRequest接口并提供了针对HTTP请求的操作方法,如定义了从请求对象中获取HTTP请求头、Cookie等信息的方法)

HttpServletResponse接口:基于HTTP协议的响应对象,继承了ServletReponse接口。(提供针对HTTP的发送响应的方法,定义了为响应设置如HTTP头、Cookie等信息的方法)

HttpSession接口:实现会话管理的接口,用来存储用户的信息。

Cookie类:创建Cookie对象的一个实现类。

6.Servlet生命周期:Servlet作为一种在容器中运行的组件,有一个从创建到销毁的过程,此过程称之为Servlet的生命周期。

生命周期包括以下几个阶段:加载和实例化Servlet类(Web容器使用Class.forName对其加载和实例化,要求Servlet类中有一个不带参数的构造方法,如果没有定义任何构造方法,Java编译器将添加默认的构造方法)、初始化Servlet(使用init(ServletConfig)进行初始化)、为客户提供服务(初始化后, 点击超链接或者直接提交表单向容器请求访问Servlet容器,当容器收到请求之后,容器根据请求中的URL找到正确的Servlet,创建两个对象,一个是HttpServletRequest请求对象,一个是HttpServletResponse响应对象,随后创建线程,随后调用service()将请求对象和响应对象作为参数传递给该方法(有多少请求将创建多少线程),接下来service()将根据HTTP请求类型(GET/POST)来决定调用Servlet的doGet()方法还是doPost()方法,使用响应对象获得输出流对象那个,调用有关方法将响应发送给客户浏览器,随后线程将被销毁,请求对象和响应对象因为离开其作用域也将被销毁 )、销毁和卸载Servlet

7.处理请求:

请求:客户向服务器发出的消息称之为请求,由请求行(方法名、请求资源的URI、HTTP版本)、请求头(浏览器信息、字符编码信息、客户能处理的页面类型等)、HTTP请求方法(客户请求服务器完成的动作(8个方法))三部分组成

GET方法:请求读取一个Web页面

POST方法:请求向服务器发送数据

GET和POST方法区别:

特征GET方法POST方法
资源类型静态或动态动态
数据类型文本文本或者二进制数据
数据量一般不超过255个字符没有限制
可见性

数据是URL的一部分,在浏览器中对于用户

可见

不是URL的一部分

在地址栏中不可见

数据缓存可以在浏览器的URL历史中缓存不能缓存

发送HTTP请求事件:在浏览器地址栏中输入URL并回车、单击HTML页面的超链接、在HTML页面填写表单并进行提交

处理HTTP请求:除却servie()为客户提供服务外,还针对每个HTTP方法定义了对应的doXxx()法。

8.ServletRequest接口中有关请求参数的方法:

public String getParameter(String name):返回由name指定的请求参数值,保证指定的参数只有一个。

public String[] getParameterValues(String name):返回指定参数name所包含的所有值,返回值是一个String数组,适用于参数有多个值的情况(如多选框)。

*如果希望Servlet既能处理POST请求又能处理GET请求,可以添加下面的doGet()并在其中调用doPost()

public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
                  throws ServeletException,IOException{
    doPost(request,respose)
}   

9.请求转发:需要将一个请求转发到另外一个页面,为了实现请求转发一般使用getRequestDispacher()得到RequestDispacher对象,方法格式为:RequestDispacher getRequestDispacher(String path)此时path用来指定要转发到的资源路径(可以是绝对路径(以“开头,相对于当前应用程序的文档根目录)也可以是相对路径)

getRequestDispacher接口定义了以下两个方法:

public void forward(ServletRequest request,ServletResponse reponse):将请求转发到另外服务器上另外一个动态或静态资源(Servlet、JSP页面或HTML页面)

public void include(ServletRequest request,ServletResponse reponse):将控制暂时转发到其他指定资源,并将其包含到当前输出中。

10.使用请求对象存储数据:请求对象是一个作用域(scope)对象,可以在其上存储属性(包括属性名和属性值,属性名是一个字符串,属性值是一个对象)实现数据共享,ServletRequest接口中有关于属性存储的方法有四个:
public void setAttribute(String name,Object obj):将指定名称name的对象obj作为属性值存储到请求对象之中。

public Object getAttribute(String name):返回请求对象中存储的指定名称的属性值,如果指定名称的属性不存在,返回Null,必要时需要作类型转换。

public Enumeration getAttributeNames():返回一个Enumeration对象,它是请求对象中包含所有属性名的枚举。

public void removeAttribute(String name):从请求对象中删除指定名称的属性。

11.表单数据的处理:

表单空间元素;form(action属性表示指定处理表单数据的服务器端程序)、text、password、button、radio(单选按钮、name相同时属于同一个组)、checkbox(复选框,name相同时属于同一组)、组合框和列表框,通过下拉列表为用户列出各个选项供用户选择、文件上传控件

表单页面创建:使用对应的控件进行页面创建即可。

表单数据处理:表单数据作为请求参数传递到服务器端,在服务器端的Servlet中使用请求对象的getParameter()方法(单个值)getParameterValue()方法(多个值)来获取表单数据。

12.发送响应:

HTTP响应结构:状态行(HTTP版本、响应状态码、描述状态码的短语)、响应头响应数据

13.输出流与内容类型

public PrintWriter getWriter():返回一个PrintWriter对象用于向客户发送文本数据

public ServletOutputStream getOutputStream() throws IOException:返回一个输出流对象可以向客户发送二进制数据

PrintWriter对象:

PrintWriter out=response.getWriter();

out.println("......");

ServletOutputStream:

ServletOutputStream sos = response.getOutputStream();

14.部署描述文件(WML文件):

第一行是声明:version属性:XML版本、encoding:所使用的字符集

其余内容均在<web-app>和</web-app>元素中,它是部署描述文件的根元素,其余所有元素均应在此元素之中

<web-app>元素5个属性

xmlnsweb.xml文件命名空间的XML模式文档的位置
xmlns:xsi命名空间的实例
xsi:schemaLocation模式的位置
version模式的版本
metadata-complete指定部署描述文件是否是完整的,若值为true则Web容器忽略Servlet注解,若为false或不存在,则容器将检查类文件中的注解

Servlet元素5个子元素

<servlet-name>定义Servlet名称(必备项,名称应该唯一),可以通过ServletConfig的getServletName()检索Servlet名
<servlet-class>指定Servlet类的完整名称,需要带包的名称,如,com.demo.HelloServlet。容器将使用该类创建Servlet实例
<init-param>定义向Servlet传递的初始化参数,在一个<servlet>元素中可以定义任意多个<init-param>元素,每个<init-param>元素有且仅有一组<param-name>和<param-value>子元素,<param-name>定义参数名,<param-value>定义参数值,Servlet可以通过ServletConfig接口的getInitParameter()检索初始化参数
<load-on-startup>指定是否在Web应用程序启动时载入该Servlet,该元素值为一个整数,若是负数将根据需要决定何时装入Servlet,如果是正数,则在Web应用程序启动时载入该Servlet,对于不同的Servlet可以根据其值大小决定装入顺序,值小的先进行装入

<Servlet-mapping>元素

  定义一个映射,指定哪个URL模式被该Servlet处理。容器使用这些映射根据实际的URL访问合适的Servlet,该元素包括<servlet-name>(使用<servlet>元素定义的Servlet名)和<url-pattern>(与该Servlet关联的模式字符串)两个子元素

15.@WebServlet和@WebInitParam注解

在servlet3.0中可以使用@WebServlet注解,而不需要在web.xml文件中定义Servlet(该注解属于javax.servlet.annotation包,因此在定义Servlet时需进行导入)

eg:@WebServlet(name="HelloServlet",urlPatterns={"/hello-action"})

name属性指定Servlet名称;urlPatterns属性指定访问该Servlet文件的URL;value等价于urlPatterns但是两个元素不能同时使用;loadOnStartup指定Servlet加载顺序,等价于web.xml文件中<load-on-startup>元素;initParams指定Servlet的一组初始化参数,等价于<init-param>;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值