WEB应用开发中的Servlet

来源:互联网 发布:网络币骗局 编辑:程序博客网 时间:2024/05/18 23:13

Servlet的基础知识与使用方法

---------------------------------First---------------------------------

一、Servlet基础

1.1 Servlet是什么

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

    Servlet一般是作为控制层处理视图层的请求操作的。

1.2 Servlet的原理


图1. servlet原理图

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

1.3 Servlet的生命周期

Servlet的生命周期过程如下:

    1>. Servlet容器加载阶段

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

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

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

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

    4>. 销毁阶段 destroy()

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

二、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{@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic ServletConfig getServletConfig() {// TODO Auto-generated method stubreturn null;}@Overridepublic String getServletInfo() {// TODO Auto-generated method stubreturn null;}@Overridepublic void init(ServletConfig arg0) throws ServletException {// TODO Auto-generated method stub}@Overridepublic 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.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>

3.3 运行演示

    在tomcat7下运行该WEB应用:

效果如下:

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


图4.正确账户登录图


图5.登录成功图


    2>错误情况下:经servlet处理验证账户错误重定向到登录错误提示页面

图6.错误账户登录图

图7.登录失败图

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

7 2
原创粉丝点击