当用户向客户端发送一个请求,如:

[plain] view plaincopy
http://localhost:8088/ServApp/myreq.cg?param1=param  
 
当Socket请求到达服务器(假设是Tomcat服务器),经过Tomcat服务器的一系列封装处理后,请求被封装成HttpServletRequest对象,交由到对应的Servlet。
简单时序图如下:
 
 
这里,我们只关注第10步。
在第9步中,request对象传递给Container组件执行。
当Servlet对象获得请求(httpservletrequest),会调用相关函数(Service)进行处理。
下面编写一个简单示例,从说明当前步骤。
1,编写请求处理类(EntryServ)
[java]  
package com.serv;  
  
import java.io.IOException;  
import java.io.PrintWriter;  
  
import javax.servlet.RequestDispatcher;  
import javax.servlet.ServletContext;  
import javax.servlet.ServletException;  
import javax.servlet.http.Cookie;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
public class EntryServ extends HttpServlet {  
  
    /** 
     *  
     */  
    private static final long serialVersionUID = 1L;  
  
    @Override  
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
            throws ServletException, IOException {  
        // TODO Auto-generated method stub  
        ServletContext serv = getServletContext();  
   
        //获得request 相关信息  
        String Contextpath=req.getContextPath();  
        String CharacterEncoding = req.getCharacterEncoding();  
        String ContentType = req.getContentType();  
        String LocalAddr = req.getLocalAddr();  
        String LocalName = req.getLocalName();  
        String Method = req.getMethod();  
        String Parameter = req.getParameter("param1");  
        String Protocol = req.getProtocol();  
        String ServerName = req.getServerName();  
        Cookie[] Cookies = req.getCookies();  
        String ServletPath = req.getServletPath();  
        String RemoteAddr = req.getRemoteAddr();  
        String RemoteHost = req.getRemoteHost();  
        String RequestURI = req.getRequestURI();  
        String RequestedSessionId = req.getRequestedSessionId();  
          
          
        req.setCharacterEncoding("gbk");  
        req.setAttribute("oneattr", "setted");  
          
        //response响应请求,输出请求的一些内容  
        resp.setContentType( "text/html;charset=gbk" ) ;  //设置响应页面字符编码  
        PrintWriter out = resp.getWriter() ;    
        out.println( "<font color=red ><h1>这是一个Servlet!!!!!</h1></font>" ) ;    
        out.println("<div>"+"现在用response输出请求相关信息如下:");  
        out.println("<li>"+"发送请求服务器ip--RemoteAddr="+RemoteAddr+"</li>");  
        out.println("<li>"+"发送请求服务器主机--RemoteHost="+RemoteHost+"</li>");  
        out.println("<li>"+"请求的URI--RequestURI="+RequestURI+"</li>");  
        out.println("<li>"+"发送请求的方法--Method="+Method+"</li>");  
        out.println("<li>"+"发送请求的协议--Protocol="+Protocol+"</li>");  
        out.println("<li>"+"请求内容的编码--CharacterEncoding="+CharacterEncoding+"</li>");  
        out.println("<li>"+"请求的内容类型--ContentType="+ContentType+"</li>");  
        out.println("<p>");  
        out.println("<li>"+"当前服务器ip--LocalAddr="+LocalAddr+"</li>");  
        out.println("<li>"+"服务器主机名--LocalName="+LocalName+"</li>");  
        out.println("<li>"+"context容器路径---contextpath="+Contextpath+"</li>");  
        out.println("<li>"+"Server容器名--ServerName="+ServerName+"</li>");  
        out.println("<li>"+"处理请求Servlet对应的url--ServletPath="+ServletPath+"</li>");  
        out.println("<li>"+"请求的附加参数--Parameter="+Parameter+"</li>");  
        out.println("</div>");  
        out.close() ;    
          
        //当此Servlet得到这个请求,可以选择自己处理,或者调用其他页面进行处理  
        //这里此Servlet将请求内容转给dealpage.jsp这个页面去处理请求。  
        //相当于本来表单提交给此servlet处理的,现在相当于做一个转向,让提交的表单给dealpage.jsp处理  
          
        //RequestDispatcher dispatcher = req.getRequestDispatcher("dealpage.jsp");  
        //dispatcher.forward(req, resp);  
          
        //super.doGet(req, resp);  
    }  
  
}  
 
请求内容为
[html]  
ServApp/myreq.cg?param1=param  
 
故编辑web.xml,让上面的Servlet类能够获得当前的请求:
[html]   
<servlet>  
    <servlet-name>EntryServ</servlet-name>  
    <servlet-class>com.serv.EntryServ</servlet-class>  
</servlet>  
<servlet-mapping>  
    <servlet-name>EntryServ</servlet-name>  
    <url-pattern>/myreq.cg</url-pattern>  
