WEB应用开发中的Servlet

Servlet的基础知识与使用方法

---------------------------------First---------------------------------html

1、Servlet基础

1.1 Servlet是什么

Servlet是一种基本组件规范,和JSP,Filter,Tag,Listener等一样是属于Java Web的基本组件。前端

Servlet通常是做为控制层处理视图层的请求操做的。java

1.2 Servlet的原理


图1. servlet原理图

刚才说Servlet通常是做为控制层处理前台页面的请求操做的,关于Servlet与客户端请求之间的一个过程首先客户端即前台发送一个请求。Servlet调用service()方法进行响应处理。经常使用的请求方式是get和post方式,service()方法中对请求方式进行了匹配调用doget()或者doPost()等方法,而后在对应的方法中调用相关对象、方法、参数等处理业务,实现对客户端请求的响应。自己Servlet接口是没有doGet()、doPost()等方法的。HttpServlet中定义了这些方法。因此实际开发中咱们会经过继承HttpServlet来建立Servlet类。web

1.3 Servlet的生命周期

Servlet的生命周期过程以下:浏览器

1>. Servlet容器加载阶段tomcat

2>. 初始化阶段 init(ServletConfig sc)bash

-->该方法仅被加载一次,用于初始化操做。app

3>. 响应服务阶段 service(ServletRequest request, ServletResponse response)ide

-->每次请求都会调用该方法,该方法用于请求响应操做。工具

4>. 销毁阶段 destroy()

---------------------------------Second---------------------------------

2、WEB应用中的Servlet

2.1 Servlet接口类实现

新建一个类TestServlet,而后实现Servlet接口。

代码以下:

(阅读源码有助于更好的理解)

import java.io.IOException;    
import javax.servlet.Servlet;  
import javax.servlet.ServletConfig;  
import javax.servlet.ServletException;  
import javax.servlet.ServletRequest;  
import javax.servlet.ServletResponse;    
public class TestServlet implements Servlet{
      @Override
      public void destroy() {
          // TODO Auto-generated method stub
           
      }
      @Override
      public ServletConfig getServletConfig() {
          // TODO Auto-generated method stub
          return null;
      }
      @Override
      public String getServletInfo() {
          // TODO Auto-generated method stub
          return null;
      }
      @Override
      public void init(ServletConfig arg0) throws ServletException {
          // TODO Auto-generated method stub
          
      }
      @Override
      public void service(ServletRequest arg0, ServletResponse arg1)
              throws ServletException, IOException {
          // TODO Auto-generated method stub 
         
      }
 }  复制代码

    这就是直接实现Servlet接口的类全部要实现的方法。经过这些方法咱们可以更好的理解Servlet的生命周期。

2.2 配置与映射

在WEB应用中新建上述类 TestServlet,并在web.xml文件中配置注册Servlet及映射servlet-mapping

配置以下:

<!-- 注册和映射  servlet -->  
<servlet>
      <!-- 1>Servlet注册的名字 -->
      <servlet-name>testServlet</servlet-name>
      <!-- 2>Servlet的全类名 -->
      <servlet-class>cn.edu.hpu.rfeng.TestServlet</servlet-class>
            <!-- 3>配置Servlet的初始化参数 -->
      <init-param>
          <!-- 初始化一个参数user其数据为root -->
          <param-name>user</param-name>
          <param-value>root</param-value>
      </init-param>
      <init-param>
          <param-name>password</param-name>
          <param-value>123456</param-value>
      </init-param>
</servlet>

<servlet-mapping>
      <!-- 2.1>须要和某一个servlet name一致 -->
      <servlet-name>testServlet</servlet-name>
      <!-- 2.2>映射具体的访问路径:‘/’表明当前WEB应用的根目录 -->
      <url-pattern>/test</url-pattern>  
</servlet-mapping>  复制代码

    配置后可测试该Servlet。

2.3 运行测试一个Servlet

在tomcat7下运行该WEB应用,浏览器上访问对应TestServlet的路径,访问 5 次即发出 5 次对TestServlet的请求。对应请求的响应结果输出在控制台。

如图所示:


图2.模拟请求servlet图


图3.模拟Servlet响应请求图

根据结果看到,5次请求的响应结果中,Servlet都调用了service()方法,init()只调用了一次。

init()方法仅在第一次被Servlet容器加载时调用了一次。因此初始化操做通常在init()方法中操做。

service()方法会对每次请求给出响应。通常响应操做逻辑代码写在Servlet的service()方法中。

2.4 实际开发中的Servlet

