drop database if exists liuyan;
create database liuyan;

use liuyan;

create table user_inf
(
    id int auto_increment primary key,
    name varchar(255),
    pass varchar(255)
);

insert into user_inf
values(null,'crazyit','123');
insert into user_inf
values(null,'tiger','123');
<%--
网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
author  yeeku.H.lee kongyeeku@163.com
version  1.0
Copyright (C), 2001-2016, yeeku.H.Lee
This program is protected by copyright laws.
Program Name:
Date: 
--%>

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<!DOCtype html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title> 收集参数的表单页 </title>
    <meta name="website" content="http://www.crazyit.org" />
</head>
<body>
<form id="form1" method="post" action="aa">
用户名:<br/>
<input type="text" name="name"><hr/>
性别:<br/>
男:<input type="radio" name="gender" value="男">
女:<input type="radio" name="gender" value="女"><hr/>
喜欢的颜色:<br/>
红:<input type="checkbox" name="color" value="红">
绿:<input type="checkbox" name="color" value="绿">
蓝:<input type="checkbox" name="color" value="蓝"><hr/>
来自的国家:<br/>
<select name="country">
    <option value="中国">中国</option>
    <option value="美国">美国</option>
    <option value="俄罗斯">俄罗斯</option>
</select><hr/>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
</html>
<%--
网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
author  yeeku.H.lee kongyeeku@163.com
version  1.0
Copyright (C), 2001-2016, yeeku.H.Lee
This program is protected by copyright laws.
Program Name:
Date: 
--%>

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title> 用户登录 </title>
    <meta name="website" content="http://www.crazyit.org" />
</head>
<body>
<!-- 输出出错提示 -->
<span style="color:red;font-weight:bold">
<%
if (request.getAttribute("err") != null)
{
    out.println(request.getAttribute("err") + "<br/>");
}
%>
</span>
请输入用户名和密码:
<!-- 登录表单,该表单提交到一个Servlet -->
<form id="login" method="post" action="login">
用户名:<input type="text" name="username"/><br/>&nbsp;&nbsp码:<input type="password" name="pass"/><br/>
<input type="submit" value="登录"/><br/>
</form>
</body>
</html>
<%--
网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
author  yeeku.H.lee kongyeeku@163.com
version  1.0
Copyright (C), 2001-2016, yeeku.H.Lee
This program is protected by copyright laws.
Program Name:
Date: 
--%>

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title> 欢迎页面 </title>
    <meta name="website" content="http://www.crazyit.org" />
</head>
<body>
<h3>欢迎登录</h3>
<%=session.getAttribute("name")%>,欢迎登录!
</body>
</html>
<?xml version="1.0" encoding="GBK"?>
<!-- 定义生成文件的project根元素,默认的target为空 -->
<project name="web" basedir="." default="">
    <!-- 定义三个简单属性 -->
    <property name="src" value="src"/>
    <property name="classes" value="classes"/>
    <!-- 定义一组文件和目录集 -->
    <path id="classpath">
        <fileset dir="lib">
            <include name="*.jar"/>
        </fileset>
        <pathelement path="${classes}"/>
    </path>
    <!-- 定义compile target,用于编译Java源文件 -->
    <target name="compile" description="编译Java源文件">
        <!-- 先删除classes属性所代表的文件夹 -->
        <delete dir="${classes}"/>
        <!-- 创建classes属性所代表的文件夹 -->
        <mkdir dir="${classes}"/>
        <!-- 编译Java文件,编译后的class文件放到classes属性所代表的文件夹内 -->
        <javac destdir="${classes}" debug="true" includeantruntime="yes"
            deprecation="false" optimize="false" failonerror="true">
            <!-- 指定需要编译的Java文件所在的位置 -->
            <src path="${src}"/>
            <!-- 指定编译Java文件所需要第三方类库所在的位置 -->
            <classpath refid="classpath"/>
        </javac>
    </target>
