Servlet入门(一)

Servlet概述

        Java Web应用程序中的所有请求-响应都是由Servlet来完成的。Servlet是Java Web应用的核心,所有请求最终都交给Servlet来处理。当用户访问服务器的时候,Tomcat通过调用Servlet的某些方法来完成整个处理过程。

        编写Servlet时直接继承HttpServlet,并覆盖需要的方法,一般只覆盖doGet()与doPost()方法。方法中参数类型HttpServletRequest与HttpServletResponse分别为客户端请求与服务器端响应。

Servlet工作流程

        Servlet是建立在http规范基础上的。Web访问中最常用的是GET与POST访问方式。用户访问Web程序的时候,浏览器提交的请求是遵循HTTP协议的文本。这段文本由支持Servlet的web服务器也就是Tomcat接收并解析,Tomcat会调用Servlet方法完成相应的处理。当浏览器以GET方式访问Servlet是,Servlet会执行doGet()方法,以POST方式时则调用doPost()方法。

        HTTP请求被封装成了HttpServletRequest类型的request对象,所有的HTTP头数据都可以通过request相应的方法获得。HTTP相应输出流封装为HttpServletResponse类型的response对象,通过设置response属性就可以控制输出的内容。Tomcat调用Servlet相应的方法时把request、response对象作为参数传递给这些方法。


Java Web目录结构

        Web程序部署在Tomcat的“webapps”下面,一个webapps文件夹可以部署多个不同的web应用程序,例如“webapps/app1”、"webapps/web2",访问时网址分别为"localhost:8080/web1"、“localhost:8080/web2”。这两个不同的web应用程序分别称为两个上下文(Context),路径“/web1”、“/web2”也称为上下文路径(ContextPath)。

        如果不适用上下文路径,Web程序需放到“webapps/ROOT”下面,ROOT文件夹下的程序使用“localhost:8080/”访问。

编写Servlet


        下面看一个实例。在新建一个Web工程命名为servlet,然后新建Servlet,命名为FirstServlet。代码如下


public class FirstServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FirstServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.log("执行doGet方法");
		this.excute(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.log("执行doPost方法");
		this.excute(request, response);
	}
	

	//执行方法
	private void excute(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
	{
		response.setCharacterEncoding("UTF-8");
		request.setCharacterEncoding("UTF-8");
		
		String requestUrl = request.getRequestURI();
		
		String method = request.getMethod();
		
		String param = request.getParameter("param");
		
		response.setContentType("text/html");//设置文档类型为html类型
		
		PrintWriter out = response.getWriter();
		
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head><title>A Servlet Demo</title></head>");
		out.println("<body>");
		out.println("以"+method+"方式访问该页面。取到的param参数为:"+param+"</br>");
		out.println("<form action='"+requestUrl+"' method='get'>");
		out.println("<input type='text' name='param' value='param value' >");
		out.println("<input type='submit' value='以get方式查询页面"+requestUrl+"' >");
		out.println("</form>");
		out.println("<form action='"+requestUrl+"' method='post'>");
		out.println("<input type='text' name='param' value='param value' >");
		out.println("<input type='submit' value='以get方式查询页面"+requestUrl+"' >");
		out.println("</form>");
		
		out.println("</body>");
		out.println("</html>");
		out.flush();
		out.close();
		
	}

}


配置Servlet

        只有Servlet类文件还不行,Web容器必须知道浏览器如何访问这个Servlet,也就是说,浏览器地址输入什么样的 URL才能访问这个Servlet,这需要配置Servlet的类文件与URL访问方式。这个配置在Web应用程序的描述文件web.xml里完成。首先要配置Servlet的名称以及类名。名称与类名使用标签<servlet>配置。FirstServlet配置描述如下所示,

<servlet>  
     <!-- Servlet名称 -->  
    <servlet-name>FirstServlet</servlet-name>  
    <!-- 所在的包 -->  
    <servlet-class>com.servlet.FirstServlet</servlet-class> 
    <load-on-startup>1</load-on-startup>
    <!-- 如果配置为1,Tomcat会在启动的时候加载该Servlet;如果配置为0, Tomcat会在第一次请求该Servlet的时候才加载该Servlet-->
  </servlet>

<servlet-name>中间的内容可以使用任意字母组合,同时必须保证名称在web.xml里是唯一的。该名称会被其他的标签如<servlet-mapping>、<filter>等使用。

配置<servlet-mapping>

        配置完Servlet名称与类名后还需要配置Servlet的访问方式,访问方式使用标签<servlet-mapping>声明。具体配置如下所示:
<servlet-mapping>
  	<!-- 也就是前面<servlet>标签配置的Servlet名称 -->
    <servlet-name>FirstServlet</servlet-name>  
    <!-- 访问的网址 -->  
    <url-pattern>/demo/FirstServlet</url-pattern>
  </servlet-mapping>

标签<servlet-name>说明该访问方式映射的Servlet名称,也就是前面<servlet>标签配置的Servlet名称。<url-pattern>值前面加上Web应用程序的路径(本例为“/servlet”),再加上服务器域名及端口号信息就是访问该Servlet的具体网址。本例中FirstServlet访问网址为“http://localhost:8080/servlet/demo/FirstServlet”。<servlet-mapping>也可以配置多个<url-pattern>,如下所示:

<servlet-mapping>
  	<!-- 也就是前面<servlet>标签配置的Servlet名称 -->
    <servlet-name>FirstServlet</servlet-name>  
    <!-- 访问的网址 -->  
    <url-pattern>/demo/FirstServlet</url-pattern>
    <url-pattern>/demo/FirstServlet.html</url-pattern>
    <url-pattern>/demo/FirstServlet.php</url-pattern>
    <url-pattern>/demo/FirstServlet.asp</url-pattern>
  </servlet-mapping>


运行效果图







都是有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值