通常不会经过实现Servlet这个接口来写控制层的Servlet。实际开发中经过继承HttpServlet,覆盖其中的doPost(),doGet()方法来处理视图层传来的请求。(通常能够经过开发工具直接建立一个servlet文件)

新建Servlet文件DevelopServlet,

代码以下:

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 DevelopServlet extends HttpServlet {

      private static final long serialVersionUID = 1L;

     /**
      * The doGet method of the servlet. <br>
      *
      * This method is called when a form has its tag value method equals to get.
      *
      * @param request the request send by the client to the server
      * @param response the response send by the server to the client
      * @throws ServletException if an error occurred
      * @throws IOException if an error occurred
      */
      public void doGet(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException {
      }

      /**
      * The doPost method of the servlet. <br>
      *
      * This method is called when a form has its tag value method equals to post.
      * 
      * @param request the request send by the client to the server
      * @param response the response send by the server to the client
      * @throws ServletException if an error occurred
      * @throws IOException if an error occurred
      */
      public void doPost(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException {
      }
}  复制代码

    能够直接在doGet(),doPost方法中写对请求的处理操做。

2.5 Servlet下的request与response

servlet下有HttpServletRequest,HttpServletResponse,ServletRequest,ServletResponse对象。看命名大体也能看出这些对象之间的联系。其中request对象简单来讲就是用于接收客户端浏览器提交的数据,response对象则将服务端的数据发送到客户端浏览器

request对象的经常使用方法:

setAttribute(String name,Object o): 设置属性名和属性值  
Object getAttribute();获取属性值  
Enumeration getAttributeNames();获取全部属性组成的名字  
void removeAttribute(String a)移除指定对象的属性  
getParameter()获取参数  复制代码

---------------------------------Third---------------------------------

3、模拟案例

模拟登陆案例

3.1 案例描述

前端html页面有个表单有两个文本框,向服务端发送请求,Servlet接收处理请求,获取请求参数。将浏览器传来的数据和默认的用户数据user:zhangsan;password:123456进行比对。若比对成功,处理操做返回前台页面并提示用户登陆成功!若比对失败,也返回前台页面提示用户名或密码错误!

3.2 案例实现

1>在WEB项目下新建登陆页面 login.html

代码以下:

<!DOCTYPE html>
  <html>
  <head>
  <meta charset="UTF-8">
  <title>Insert title here</title>
  </head>
  <body>
      <form action="DevelopServlet" method="post">
          帐户:<input type="text" name="name" /><br>
          密码:<input type="password" name="password" /><br>
          <input type="submit" value="login" />
      </form>
  </body>
  </html>  复制代码

    点击对应页面的登陆按钮,会向DevelopServlet发出请求,Servlet接收请求并响应

2>在DevelopServlet中的逻辑操做

代码以下:

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 DevelopServlet extends HttpServlet { 

      private static final long serialVersionUID = 1L;

      public void doGet(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException {
          doPost(request, response);
      }

      public void doPost(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException {
          //获取请求参数
          String name = request.getParameter("name");
          String password = request.getParameter("password");
          //比对数据并作出处理
          if (name.equals("zhangsan") && password.equals("123456")) {
              response.sendRedirect("success.html");//重定向到登陆成功页面
              return;
          }
          response.sendRedirect("error.html");//重定向到登陆失败页面
      }  
}  复制代码

    其中的success.html和error.html文件就很简单了,实如今页面显示登陆成功或失败的字样。
3>web.xml配置文件

注意:对Servlet必须在web.xml文件中进行注册映射。

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
    <!--注册servlet -->
    <servlet>
        <description>This is the description of my J2EE component</description>
        <display-name>This is the display name of my J2EE component</display-name>
        <!-- servlet的命名 -->
        <servlet-name>DevelopServlet</servlet-name>
        <!-- servlet类全类名,包名加上类名 -->
        <servlet-class>cn.edu.hpu.rfeng.DevelopServlet</servlet-class>
    </servlet>
    <!-- 配置映射 -->
    <servlet-mapping>
        <servlet-name>DevelopServlet</servlet-name>
        <url-pattern>/DevelopServlet</url-pattern>
    </servlet-mapping>
</web-app>  
复制代码
在tomcat7下运行该WEB应用:

效果以下:

1>文本框输入正确的帐户密码时:点击登陆按钮经servlet处理请求重定向到登陆成功页面


图4.正确帐户登陆图


图5.登陆成功图


2>错误状况下:经servlet处理验证帐户错误重定向到登陆错误提示页面

图6.错误帐户登陆图

图7.登陆失败图

---------------------------------The End---------------------------------

相关文章
相关标签/搜索