</project>
<?xml version="1.0" encoding="GBK"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    version="3.1">

    <!-- 配置Servlet的名字 -->
    <servlet>
        <!-- 指定Servlet的名字,
            相当于指定@WebServlet的name属性 -->
        <servlet-name>firstServlet</servlet-name>
        <!-- 指定Servlet的实现类 -->
        <servlet-class>lee.FirstServlet</servlet-class>
    </servlet>
    <!-- 配置Servlet的URL -->
    <servlet-mapping>
        <!-- 指定Servlet的名字 -->
        <servlet-name>firstServlet</servlet-name>
        <!-- 指定Servlet映射的URL地址,
            相当于指定@WebServlet的urlPatterns属性-->
        <url-pattern>/aa</url-pattern>
    </servlet-mapping>

    <servlet>
        <!-- Servlet名 -->
        <servlet-name>timerServlet</servlet-name>
        <!-- Servlet的实现类 -->
        <servlet-class>lee.TimerServlet</servlet-class>
        <!-- 配置应用启动时,创建Servlet实例
            ,相当于指定@WebServlet的loadOnStartup属性-->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <!-- 配置Servlet名 -->
        <servlet-name>testServlet</servlet-name>
        <!-- 指定Servlet的实现类 -->
        <servlet-class>lee.TestServlet</servlet-class>
        <!-- 配置Servlet的初始化参数:driver -->
        <init-param>
            <param-name>driver</param-name>
            <param-value>com.mysql.jdbc.Driver</param-value>
        </init-param>
        <!-- 配置Servlet的初始化参数:url -->
        <init-param>
            <param-name>url</param-name>
            <param-value>jdbc:mysql://localhost:3306/javaee</param-value>
        </init-param>
        <!-- 配置Servlet的初始化参数:user -->
        <init-param>
            <param-name>user</param-name>
            <param-value>root</param-value>
        </init-param>
        <!-- 配置Servlet的初始化参数:pass -->
        <init-param>
            <param-name>pass</param-name>
            <param-value>32147</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <!-- 确定Servlet名 -->
        <servlet-name>testServlet</servlet-name>
        <!-- 配置Servlet映射的URL -->
        <url-pattern>/testServlet</url-pattern>
    </servlet-mapping>

</web-app>
package lee;

import java.sql.*;

