Servlet

开发动态Web资源的常见技术有ASP、PHP、JSP、Servlet等。基于Java的动态Web资源开发,Sun公司提供了Servlet和JSP两种技术。

1.Servlet概述

Servlet 是使用Java语言编写的运行在 Web 服务器或应用服务器上的程序。主要作为来自 Web 浏览器或其他 HTTP 客户端的请求(doGet()doPost() 等方法)和 HTTP 服务器上的数据库或应用程序之间的中间层。
Servlet 由Servlet 容器提供,(Servlet 容器是指提供Servlet 功能的服务器(例如:Tomcat)),Servlet 容器将Servlet 动态地加载到服务器上。
Servlet 应用程序的体系结构
在这里插入图片描述
Servlet的请求首先会被HTTP服务器(如Apache)接收,HTTp服务器只负责静态HTML页面的解析,对于Servlet的请求转交给Servlet容器,Servlet容器会根据web.xml文件中的映射关系,调用相应的Servlet,Servlet将处理的结果返回给Servlet容器,并通过HTTP服务器将响应传输给客户端。
Servlet技术的特点:

  • 方便:Servlet提供了大量的实用工具例程。
  • 跨平台:用Java类编写
  • 灵活性和可扩展性:
  • 功能强大、能在各个程序之间共享数据、安全性强等

用户若想用发一个动态Web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:

  • 编写一个Java类,实现servlet接口
  • 把开发好的Java类部署到web服务器中

2.Servlet接口及实现类

Servlet技术最重要的接口是 javax.servlet.Servlet
Servlet接口中定义了 5 个抽象方法
init、service、destroy 、getServletConfig 和 getServletInfo
表中提及的Servlet容器指的是 Web服务器
表中提及的Servlet容器指的是 Web服务器
ServletContext接口的三个主要作用:

  • 获取Web应用程序的初始化参数
  • 实现多个Servlet对象共享数据
  • 读取Web应用下的资源文件
实例问题一:

编写一个servlet,实现统计网站被访问次数的功能?
实现步骤如下:
1)新建一个类ShowTimesServlet继承HttpServlet,重写doGet和doPost方法
2) 在doPost方法中调用doGet方法,在doGet方法中实现统计网站被访问次数的功能,用户每请求一次Servlet,使访问次数times加1
3) 获取ServletContext,通过它的功能记住上一次访问后的次数

3.1)ShowTimesServlet类的编写如下:

public class ShowTimesServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		ServletContext context = getServletContext();
		Integer times = (Integer) context.getAttribute("times");
		if (times == null) {
			times = new Integer(1);
		} else {
			times = new Integer(times.intValue() + 1);
		}
		//设置编码(UTF-8也行),不然中文会变成乱码
	    resp.setContentType("text/html;charset=GB2312");	
        //得到输出流对象
        PrintWriter out=resp.getWriter();     
        out.println("<html><head><title>");
        out.println("页面访问统计");
        out.println("</title></head><body>");
        out.println("当前页面被访问了");
        out.println("<font color=red size=20>"+times+"</font>次");
        //设置属性,将times保存到当前的上下文中
        context.setAttribute("times",times);
	}
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		this.doGet(req, resp);
	}
}

3.2)web.xml配置信息如下

<servlet>
	<servlet-name>ShowTimesServlet</servlet-name>
	<servlet-class>
		cn.itcast.chapter03.servlet.ShowTimesServlet
	</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>ShowTimesServlet</servlet-name>
	<url-pattern>/ShowTimesServlet</url-pattern>
</servlet-mapping>
实例问题二:

编写一段程序,使程序能读取该servlet的配置信息,从中获得参数名为encoding对应的参数值,并输出到页面上?
实现代码如下:
1.TestServlet类如下:

public class TestServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request,
	 HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		// 获得ServletConfig对象
		ServletConfig config = this.getServletConfig();
		// 获得参数名为encoding对应的参数值
		String param = config.getInitParameter("encoding");
		out.println("encoding=" + param);
	}
	protected void doPost(HttpServletRequest request,
	  HttpServletResponse response) throws ServletException, IOException {
		this.doGet(request, response);
	}
}

2.web.xml文件配置如下:

<servlet>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>cn.itcast.chapter03.servlet.TestServlet</servlet-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
 </servlet>
<servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值