当前位置: 移动技术网 > IT编程>开发语言>Java > Servlet开发(一)

Servlet开发(一)

2018年09月17日  | 移动技术网IT编程  | 我要评论

单亲妈妈古代奋斗史,美能达复印机维修,今生宝贝防辐射服

1. servlet简介

servlet是服务器端程序,主要用来交互式地浏览和修改数据,生成动态web内容。servlet是sun公司提供的一个接口,广义的servlet可以指任何实现了servlet这个接口的类。servlet生成动态web内容的过程包含以下这些内容:

   1. 客户端发送请求至服务器端;

   2. 服务器将请求发送至servlet;

   3. servlet生成响应内容并将其传给服务器;

   4. 服务器将响应返回给客户端;

用户若想要开发一个动态web资源,也就是开发一个java程序向浏览器输出数据,需要完成以下两个步骤:

   1. 编写一个java类实现servlet接口;

   2. 将开发好的java类部署到web服务器中;

 

2. servlet的运行过程

servlet程序是由web服务器调用,web服务器接收到客户端的servlet请求后:

   1. web服务器首先检查是否已经装载并创建了该servlet的实例对象。如果是,则直接执行第4步,否则,执行第2步;
 2. 装载并创建该servlet的一个实例对象;
 3. 调用servlet实例对象的init()方法;
 4. 创建一个用于封装http请求消息的httpservletrequest对象和一个代表http响应消息的httpservletresponse对象,然后调用servlet的service()方法并将请求和响应对象作为参数传递进去;
 5. web应用程序被停止或重新启动之前,servlet引擎将卸载servlet,并在卸载之前调用servlet的destroy()方法;

servelt调用图如下:

 

3. 在eclipse中开发servlet

在eclipse中新建一个web project,鼠标右击eclipse中左侧的空白部分,点击new-->danamic web project,输入工程名称,点击next,记得勾选generate web.xml。

eclipse会自动创建下图所示目录结构:

上图中,工程名为mywebproject,该工程部署时,在webapps目录下就会有一个mywebproject的web应用;

src:java程序的开发目录,该目录下所有编写的java程序在部署时,会自动部署到mywebproject/web-inf/classes目录下;

webcontent:对应于web应用的根目录,该目录下的所有子文件和子文件目录在部署时,会原封不动地发布到web应用目录下。

 

3.1 servlet接口实现类

servlet框架主要包含两个包,javax.servlet和javax.servlet.http。在javax.servlet中定义了所有的servlet类都必须实现和扩展的通用接口和类,在javax.servlet.http包中定义了采用http协议的httpservlet类。

servlet接口sun公司定义了两个默认的实现类:genericservlet和httpservlet,他们之间的继承关系如下图:

 

genericservlet

先来看看java ee api帮助文档中genericservlet这个类继承的类和实现的接口。

可以看出,genericservlet是servlet和servletconfig接口的实现类,其中的service()方法是一个抽象方法。也就是说,genericservlet类实现了servlet和servletconfig接口,实现了除了service()之外的其他方法。在创建servlet对象时,可以继承genericservlet类来简化程序的代码,但需要实现service()方法。如果新建的servlet程序直接继承genericservlet接口会使开发更简洁。

 

httpservlet

heepservlet指能够处理http请求的servlet,它在原有的servlet接口上添加了一些处理http协议的方法。它比servlet接口的功能更为强大。因此开发人员在编写servlet时,通常应继承这个类,而避免直接去实现servlet接口。

httpservlet在实现servlet接口时,覆写了service()方法,该方法体内的代码会自动判断用户的请求方式,如为get请求,则调用httpservlet的doget()方法;如为post请求,则调用dopost()方法。因此,开发人员在编写servlet时,通常只需要覆写doge()t或dopost()方法,而不要去覆写service()方法。

 

3.2 通过eclipse创建和编写servlet

在之前新建的web应用中,找到src开发目录,右击新建包比如:myservlet,之后右击myservlet,新建servlet,填写classname比如myservletdemo,出现如下的界面:

点击next,url mappings是在web.xml中配置servlet的名字和servlet的url访问地址,如果不修改,全部使用默认的即可。

点击next,接下来是勾选需要重写的方法:

点击finish完成创建。创建好的myservletdemo中会有如下的代码内容。

package myservlet;

import java.io.ioexception;
import javax.servlet.servletexception;
import javax.servlet.annotation.webservlet;
import javax.servlet.http.httpservlet;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;

/**
 * servlet implementation class myservletdemo
 */
@webservlet("/myservletdemo")
public class myservletdemo extends httpservlet {
	private static final long serialversionuid = 1l;
       
    /**
     * @see httpservlet#httpservlet()
     */
    public myservletdemo() {
        super();
        // todo auto-generated constructor stub
    }

	/**
	 * @see httpservlet#doget(httpservletrequest request, httpservletresponse response)
	 */
	protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
		// todo auto-generated method stub
		response.getwriter().append("served at: ").append(request.getcontextpath());
	}

	/**
	 * @see httpservlet#dopost(httpservletrequest request, httpservletresponse response)
	 */
	protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
		// todo auto-generated method stub
		doget(request, response);
	}

}

 

3.3 启动服务器并部署项目

右键单击该项目,选择run as--->run on server,选择tomcat服务器,点击finish完成。

在地址栏输入:http://www.lhsxpumps.com/_localhost:8081/mywebproject/myservletdemo 访问这个servlet。

注意:为了让servlet能响应用户请求,还必须将servlet配置在web应用中servlet3.0开始,配置servlet有两种方式:

  • servlet类中使用@webservlet annotation进行配置。
  • web.xml文件中进行配置,我们用web.xml文件来配置servlet,需要配置<servlet><servlet-mapping>

在本项目的配置中,使用的是@webservlet annotation进行配置,体现在代码中:

这样配置的效果和在web.xml中配置的效果一样,如果在web.xml中配置,需要如下做法:

 

只要在浏览器地址栏输入“http://tomcat中配置的主机名:端口号/web项目名/@webservlet annotation中的映射名称”就可以进行访问了。

更多精彩内容,欢迎搜索微信公众号“程序员考拉”!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网