/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class DbDao
{
    private Connection conn;
    private String driver;
    private String url;
    private String username;
    private String pass;
    public DbDao()
    {
    }
    public DbDao(String driver , String url
        , String username , String pass)
    {
        this.driver = driver;
        this.url = url;
        this.username = username;
        this.pass = pass;
    }
    // 下面是各个成员属性的setter和getter方法
    public void setDriver(String driver) {
        this.driver = driver;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public void setPass(String pass) {
        this.pass = pass;
    }
    public String getDriver() {
        return (this.driver);
    }
    public String getUrl() {
        return (this.url);
    }
    public String getUsername() {
        return (this.username);
    }
    public String getPass() {
        return (this.pass);
    }
    // 获取数据库连接
    public Connection getConnection() throws Exception
    {
        if (conn == null)
        {
            Class.forName(this.driver);
            conn = DriverManager.getConnection(url,username,
                this. pass);
        }
        return conn;
    }
    // 插入记录
    public boolean insert(String sql , Object... args)
        throws Exception
    {
        PreparedStatement pstmt = getConnection().prepareStatement(sql);
        for (int i = 0; i < args.length ; i++ )
        {
            pstmt.setObject( i + 1 , args[i]);
        }
        if (pstmt.executeUpdate() != 1)
        {
            return false;
        }
        pstmt.close();
        return true;
    }
    // 执行查询
    public ResultSet query(String sql , Object... args)
        throws Exception
    {
        PreparedStatement pstmt = getConnection().prepareStatement(sql);
        for (int i = 0; i < args.length ; i++ )
        {
            pstmt.setObject( i + 1 , args[i]);
        }
        return pstmt.executeQuery();
    }
    // 执行修改
    public void modify(String sql , Object... args)
        throws Exception
    {
        PreparedStatement pstmt = getConnection().prepareStatement(sql);
        for (int i = 0; i < args.length ; i++ )
        {
            pstmt.setObject( i + 1 , args[i]);
        }
        pstmt.executeUpdate();
        pstmt.close();
    }
    // 关闭数据库连接的方法
    public void closeConn()
        throws Exception
    {
        if (conn != null && !conn.isClosed())
        {
            conn.close();
        }
    }
}
package lee;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

import java.io.*;

/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
// Servlet必须继承HttpServlet类
@WebServlet(name="firstServlet"
    , urlPatterns={"/firstServlet"})
public class FirstServlet extends HttpServlet
{
    // 客户端的响应方法,使用该方法可以响应客户端所有类型的请求
    public void service(HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException,java.io.IOException
    {
        // 设置解码方式
        request.setCharacterEncoding("GBK");
        response.setContentType("text/html;charSet=GBK");
        // 获取name的请求参数值
        String name = request.getParameter("name");
        // 获取gender的请求参数值
        String gender = request.getParameter("gender");
        // 获取color的请求参数值
        String[] color = request.getParameterValues("color");
        // 获取country的请求参数值
        String national = request.getParameter("country");
        // 获取页面输出流
        PrintStream out = new PrintStream(response.getOutputStream());
        //输出HTML页面标签
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet测试</title>");
        out.println("</head>");
        out.println("<body>");
        // 输出请求参数的值:name
        out.println("您的名字:" + name + "<hr/>");
        // 输出请求参数的值:gender
        out.println("您的性别:" + gender + "<hr/>");
        // 输出请求参数的值:color
        out.println("您喜欢的颜色:");
        for(String c : color)
        {
            out.println(c + " ");
        }
        out.println("<hr/>");
        out.println("您喜欢的颜色:");
        // 输出请求参数的值:national
        out.println("您来自的国家:" + national + "<hr/>");
        out.println("</body>");
        out.println("</html>");
    }
}
package lee;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

import java.io.PrintWriter;
import java.io.IOException;

import java.sql.*;

/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
@WebServlet(name="login"
    , urlPatterns={"/login"})
public class LoginServlet extends HttpServlet
{
    // 响应客户端请求的方法
    public void service(HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException,java.io.IOException
    {
        String errMsg = "";
        // Servlet本身并不输出响应到客户端,因此必须将请求转发到视图页面
        RequestDispatcher rd;
        // 获取请求参数
        String username = request.getParameter("username");
        String pass = request.getParameter("pass");
        try
        {
            // Servlet本身并不执行任何的业务逻辑处理,它调用JavaBean处理用户请求
            DbDao dd = new DbDao("com.mysql.jdbc.Driver",
                "jdbc:mysql://localhost:3306/liuyan","root","32147");
            // 查询结果集
            ResultSet rs = dd.query("select pass from user_inf"
                + " where name = ?", username);
            if (rs.next())
            {
                // 用户名和密码匹配
                if (rs.getString("pass").equals(pass))
                {
                    // 获取session对象
                    HttpSession session = request.getSession(true);
                    // 设置session属性,跟踪用户会话状态
                    session.setAttribute("name" , username);
                    // 获取转发对象
                    rd = request.getRequestDispatcher("/welcome.jsp");
                    // 转发请求
                    rd.forward(request,response);
                }
                else
                {
                    // 用户名和密码不匹配时
                    errMsg += "您的用户名密码不符合,请重新输入";
                }
            }
            else
            {
                // 用户名不存在时
                errMsg += "您的用户名不存在,请先注册";
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        // 如果出错,转发到重新登录
        if (errMsg != null && !errMsg.equals(""))
        {
            rd = request.getRequestDispatcher("/login.jsp");
            request.setAttribute("err" , errMsg);
            rd.forward(request,response);
        }
    }
}
package lee;

import java.sql.*;

import javax.servlet.http.*;
import javax.servlet.*;
import javax.servlet.annotation.*;
import java.io.*;

/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
@WebServlet(name="testServlet"
    , urlPatterns={"/testServlet"}
    , initParams={
        @WebInitParam(name="driver", value="com.mysql.jdbc.Driver"),
        @WebInitParam(name="url", value="jdbc:mysql://localhost:3306/javaee"),
        @WebInitParam(name="user", value="root"),
        @WebInitParam(name="pass", value="32147")})
public class TestServlet extends HttpServlet
{
    // 重写init方法
    public void init(ServletConfig config)
        throws ServletException
    {
        // 重写该方法,应该首先调用父类的init()方法
        super.init(config);
    }
    // 响应客户端请求的方法
    public void service(HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException,java.io.IOException
    {
        try
        {
            // 获取ServletConfig对象
            ServletConfig config = getServletConfig();
            // 通过ServletConfig对象获取配置参数:dirver
            String driver = config.getInitParameter("driver");
            // 通过ServletConfig对象获取配置参数:url
            String url = config.getInitParameter("url");
            // 通过ServletConfig对象获取配置参数:user
            String user = config.getInitParameter("user");
            // 通过ServletConfig对象获取配置参数:pass
            String pass = config.getInitParameter("pass");
            // 注册驱动
            Class.forName(driver);
            // 获取数据库连接
            Connection conn = DriverManager.getConnection(url,user,pass);
            // 创建Statement对象
            Statement stmt = conn.createStatement();
            // 执行查询,获取ResuletSet对象
            ResultSet rs = stmt.executeQuery("select * from news_inf");
            response.setContentType("text/html;charSet=gbk");
            // 获取页面输出流
            PrintStream out = new PrintStream(response.getOutputStream());
            // 输出HTML标签
            out.println("<html>");
            out.println("<head>");
            out.println("<title>访问Servlet初始化参数测试</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<table bgcolor=\"#9999dd\" border=\"1\"" +
                "width=\"480\">");
            // 遍历结果集
            while(rs.next())
            {
                // 输出结果集内容
                out.println("<tr>");
                out.println("<td>" + rs.getString(1) + "</td>");
                out.println("<td>" + rs.getString(2) + "</td>");
                out.println("</tr>");
            }
            out.println("</table>");
            out.println("</body>");
            out.println("</html>");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
package lee;

import javax.servlet.http.*;
import javax.servlet.*;
import javax.servlet.annotation.*;

import javax.swing.*;
import java.awt.event.*;
import java.util.Date;

/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */

@WebServlet(loadOnStartup=1)
public class TimerServlet extends HttpServlet
{
    public void init(ServletConfig config)throws ServletException
    {
        super.init(config);
        Timer t = new Timer(1000,new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                System.out.println(new Date());
            }
        });
        t.start();
    }
}