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

时间: 2024-08-26 17:48:48

Servlet以及一个简单的登录案例的相关文章

利用servlet和html写一个简单的登录

写一个简单的html登录页面,然后利用servlet来进行验证账号密码. html代码: <!DOCTYPE html> <html> <title>登陆页面</title> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action = &

使用struts做一个简单的登录跳转

[java web]第一节课 3.7号作业 做一个非常简单的登录跳转界面,要求: 需要一个登陆界面用于接受用户输入的信息 输入姓名"wei"如果正确则跳转到"index.jsp"页面显示"welcome" 如果输入的姓名不是"wei"则跳转到"login.jsp"页面重新输入. 1.创建一个web project命名为"Login1"版本用JavaEE 5 version:1.7 2.右

初识Jsp,JavaBean,Servlet以及一个简单mvc模式的登录界面

1:JSP JSP的基本语法:指令标识page,include,taglib;page指令标识常用的属性包含Language用来定义要使用的脚本语言:contentType定义JSP字符的编码和页面响应的MIME类型:pageEncoding:jsp页面的字符编码: include指令<%@ include file="path"%>静态包含,先包含,后编译处理: <jsp:include page="要包含的文件">  动态包含,先编译处理

node.js 实现一个简单的登录拦截器

拦截器在web开发中随处可见,比如站点的管理后台,不说所有人都能进入,所以就需要做一个拦截器并友好的跳转到提示页. 下面我们简单实现一种,判断用户是否登录成功,登录不成功的用户自动重定向到登录页面. 首先我们实现一个过滤器 exports.checkAuth=function(req, res, next) {     var token = req.signedCookies.token;     if (token && req.session.user && req.

6. Swift 基于Xmpp和openfire实现一个简单的登录注册

1. 基本步骤:首先导入Xmpp框架,配置环境 ->由于我们使用的是OC的Xmpp框架,再进行Swift开发时需要进行桥接. 具体方法就是创建一个基于c的.h的头文件,然后将我们需要编译OC的语言的头文件包含这个.h文件中: ->然后导入如下库文件,在头头文件选择路径中 如上图, 设置header Search paths 设置头文件的搜索路径,导入libxml2库文件相对路径,***注意前面是 usr .以前第一次装的时候写成user找了半个多小时 -> 然后创建界面,随便弄两个框框和

Struts+spring+Hibernate 制作一个简单的登录验证

index.jsp <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"

go语言实现一个简单的登录注册web小程序

最近学习golang也有一段时间了,基础差不多学了个大概,因为本人是java程序员,所以对web更感兴趣.根据<go web编程>中的例子改编一个更简单的例子,供新手参考,废话不多说,上菜: 这个例子使用到了beego框架和beedb框架,如果是go新手beego和beedb得自己去google下载安装. 目录结构: index.go package controllers import ( "fmt" "github.com/astaxie/beego"

Flutter-实现一个简单的登录功能

登录逻辑判断 1.缓存token,使用的是shared_preferences 最新版本(https://pub.flutter-io.cn/packages/shared_preferences) shared_preferences: ^0.5.6 简单封装一层 class MTCacheTool { // 存储token static const String keyToken = 'xxxxxxxxxTK'; // 存储用户名 static const String keyUserNam

用Python selenium+webdriver的一个简单的登录自动化测试--豆丁网登录测试

#coding=utf-8 from selenium import webdriver #from selenium.webdriver.remote import switch_to #from selenium.webdriver.common import alert #import unittest  import time,os def users_zidian():  #用户名用例用一个字典实现参数化调用#     users={'zhengshuheng':'123456','[