您的位置:首页 > 编程语言 > Java开发

Java Servlet

2015-09-25 11:54 435 查看
一、什么是Servlet
  Servlet是在服务器上运行的小程序,一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问这个驻存在服务器内存中的Servlet程序。
  这里提出一个问题,Servlet和JSP?在学习J2EE的时候,初次接触了JSP(Java
ServerPages),这个Java服务器页面,是一个简化的Servlet设计,二者都是在服务端执行,然后返回客户端HTML文本。但二者的区别呢?发展的先后顺序呢?为什么?

二、生命周期
  1、客户端请求该 Servlet;
  2、加载 Servlet 类到内存;
  3、实例化并调用init()方法初始化该Servlet;
  4、执行service()方法,获得请求的信息。(根据请求方法不同调用doGet()
或者doPost(),此外还有doGet()、doPut()、doTrace()、doDelete()、doOptions());
  5、destroy()销毁。




  Servlet只初始化一次,它是单实例,多线程使用,所以它不是线程安全的。

三、实现过程
  Servlet的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。这个过程为:
   1) 客户端发送请求至服务器端;
   2) 服务器将请求信息发送至 Servlet;
   3) Servlet生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
   4) 服务器将响应返回给客户端。



四、Servlet相关包的介绍
  --javax.servlet.*:存放与HTTP 协议无关的一般性Servlet 类;
  --javax.servlet.http.*:除了继承javax.servlet.* 之外,并且还增加与HTTP协议有关的功能。
    所有的Servlet都必须实现javax.servlet.Servlet 接口(Interface)。
    若Servlet程序和HTTP协议无关,那么必须继承javax.servlet.GenericServlet类;
    若Servlet程序和HTTP协议有关,那么必须继承javax.servlet.http.HttpServlet 类。

  --HttpServlet:提供了一个抽象类用来创建Http Servlet。
    public voiddoGet()方法:用来处理客户端发出的 GET 请求
    public voiddoPost()方法:用来处理 POST请求

  --javax.servlet包的接口:
    ServletConfig接口:在初始化的过程中由Servlet容器使用
    ServletContext接口:定义Servlet用于获取来自其容器的信息的方法
    ServletRequest接口:向服务器请求信息
    ServletResponse接口:响应客户端请求

  --javax.servlet包的类:
    ServletInputStream类:用于从客户端读取二进制数据
    ServletOutputStream类:用于将二进制数据发送到客户端

  --javax.servlet.http包的接口:
    HttpServletRequest接口:提供Http请求信息
    HttpServletResponse接口:提供Http响应

五、第一个Servlet小例子
  还是习惯在IDE环境下开发,使用MyEclipse工具,建立web project。



  这个小例子包括Get方式请求和Post方式请求,如果你不能区分二者,那就以浏览地址的后缀是否带参数来区分吧。我的jsp页面:
<body>
    <h1>第一个Servlet小例子</h1>
    <hr>
    <a href="servlet/HelloServlet">Get方式请求</a>
    <br>
    <form action="servlet/HelloServlet" method="post">
    	<input type="submit" value="Post方式请求">
    </form>    
  </body>
  

  HelloServlet类

//继承于HttpServlet
public class HelloServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {		
		System.out.println("处理Get()请求...");
		PrintWriter out = resp.getWriter();
		//指定输出文件类型
		resp.setContentType("text/html;charset=utf-8");
		out.println("<strong>Hello Servlet!</strong><br>");		
 	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {		
		System.out.println("处理Post()请求...");
		PrintWriter out = resp.getWriter();
		//指定输出文件类型
		resp.setContentType("text/html;charset=utf-8");
		out.println("<strong>Hello Servlet!</strong><br>");
	}	
}
  

  最重要的就是web配置文件的配置,我一直认为,它就是一个承上启下的连接点,把浏览器的地址URL和Servlet类关联起来。

<servlet>
  	<servlet-name>HelloServlet</servlet-name>
  	<servlet-class>servlet.HelloServlet</servlet-class>
  </servlet>  
  <servlet-mapping>
  	<servlet-name>HelloServlet</servlet-name>
  	<url-pattern>/servlet/HelloServlet</url-pattern>
  </servlet-mapping>


  还有必要解释一下配置文件吗?有点类似键值对key、value。根据截取浏览器中的URL,匹配<servlet-mapping>映射中的url,然后找到其对应的servlet-name。2个servlet-name其实是一个,根据name就可以找到要执行的Servlet类。
  希望能给Java新手解疑答惑,继续努力!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: