Servlet概述,生命周期,相关接口,HttpServlet,Servlet的编译,配置,处理GET/POST

来源:互联网 发布:windows平板 游戏横屏 编辑:程序博客网 时间:2024/06/05 20:14

                Servlet概述

为什么需要Servlet

Servlet程序替代JSP中的JAVA代码

什么是Servlet 

Servlet 是一个 Java程序,是在服务器上运行以处理客户端请求并做出响应的程序

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class HelloServletTest    extends HttpServlet {

      public void doGet(HttpServletRequest request,     

                                     HttpServletResponse    response)    

                                     throws ServletException, IOException {    response.setContentType("text/html;charset=GBK");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("  <head><title>Servlet</title></head>");

out.println("  <body>");

out.println("你好,欢迎来到Servlet世界");

out.println("  </body>");

out.println("</html>");

out.close();

     }

}

Servlet的生命周期:

实例化: Servlet容器创建Servlet的实例

初始化: 该容器调用init()方法

请求处理:如果请求Servlet,则容器调用service()方法

服务终止:销毁实例之前调用destroy()方法

public class HelloServlet implements Servlet {

           prvate  ServletConfig config;

           Public void destory();

           public ServletConfig getServletConfig(){

                 return config;

           }

           public void init(ServletConfig config)throws ServletException{

                  this.config=config;

    System.out.println("初始化!");

           }

           Public void service(ServletRequest req,ServletResponse res)

throws ServletException,IOException{

    PrintWriter out = res.getWrite();

    out.println("Hello world");

    out.close();

           }

           public void destroy() {

super.destroy();

System.out.println("释放资源!"); }

}

Servlet相关接口:

ServeltConfig接口

Servlet初始化过程中获取配置信息

一个Servlet只有一个ServletConfig对象

ServeltConfig接口的常用方法

String getInitParameter(String name) 获取web.xml中设置的以name命名的初始化参数值

ServletContext getServletContext() 返回Servlet的上下文对象引用

ServeltConText接口

获取Servlet上下文

ServeltConText接口的常用方法

ServletContext getContext(String path) 返回服务器上与指定URL相对应的ServletContext对象

void setAttribute(String name,Object obj) 设置Servlet中的共享属性

Object getAttribute(String name) 获取Servlet中设置的共享属性

GenericServlet抽象类

提供了ServletServletConfig接口的默认实现方法

GenericServlet的常用方法

String getInitParameter(String name) 返回服务器上与指定URL相对应的ServletContext对象,实际上是调用ServletConfig接口的同名方法

ServletContext getServletContext() 返回Servlet的上下文对象引用,实际上是调用ServletConfig接口的同名方法

void init() 初始化Servlet

HttpServlet类:

HttpServlet继承于GenericServlet

处理HTTP协议的请求和响应

HttpServlet的方法

void doGet(HttpServletRequest request,HttpServletRresponse response) 以Get请求服务时调用

void doPost(HttpServletRequest request,HttpServletRresponse response) 以Post请求服务时调用

使用doXxx()接收用户请求

doGet():用户使用get方式提交请求时调用

doPost():用户使用post方式提交请求是调用

import java.io.IOException;

import javax.servlet.*;

import javax.servlet.http.*;

public class HelloServlet extends HttpServlet {

     public void doGet(HttpServletRequest request, HttpServletResponse 

                                     response)  throws ServletException, IOException {

//doGet方法体内容

     }

     public void doPost(HttpServletRequest request, HttpServletResponse  

                                      response)  throws ServletException, IOException {

//doPost方法体内容

     }

}

service()方法根据表单提交方法自动调用doXxx()方法

Servlet的编译:

使用命令行方式编译Servlet的步骤

打开命令行窗口

进入到servlet类文件所在目录

使用javac命令执行编译

将编译生成的.class文件拷贝到class目录下

Servlet的配置:

web.xml文件中配置Servlet

<web-app>

    <servlet>

        <servlet-name> HttpServletTest </servlet-name>

        <servlet-class>cn.jbit.servlet. HttpServletTest </servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name> HttpServletTest </servlet-name>

        <url-pattern>/HttpServletTest </url-pattern>

    </servlet-mapping>

</web-app>

获取Servlet初始化参数:

Servlet初始化参数配置

<web-app>

    <servlet>

        <servlet-name>HelloServlet</servlet-name>

        <servlet-class>org.jbit.servlet.HelloServlet</servlet-class>

        <init-param>

            <param-name>initParam</param-name>

            <param-value>Hello Servlet</param-value>

        </init-param>

    </servlet>

    <servlet-mapping>

        <servlet-name>HelloServlet</servlet-name>

        <url-pattern>/HelloServlet</url-pattern>

    </servlet-mapping>

</web-app>

获取初始化参数

public void doGet(HttpServletRequest request, 

                      HttpServletResponse response)

                   throws ServletException, IOException {

        System.out.println("处理请求时,doGet()方法被调用。");

        String initParam = getInitParameter("initParam");

        System.out.println(initParam);

}

获取Servlet上下文参数

配置Servlet上下文

<web-app>

    <context-param>

        <param-name>contextParam</param-name>

        <param-value>Hello Servlet</param-value>

    </context-param>

    <!--省略其他配置-->

</web-app>

读取Servlet上下文

public class HelloServlet extends HttpServlet {

// …省略其他代码

public void doGet(HttpServletRequest request, 

HttpServletResponse response)

throws ServletException, IOException {

System.out.println("处理请求时,doGet()方法被调用。");

String initParam = getInitParameter("initParam");

String contextParam = 

this.getServletContext().getInitParameter("contextParam"); System.out.println("Servlet初始化参数" + initParam);

System.out.println("系统初始化参数" + contextParam);

}

}

使用Servlet处理GET/POST请求

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setCharacterEncoding("GBK");

response.setContentType("text/html;charset=GBK");

String pass = request.getParameter("password");

String user = request.getParameter("loginName");

RequestDispatcher dispatcher = null;

if (user.equals("accp") && pass.equals("accp")) {

request.setAttribute("loginname", user);

dispatcher = request.getRequestDispatcher("ok.jsp");

dispatcher.forward(request, response);

  } else {

     response.sendRedirect("login.jsp");

  }

}  

HttpServletRequest类常用方法

String getParameter(String param)  获取客户端请求数据

void setCharacterEncoding(String encoding) 设置输入字符集

HttpServletResponse类常用方法

void setContentType(String contType) 设置输出字符集

void sendRedirect(String url) 让浏览器重定向到指定的资源

RequestDispatcher

作用:实现请求转发

使用步骤

获取RequestDispatcher

  RequestDispatcher dispatcher 

= request.getRequestDispatcher(url);

//参数url是欲转发的页面或者ServletURL地址

实现转发

  dispatcher.forward(request, response);

原创粉丝点击