认识Servlet

来源:互联网 发布:淘宝开店最新流程ppt 编辑:程序博客网 时间:2024/06/10 03:55

说明

我们知道JSP编译后就是Servlet。由于Servlet是标准的Java类,页面的东西在里面开发较困难,自MVC规范出现后,Servlet便不再生成页面标签 ,也不再作为视图层使用,仅作为控制器使用

开发Servlet步骤

1. 创建自定义Servlet类

  1. 让自定义的Servlet类继承HttpServlet并重写相关方法
  2. Servlet响应客户端的几种方法:
    doGet:用于响应客户端的GET请求
    doPost:用于响应客户端的POST请求
    doPut:用于响应客户端的PUT请求
    doDelete:用于响应客户端的DELETE请求
    一般doGet与doPost方法要重写,如果重写了service()则能响应所有客户端的请求,这样就不必重写上面的方法了。service()方法等同于JSP生成的Servlet里的_jspService()方法。
  3. HttpServlet的init(ServletConfig config)方法
    如果重写了该方法,则应在重写该方法的第一行调用super.init(config);访方法用于初始化Servlet资源。
  4. HttpServlet的destroy()方法
    只有在销毁Servlet之前要先完成像关闭数据库连接这样的资源回收才需重写destroy()方法。

2.配置自定义Servlet类

两种方式:
1. Servlet3.0以后可使用@WebServlet注解配置
使用注解后不要在web.xml文件的根元素(<web-app...>)中指定metadata-complete="true"
注解@WebServlet常用属性

属性名 说明 asyncSupported 是否支持异步 display 给Servlet指定显示名字 name Servlet名字 initParams 给Servlet配置参数 loadOnStartup 将该Servlet配置成load-on-startup的Servlet urlPatterns/value 指定访问该Servlet的URL,两个属性作用一样。

2. 通过web.xml进行配置

<servlet>    <!-- 指定servlet名字,相当于注解name属性 -->    <servlet-name>test</servlet-name>    <!-- Servlet实现类:自定义的Servlet -->    <servlet-class>com.zrgk.servlet.MyServlet</servlet-class></servlet><servlet-mapping>    <!-- 指Servlet名字 -->    <servlet-name>test</servlet-name>    <!-- Servlet映射URL,相当于注解里的urlPatterns或value属性 -->    <url-pattern>/basic.do</url-pattern></servlet-mapping>

Servlet简单示例

//通过注解配置该Servlet@WebServlet(name="test",urlPatterns={"/basic.do"})public class TestServlet extends HttpServlet{    //使用该方法可响应客户端的所有请求    public void service(HttpServletRequest req, HttpServletResponse resp)throws IOException{        PrintStream out = new PrintStream(resp.getOutputStream());        out.print("1234567890");//向页面输出这串字符串    }}

Servlet与JSP的区别

  1. Servlet中没有内置对象,都必须显示创建,而JSP有9个内置对象。
  2. Servlet必须使用页面输出流逐行输出HTML标签。

JSP/Servlet的生命周期

  1. 客户端在第一次请求某个Servlet时创建Servlet实例
  2. Web容器调用Servlet的init方法,对Servlet初始化
  3. 在Servlet类里重写的方法里处理客户端请求
  4. 关闭Web应用销毁Servlet前,调用destroy方法进行资源回收。

创建web应用启动时就创建实例的Servlet

创建Servlet实例有两种情况,一种是应用启动时,另一种是用户请求时。
应用启动时就创建实例的Servlet有种实现方法:
1.通过@WebServlet的loadOnStartup属性指定,该属性值是整型,且值越小越优先实例化。代码如下:

//通过注解配置该Servlet@WebServlet(loadOnStartup=1)public class TestServlet extends HttpServlet{    //使用该方法可响应客户端的所有请求    public void init(ServletConfig config)throws ServletException{        super.init(config);        System.out.println("后续处理省略....");    }}

2.通过web.xml配置实现,代码如下:

<servlet>    <!-- 指定servlet名字 -->    <servlet-name>startupServlet</servlet-name>    <!-- Servlet实现类:自定义的Servlet -->    <servlet-class>com.zrgk.servlet.MyServlet</servlet-class>    <!-- 配置后Servlet在启动时就会创建实例了 -->    <load-on-startup>1</load-on-startup></servlet>

*获取Servlet的配置参数

  1. 为配置Servlet参数有两种方式:
    通过注解@WebServlet里的initParams属性指定
    通过在web.xml中的<servlet...>元素中添加<init-param...>子元素来指定
  2. 获取Servlet的配置参数
    获取Servlet的配置参数,是通过ServletConfig对象完成的:
    ServletConfig config = this.getServletConfig();
    String key = config.getInitParameter(“配置参数的key名”);
  3. 示例代码片:
@WebServlet(name="test",    urlPatterns={"/basic.do"},    initParams={        @WebInitParam(name="userName",value="peter"),        @WebInitParam(name="age",value="100")        })public class TestServlet extends HttpServlet{    //使用该方法可响应客户端的所有请求    public void service(HttpServletRequest req, HttpServletResponse resp)throws IOException{        //获取config对象        ServletConfig config = this.getServletConfig();        //通过config对象获取Servlet的配置参数        String userName = config.getInitParameter("userName");        String age = config.getInitParameter("age");        //打印参数结果        System.out.println(userName+"="+age);        PrintStream out = new PrintStream(resp.getOutputStream());        out.print("1234567890");    }}

以web.xml的配置方式的代码片:

<servlet>        <servlet-name>test</servlet-name>        <servlet-class>com.zrgk.servlet.TestServlet</servlet-class>        <init-param>            <param-name>userName</param-name>            <param-value>peter</param-value>        </init-param>        <init-param>            <param-name>age</param-name>            <param-value>100</param-value>        </init-param>    </servlet>    <servlet-mapping>        <servlet-name>test</servlet-name>        <url-pattern>/basic.do</url-pattern>    </servlet-mapping>
1 0
原创粉丝点击