一个简单的Servlet示例

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

http://localhost:8088/ServApp/myreq.cg?param1=param

当请求通过网络路由,到达服务器(假设是Tomcat服务器),Tomcat正在监听端口8088发过来的消息。消息到达后,Tomcat接收到此次请求的Socket。

经过Tomcat服务器的一系列封装处理后,请求被封装成HttpServletRequest对象,交由到对应的Servlet。

简单时序图如下:



这里,我们只关注第10步。

在第9步中,request对象传递给Container组件执行。

当Servlet对象获得请求(httpservletrequest),会调用相关函数(Service)进行处理。

下面编写一个简单示例,从说明当前步骤。

1,编写请求处理类(EntryServ)

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( "

这是一个Servlet!!!!!

" ) ; out.println("
"+"现在用response输出请求相关信息如下:"); out.println("
  • "+"发送请求服务器ip--RemoteAddr="+RemoteAddr+"
  • "); out.println("
  • "+"发送请求服务器主机--RemoteHost="+RemoteHost+"
  • "); out.println("
  • "+"请求的URI--RequestURI="+RequestURI+"
  • "); out.println("
  • "+"发送请求的方法--Method="+Method+"
  • "); out.println("
  • "+"发送请求的协议--Protocol="+Protocol+"
  • "); out.println("
  • "+"请求内容的编码--CharacterEncoding="+CharacterEncoding+"
  • "); out.println("
  • "+"请求的内容类型--ContentType="+ContentType+"
  • "); out.println("

    "); out.println("

  • "+"当前服务器ip--LocalAddr="+LocalAddr+"
  • "); out.println("
  • "+"服务器主机名--LocalName="+LocalName+"
  • "); out.println("
  • "+"context容器路径---contextpath="+Contextpath+"
  • "); out.println("
  • "+"Server容器名--ServerName="+ServerName+"
  • "); out.println("
  • "+"处理请求Servlet对应的url--ServletPath="+ServletPath+"
  • "); out.println("
  • "+"请求的附加参数--Parameter="+Parameter+"
  • "); out.println("
    "); out.close() ; //当此Servlet得到这个请求,可以选择自己处理,或者调用其他页面进行处理 //这里此Servlet将请求内容转给dealpage.jsp这个页面去处理请求。 //相当于本来表单提交给此servlet处理的,现在相当于做一个转向,让提交的表单给dealpage.jsp处理 //RequestDispatcher dispatcher = req.getRequestDispatcher("dealpage.jsp"); //dispatcher.forward(req, resp); //super.doGet(req, resp); } }

    请求内容为

    ServApp/myreq.cg?param1=param

    故编辑web.xml,让上面的Servlet类能够获得当前的请求:

    	
    		EntryServ
    		com.serv.EntryServ
    	
    	
    		EntryServ
    		/myreq.cg
    	

    其中url-pattern用来映射请求的url,如果对应上,则会调用配置中对应的servlet。

    在浏览器中输入请求:

    http://localhost:8088/ServApp/myreq.cg?param1=param

    得到结果如下:

    一个简单的Servlet示例_第1张图片




    你可能感兴趣的:(Web编程)