zoukankan      html  css  js  c++  java
  • Servlet以及一个简单的登录案例

    1.servlet的概述

      就是一个运行在web服务器上的小的java程序,用来接收和响应从客户端发送过来的请求,通常使用http协议

      就是sun公司提供的一个动态网页开发技术

      作用:用来处理从客户端浏览器发送的请求,并且可以对请求作出响应

      编写类实现servlet:

    public class Demo1 implements Servlet{
    
        @Override
        /**
         * 为用户处理请求和响应的方法.
         */
        public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
            res.getWriter().println("Hello Servlet...");
        }
    ...
    }

    servlet的配置:

     <servlet>
          <!-- Servlet的名称 -->
          <servlet-name>Demo1</servlet-name>
          <!-- SErvlet的全路径 -->
          <servlet-class>com.learn.servlet.Demo1</servlet-class>
      </servlet>
      
      <!-- Servlet的映射 -->
      <servlet-mapping>
          <!-- Servlet的名称 -->
          <servlet-name>Demo1</servlet-name>
          <!-- Servlet的访问路径 -->
          <url-pattern>/Demo1</url-pattern>
      </servlet-mapping>

    访问路径:

    http://localhost:8080/day09/Demo1

      servlet接收参数的方法
    String getParameter(String name); 用于接收一个名称对应一个值的参数

    String [] getParameterValues(String name) ;用于接收一个名称对应多个值的参数

    Map getParamterMap();  用于接收表单中的所有的参数,map中的key是表示表单提交的参数名称,map的value是提交参数的值

    Servlet的实现关系

    Servlet         :接口

       |

    GenericServlet  :通用的Servlet

       |

    HttpServlet     :HttpServlet

    2.使用servlet完成一个用户登录的案例

      需求:登录的链接,点击登录连接,可以跳转到登录的页面,在登录的页面中输入用户名和密码点击登录完成登录

    创建数据库和表

    create database demo;
    use demo;
    create table user(
        id int primary key auto_increment,
        username varchar(20),
        password varchar(20)
    );
    insert into user values (null,'张三','111');
    insert into user values (null,'李四','111');

    引入jar包

      

    * mysql的数据库的驱动包

    * c3p0连接池的jar包

    * dbutils的包

    编写servle

      servlet层

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //设置编码表
            response.setContentType("text/html;charset=utf-8");
            //获取表单数据
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            //调用业务层
            UserService us = new UserService();
            
            try {
                //判断从数据库中查找的 user是否为空
                User user = us.login(username,password);
                System.out.println("从数据库中获取的数据为"+user);
                if(user == null) {
                    response.getWriter().write("登录失败!");
                    //结束方法后面不再执行
                    return;
                }
                //登录成功时
                response.getWriter().write("登录成功,3秒后跳转");
                response.sendRedirect(request.getContextPath()+"/LoginDemo/demo3-login/refresh.html");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }

    service层

    //调用dao层
        UserDao dao = new UserDao();
        public User login(String username, String password) throws SQLException {
            User user = dao.login(username,password);
            return user;
        }

    dao层

    //初始化连接池
        QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
        public User login(String username, String password) throws SQLException {
            //准备sql语句
            String sql = "select * from user where username=? and password=?";
            //设置占位符
            Object [] params = {username,password};
            //执行sql语句
            User user = qr.query(sql, new BeanHandler<User>(User.class), params);
            System.out.println("dao层的user为"+user);
            return user;
        }

    utils层

    private static final ComboPooledDataSource DATA_SOURCE =new ComboPooledDataSource();
        /**
         * 获得连接的方法
         */
        public static Connection getConnection(){
            Connection conn = null;
            try {
                conn = DATA_SOURCE.getConnection();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return conn;
        }
        
        public static DataSource getDataSource(){
            return DATA_SOURCE;
        }
        

    c3p0配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
      <default-config>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/demo</property>
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="initialPoolSize">10</property>
        <property name="maxIdleTime">30</property>
        <property name="maxPoolSize">100</property>
        <property name="minPoolSize">10</property>
      </default-config>
    </c3p0-config>

    3.servlet的声明周期

      指的是servlet从创建到销毁的过程

    何时创建:用户第一次访问servlet创建servlet实例

    何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候

      用户第一次访问servlet的时候,服务器会创建一个servlet的实例,那么servlet中init方法就会执行.任何一次请求服务器都会创建一个新的线程访问servlet中的service方法,在service方法内部根据请求的方式的不同调用do...方法,当servlet中服务器停止,就会调用destory方法

    4.servlet的相关配置

      servlet默认是在第一次访问 的时候创建的,现在让servlet在服务器启动的时候创建好

    <load-on-startup>2</load-on-startup>  --- 传入正整数,整数越小,被创建的优先级就越高.

      url-pattern的配置

     

    1.完全路径匹配    :以 / 开始              例如:    /ServletDemo1,/aaa/ServletDemo2

    2.目录匹配       :以 / 开始 需要以 * 结束. 例如: /* ,/aaa/* ,/aaa/bbb/*

    3.扩展名匹配     :不能以 / 开始 以 * 开始的. 例如: *.do , *.action

    ***** 错误的写法  : /*.do

     

  • 相关阅读:
    《程序设计与数据结构》 课程教学
    ISO GPS定位,坐标转换以及如何显示
    iOS_生成pem推送证书(用于百度云推送)
    iOS 基础-----关于UIView 的 frame 与 bounds
    IOS开发之UIScrollVIew运用
    ios 精简日历
    IOS UIView自动调整尺寸
    IOS 实现录音PCM转MP3格式(边录音边转码)
    IOS开发UIImage中stretchableImageWithLeftCapWidth方法的解释
    ios Coredata 关联 UITableView 数据自动更新
  • 原文地址:https://www.cnblogs.com/learnjfm/p/6903313.html
Copyright © 2011-2022 走看看