zoukankan      html  css  js  c++  java
  • Servlet入门

    1、Servle简介

    Servlet是运行在服务端的Java小程序,是Sun公司提供的一套规范(接口),用于处理客户端请求、相应给浏览器的动态资源。

    Servlet规范包含三个技术点:

    • servlet技术
    • filter:过滤器
    • listener:监听器

    2、Servlet快速入门

    步骤:

    1. 创建类实现Servlet接口
    2. 覆盖尚未实现的方法
    3. 在web.xml中进行servlet配置

    开发中会使用继承HttpServlet的类:

    1. 创建类继承HttpServlet类
    2. 覆盖doGet()和doPost()方法
    3. 在web.xml中进行servlet配置

    3、Servlet接口中的方法

    • init(ServletConfig config):servlet对象创建的时候被执行,ServletConfig代表servlet对象的配置信息
    • service(ServletRequest request, ServletResponse response):每次请求都会被执行,ServletRequest代表请求,内部封装了http请求信息,ServletResponse代表响应,内部封装了响应信息
    • destroy():servlet对象被销毁时执行

    4、HttpServlet类的方法

    • init()
    • doGet(HttpServletRequest request, HttpServletResponse response)
    • doPost(HttpServletRequest request, HttpServletResponse response)
    • destory()

    5、Servlet中url-pattern的配置的方式

    • 完全匹配:访问资源与配置的资源完全相同才能访问到
    • 目录匹配:格式为/虚拟目录/*,其中*代表任意
    • 扩展名匹配:格式为*.扩展名
    • 缺省配置:格式为/,当访问的资源地址与所有的servlet都不匹配时,缺省的servlet负责处理

    6、ServletContext对象

    ServletContext对象代表web应用上下文对象,ServletContext对象内部封装的是该web应用的信息,一个web应用中只有一个ServletContext对象。

    ServletContext对象的获取方式:

      ServletContext servletContext = config.getServletContext();

      ServletContext servletContext = this.getServletContext();

    ServletContext的作用:

      获得web应用全局的初始化参数

      获得web应用中任何资源的绝对路径

     1 package com.alphajuns.context;
     2 
     3 import java.io.IOException;
     4 
     5 import javax.servlet.ServletContext;
     6 import javax.servlet.ServletException;
     7 import javax.servlet.http.HttpServlet;
     8 import javax.servlet.http.HttpServletRequest;
     9 import javax.servlet.http.HttpServletResponse;
    10 
    11 /**
    12  * Servlet implementation class ContextServlet
    13  */
    14 public class ContextServlet extends HttpServlet {
    15     private static final long serialVersionUID = 1L;
    16        
    17     public ContextServlet() {
    18         super();
    19     }
    20 
    21     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    22         // 获取ServletContext对象
    23         ServletContext servletContext = getServletContext();
    24         // 获取初始化参数
    25         String initParameter = servletContext.getInitParameter("driver");
    26         System.out.println(initParameter);
    27         // 1、获得a.txt的绝对路径
    28         String realPath_a = servletContext.getRealPath("a.txt");
    29         System.out.println(realPath_a);
    30         // 2、获得b.txt的绝对路径
    31         String realPath_b = servletContext.getRealPath("WEB-INF/b.txt");
    32         System.out.println(realPath_b);
    33         // 3、获得c.txt的绝对路径
    34         String realPath_c = servletContext.getRealPath("WEB-INF/classes/c.txt");
    35         System.out.println(realPath_c);
    36         
    37         // 获取在src下的资源可以通过类加载器的方式
    38         String path = ContextServlet.class.getClassLoader().getResource("c.txt").getPath();
    39         System.out.println(path);
    40     }
    41 
    42     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    43         // TODO Auto-generated method stub
    44         doGet(request, response);
    45     }
    46 
    47 }

      ServletContext是一个域对象

        常用方法:

          setAttribute(String name, Object obj);

          getAttribute(String name);

          removeAttribute(String name);

    登录应用举例:判断用户名和密码是否正确,并记录正确登录的次数

     1 package com.alphajuns.login;
     2 
     3 import java.io.IOException;
     4 import java.sql.SQLException;
     5 
     6 import javax.servlet.ServletContext;
     7 import javax.servlet.ServletException;
     8 import javax.servlet.http.HttpServlet;
     9 import javax.servlet.http.HttpServletRequest;
    10 import javax.servlet.http.HttpServletResponse;
    11 
    12 import org.apache.commons.dbutils.QueryRunner;
    13 import org.apache.commons.dbutils.handlers.BeanHandler;
    14 
    15 import com.alphajuns.domain.User;
    16 import com.alphajuns.utils.DataSourceUtils;
    17 
    18 public class LoginServlet extends HttpServlet {
    19     
    20     @Override
    21     public void init() throws ServletException {
    22         int count = 0;
    23         this.getServletContext().setAttribute("count", count);
    24     }
    25 
    26     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    27         // 获得用户名和密码
    28         String username = request.getParameter("username");
    29         String password = request.getParameter("password");
    30         
    31         // 从数据库获取用户名和密码
    32         // 获取数据库执行对象
    33         QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
    34         String sql = "select * from user where username=? and password=?";
    35         // 对查询结果进行封装
    36         User user = null;
    37         try {
    38             user = qr.query(sql, new BeanHandler<User>(User.class), username, password);
    39         } catch (SQLException e) {
    40             e.printStackTrace();
    41         }
    42         
    43         // 根据查询结果判断登录状态
    44         if (user != null) {
    45             // 从ServletContext中取出count进行计算++
    46             ServletContext servletContext = this.getServletContext();
    47             Integer count = (Integer) servletContext.getAttribute("count");
    48             count++;
    49             response.getWriter().write(user.toString() + "login successful" + count);
    50             // 把登录次数存入ServletContext
    51             servletContext.setAttribute("count", count);
    52         } else {
    53             response.getWriter().write("your username or password is wrong");
    54         }
    55     }
    56 
    57     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    58         doGet(request, response);
    59     }
    60 }
  • 相关阅读:
    推荐影视
    《算法设计》一、引言:某些典型的问题
    使用google地图API
    Python导入不同文件夹下模块
    Pycharm之远程编程
    linux之scp
    Photoshop脚本之jpg转换成eps
    win7重新安装win7
    查看修改swap空间大小
    用 EasyBCD 在 Win7/8 中硬盘安装 Ubuntu
  • 原文地址:https://www.cnblogs.com/alphajuns/p/9936463.html
Copyright © 2011-2022 走看看