2016-03-25 11:34:14

一、实现一个简单的servlet程序

Servlet是在服务器端运行的小程序,这是一个很广泛的概念,并没有说是在web服务器端运行的小程序,除了在web服务器上运行,还可以在email、ftp服务器上运行,而我们现在介绍的servlet是专门在web服务器端运行的小程序。

servlet-api.jar在tomcat下就有,可以直接复制过来,或者使用maven

HTTP的请求方式包括DELETE,GET,OPTIONS,POST,PUT和TRACE,在HttpServlet类中分别提供了相应的服务方法,它们是doDelete(),doGet(),doOptions(),doPost(),doPut() 和doTrace(),这里我们使用doGet()。

package com.nicole.servletDemo01;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class HelloWorldServlet extends HttpServlet { @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("doGet");
//doGet打印到后台
resp.getWriter().write("<a href='http://www.baidu.com'>go</a>");
//在服务器端拿到了输出流向客户端里写一个百度超链接
} }

然后我们把servlet放到tomcat里面去(当然也可以直接在eclipse中添加服务器run on server)。

在目录下C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\testServlet\WEB-INF下创建了两个文件夹和一个web.xml

在classes文件夹,放置HelloWorldServlet.class,注意这里类文件的完整路径是

C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\testServlet\WEB-INF\classes\com\nicole\servletDemo01,即classes文件夹下还有子文件夹;

建立一个lib文件夹,将servlet-api.jar包放进去;

web文件里规定访问途径:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true"> <servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.nicole.servletDemo01.HelloWorldServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/helloworld</url-pattern>
</servlet-mapping>
</web-app>

根据url到web.xml中可以找到<url-pattern>(/helloworld)和相应的servlet-name(hello),再根据servlet-name就可以找到servlet-class (com.nicole.testServletDemo01)。

启动tomcat,输入URL:http://localhost:8080/testServlet/helloworld,可以看到一个百度页面的超链接go。

至于doGet,可以打开日志看到

 
一个HttpServlet容器(这里是tomcat)响应Web客户请求流程如下:
1)Web客户向servlet容器发出http请求;
2)Servlet容器解析Web客户的Http请求;
3)Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;
4)Servlet容器创建一个HttpResponse对象;
5)Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;
6)HttpServlet调用HttpRequest的有关方法,获取http请求信息;
7)HttpServlet调用HttpResponse的有关方法,生成响应数据;
8)servlet容器把HttpServlet的响应结果传给Web客户。

二、servlet的生命周期

Servlet生命周期分为三个阶段:

  1,初始化阶段                    调用init()方法

  2,响应客户请求阶段        调用service()方法

  3,终止阶段,释放占用资源 调用destroy()方法

通过程序验证servlet的生命周期

package com.nicole.servletDemo02;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class ServletLifeCycle extends HttpServlet{ public ServletLifeCycle(){
System.out.println("constructor");
} @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("doGet");
} @Override
public void destroy() {
System.out.println("destroy");
} @Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init");
} }

注意到init方法里带有参数Servletconfig。当servlet配置了初始化参数后(就是在web.xml中配置的一些参数),web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。

在web.xml中配置路径

 <servlet-name>cycle</servlet-name>
<servlet-class>com.nicole.servletDemo01.ServletLifeCycle</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>cycle</servlet-name>
<url-pattern>/lifecycle</url-pattern>
</servlet-mapping>

输入URL:http://localhost:8080/testServlet/lifecycle,查看日志 “tomcat-stdout.2016-03-23”

多次访问该servlet,可以看到

关闭tomcat,可以看到:

总结servlet执行顺序如下:

加载:classloader将类加载进来;

实例化:new一个对象;

初始化:调用init方法;

处理请求:对于httpservlet来说,一般就是运行doget、dopost方法;

退出服务:调用destroy方法;

并且实例化和初始化只执行了一次,一直只有一个对象提供服务。