</servlet-mapping>  
 
其中url-pattern用来映射请求的url,如果对应上,则会调用配置中对应的servlet。
浏览器中输入请求:
[plain] view plaincopy
http://localhost:8088/ServApp/myreq.cg?param1=param  
 
得到结果如下:
 
 

servlet示例的更多相关文章

  1. 开发一个Servlet示例

    Servlet响应请求步骤: Servlet是一个基于Java技术的Web组件,运行在服务器端,用户利用Servlet可以很轻松地扩展Web服务器的功能,使其满足特定的应用需要.Tomcat是一个常用 ...

  2. [C#/Java] C#中调用Servlet示例

    需求 通用消息接口使用servlet作为服务器端服务接口,第三方应用程序通过http post的方式调用servlet,实现与通用消息接口的调用连接. 参数说明如下: msgTitle:消息标题,描述 ...

  3. Servlet 示例

    引入jar包: servlet-api.jar ParameterServlet.java package com.mousewheel.springmvc; import java.io.IOExc ...

  4. 【servlet学习1】使用eclipse+tomcat开发servlet示例

    零.开发环境 1.eclipse+tomcat(tomcat插件已安装到eclipse中). 一.开发servlet步骤 1.在eclipse中新建工程 File —> New —> Ot ...

  5. 5、Servlet的使用

    一.什么是Servlet:用于开发动态Web资源的的技术.使用Servlet可以读取来自用户端的数据,而实现了用户与服务器之间的动态数据交互.更简单的说就是连接页面和代码. 1.开发一个动态的Web资 ...

  6. Servlet 3.0

    Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发 ...

  7. Servlet3.0中Servlet的使用

    目录 1.注解配置 2.异步调用 3.文件上传 相对于之前的版本,Servlet3.0中的Servlet有以下改进: l  支持注解配置. l  支持异步调用. l  直接有对文件上传的支持. 在这篇 ...

  8. Servlet 3特性:异步Servlet

    解异步Servlet之前,让我们试着理解为什么需要它.假设我们有一个Servlet需要很多的时间来处理,类似下面的内容: LongRunningServlet.java package com.jou ...

  9. Spring Boot Servlet

    上一篇我们对如何创建Controller 来响应JSON 以及如何显示数据到页面中,已经有了初步的了解. Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Serv ...

随机推荐

  1. windows安装配置mysql-5.7.13-winx64方法

    1.mysql-5.7.13-winx64.zip下载 官方下载地址:http://dev.mysql.com/downloads/mysql/ 2.解压到D:\mysql\mysql-5.7.13- ...

  2. win7 x64 jdk1.7.0_51

    1:我的 jdk与jre默认安装在:D:\Program Files\Java 2:配置环境变量(系统变量): (1)新建JAVA_HOME (2)新建CLASSPATH (3)编辑Path,%JAV ...

  3. LeetCode_Insert Interval

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...

  4. 《Programming WPF》翻译 第7章 1.图形基础

    原文:<Programming WPF>翻译 第7章 1.图形基础 WPF使得在你的应用程序中使用图形很容易,以及更容易开发你的显卡的能力.这有很多图形构架的方面来达到这个目标.其中最重要 ...

  5. C++基本要点复习--------coursera程序设计实习(PKU)的lecture notes

    因为一些特性复杂,很多时候也用不到一些特性,所以忘记了,算是随笔,也当作一个临时查找的手册.没有什么顺序,很杂. 1.构造函数通过函数重载的机制可以有多个(不同的构造函数,参数个数,或者参数类型不同. ...

  6. QWidget: Must construct a QApplication before a QPaintDevice的问题

    卧槽,无意中编译自己基于Qt创建的Debug工程的时候运行时发生了标题中的错误,原来是把Qt Release的库也放到additional dependencies里面了,同时链接了Debug和Rel ...

  7. 时间类处理<1>

    2016/05/31 14:47:21 [emerg] 14629#0: location "/nginx_status" is outside location "/p ...

  8. MicrosoftSQLServer中的锁模式

    在SQL Server数据库中加锁时,除了可以对不同的资源加锁,还可以使用不同程度的加锁方式,即锁有多种模式,SQL Server中锁模式包括: 1.共享锁 SQL Server中,共享锁用于所有的只 ...

  9. apacheOfbiz

    一.ofbiz 用自身数据库安装 1. 由 binary 安装: 由 binary 安装非常简单, 以下是安装方法: 下载ofbiz-2.0-beta1-complete.tar.gz, 注意不是of ...

  10. 《招聘一个靠谱的iOS》面试题参考答案(下)

    相关文章: <招聘一个靠谱的iOS>面试题参考答案(上) 说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外 ...