servlet / jsp(一)的更多相关文章

  1. NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config

    今天调试SSM框架项目后台JSOn接口,报出来一个让人迷惑的错误:NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config 上网查了一下别人的博 ...

  2. MVC开发模式之Servlet+jsp+javaBean

    Servlet+jsp+JavaBean组合开发是一种MVC开发模式,控制器Controller采用Servlet.模型Model采用JavaBean.视图View采用JSP. 1.Web开发的请求- ...

  3. springMVC: java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config

    springMVC开发web的时候,报错:java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config 原因:未引入jstl ...

  4. Struts框架——(一)用Servlet + JSP演示Struts基本原理

    一. 用Servlet + JSP演示Struts基本原理 struts是开源项目.它通过采用 Java Servlet/JSP 技术,实现了基于Java EE Web应用的MVC的应用框架.Stru ...

  5. Javabean+servlet+JSP(html)实例应用

    大家都知道Javabean+servlet+JSP是最简单的MVC模式.的确,在一个小型的项目中,这个模式完全够用. 它优雅并且简洁.加上jQueryui的完美展示效果,让这个模式看起来非常合适.当然 ...

  6. 报错:严重: Servlet.service() for servlet [jsp] in context with path [/20161116-Struts2-6] threw exception [/index.jsp (line: 13, column: 20) No tag "textfiled" defined in tag library imported with prefix

    严重: Servlet.service() for servlet [jsp] in context with path [/20161116-Struts2-6] threw exception [ ...

  7. servlet+jsp+java实现Web 应用

    servlet+jsp+java实现Web 应用 用java来构建一个web应用是特别容易的事情,jsp和php很像,可以嵌套在html中.程序的结构很简单,也很清楚,本文主要记录下大概的开发过程和环 ...

  8. javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  9. 在Eclipse中配置Tomcat 创建和运行Servlet/JSP

    在Eclipse中配置Tomcat 创建和运行Servlet/JSP 步骤一:在Eclipse中配置Tomcat(注意下载Eclipse IDE for Java EE Developers) (1) ...

  10. javax.servlet.jsp.JspException cannot be resolved to a type

    javax.servlet.jsp.PageContext cannot be resolved to a type javax.servlet.jsp.JspException cannot be ...

随机推荐

  1. zabbix3.0.4 配置邮件报警

    试验环境: LAMP环境 (LNMP环境已经成功了,为了避免干扰,我另一台LAMP主机) ### 我在做实验之前,作了时间同步,不知道这个有木有影响,一起说一下吧! yum -y install nt ...

  2. ABAP基础二:ALV基础之ALV的简单编辑

    前两天有个打印需求变更,需要在ALV显示列表中添加两个字段,可编辑,而我自己用的是函数:REUSE_ALV_GRID_DISPLAY_LVC 因为之前做可编辑基本都是固定套路,定义类,画屏幕.... ...

  3. win7下安装node及出现的npm问题

    按照官网下载安装,选择 Windows Installer (.msi):,一直next安装,默认安装在C:\Program Files\nodejs下,环境变量会自动添加 如果安装后,打开cmd输入 ...

  4. spring AOP自定义注解 实现日志管理

    今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接开始!!! 关于配置我还是的再说一遍. 在appli ...

  5. Python将列表作为栈和队列

    Collections中的各种方法 阅读目录(Content) 一.各种方法介绍 二.代码部分 回到顶部(go to top) 一.各种方法介绍 Counter 统计个数   elements  mo ...

  6. Idea破解办法+idea免费生成注册码+jsp属性选择器+注解什么的都报错

    Idea破解办法: http://blog.csdn.net/bitcarmanlee/article/details/54951589 idea免费生成注册码: http://idea.iteblo ...

  7. memory prefix hypo,hecto,hyper out1

    1● hypo 次等   2● hecto 许多,百   3● hyper 超过,许多  

  8. Spring的DAO模块

    Spring的DAO模块提供了对JDBC.Hibernate.JDO等DAO层支持. DAO模块依赖 commons-pool.jar.commons-collections.jar package ...

  9. 配置javaBean

    bean基本配置: <bean id="exampleBean" class="examples.ExampleBean"></bean> ...

  10. xxx/labelKeypoint/utils/qt.py:81: RuntimeWarning: invalid value encountered in double_scalars

    原代码: return np.linalg.norm(np.cross(p2 - p1, p1 - p3)) / np.linalg.norm(p2 - p1) 出现报错: xxx/labelKeyp ...