• jsp之jstl(展示所有商品、重写登录案例)


    jsp之jstl

    jstl:
        jsp标准的标签库语言,apache的,是用来替代java脚本
    使用步骤:
            1.导入jar包 (jstl.jar和standard.jar)
            2.在页面上导入标签库
                <%@taglib prefix="" uri=""%>
                
            例如:  <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    jstl的分类:
       core:核心类库 ★
       fmt:格式化|国际化
       xml:过时了
       sql:过时了
       函数库:很少使用
    core:掌握
            ★c:if
            ★c:forEach
            
            c:set 往域中设置值
            c:choose c:when c:otherwise 分支
    ★c:if 判断
            <c:if test="${el表达式}">满足的时候输出的内容</c:if>
            例如:
                <c:if test="${3>4 }">
                    3大于4
                </c:if>
                <c:if test="${3<=4 }">
                    3不大于4
                </c:if>

     案例--c:if:

      cif.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
       
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>c:if指令</title>
    </head>
    <body>
        <c:if test="${3>4 }">
            3大于4
        </c:if>
        <c:if test="${3<=4 }">
            3小于4
        </c:if>
    </body>
    </html>

      浏览器访问以下url,页面显示:

    c:forEach 循环
            格式1:
                 <c:forEach begin="从那里开始" end="到那里结束" step="步长" var="给变量起个名字" varStatus="循环状态变量">
                    ${i }--${vs.count }--${vs.current }<br>
                 </c:forEach>
                 
                varStatus:用来记录循环的状态
                    常用的属性:
                        count:记录次数
                        current:当前遍历的内容
            例如:
                <c:forEach begin="1" end="20" step="2" var="i" varStatus="vs">
                    ${i }--${vs.count }--${vs.current }<br>
                </c:forEach>

      案例1---forEach格式一:forEach1.jsp

      forEach1.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
       
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>forEach指令</title>
    </head>
    <body>
        <c:forEach begin="1" end="10" var="i" step="1" varStatus="vs" >
            ${i }---${vs.count }---${vs.current }<br>
        </c:forEach>
    </body>
    </html>

      访问页面,显示如下:

    forEach格式2:
                <c:forEach items="${el获取域中的容器}" var="n">
                    ${n }
                </c:forEach>
                
                例如:
                    //遍历list
                    <c:forEach items="${list }" var="n">
                        ${n }
                    </c:forEach>
                    
                    //遍历map
                     <c:forEach items="${map }" var="en">
                        ${en.key }-- ${en.value }<br/>
                      </c:forEach>

      案例forEach格式2:forEach2.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@page import="java.util.*" %>
       
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>forEach指令</title>
    </head>
    <body>
        <%
            //1、往request域中放入一个list集合
            List list = new ArrayList();
            list.add("111");
            list.add("222");
            list.add("333");
            request.setAttribute("list", list);
        
            //2、往request域中放入一个set集合
            Set set = new HashSet();
            set.add("111");
            set.add("222");
            set.add("333");
            request.setAttribute("set", set);
        
            //2、往request域中放入一个map集合
            Map map = new HashMap();
            map.put("username","hjh");
            map.put("password","12345");
            request.setAttribute("map", map);
        %>
        
        <%-- 1、遍历lilst--%>
        <c:forEach items="${list }" var="list">
            ${list }
        </c:forEach>
        
        <hr>
        <%-- 2、遍历set  --%>
        <c:forEach items="${set }" var="set" varStatus="vs">
            ${set }--${vs.count }<br>
        </c:forEach>
        
        <hr>
        <c:forEach items="${map }" var="map">
            ${map.key }--${map.value }<br>
        </c:forEach>
        
    </body>
    </html>

       访问浏览器,页面显示如下:

    扩展:
        c:set 和 c:choose
        函数库:

       案例1---c:set 和 c:choose

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
       
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>c:set指令</title>
    </head>
    <body>
        <%--c:set如果有value属性,标签对中就不能再设置body,不然会报错 --%>
        <c:set var="day" value="2" />
        
        <c:choose>
            <c:when test="${day==1 }">周一</c:when>
            <c:when test="${day==2 }">周二</c:when>
            <c:when test="${day==3 }">周三</c:when>
            <c:otherwise>其他</c:otherwise>
        </c:choose>
    </body>
    </html>

       启动tomcat,浏览器中输入url,回车

     案例2---函数库:

       function.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>  
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>函数库</title>
    </head>
    <body>
        ${fn:toUpperCase("hello") }
    </body>
    </html>

       启动tomcat,浏览器输入以下url,页面内容显示如下:

     案例一:显示所有的商品

       数据库的初始化操作:

    create database hjh;
    use hjh;
    create table product(
        id int primary key auto_increment,
        pname varchar(20),
        price double,
        pdesc varchar(20)
    );
      insert into product values (null,'电视机',3200,'液晶曲面大电视');
      insert into product values (null,'韭菜盒子',3,'味重请小心食用');
      insert into product values (null,'益达',10,'韭菜伴侣');
      insert into product values (null,'十三香',12,'守义牌');

    步骤分析:
        新建一个项目
                导入jar包:
                    驱动 dbutils c3p0 jstl
                导入c3p0配置文件 和工具类
                实体类:
                        private int id;
                        private String pname;
                        private double price;
                        private String pdesc;
        2.index.jsp中添加一个连接
            <a href="/day1201/findAll">展示所有商品</a>
        3.FindAllServlet:
            调用ProductService.findAll() 返回一个集合 List<Product>
            将list放入request域中
            请求转发到product_list.jsp
        4.ProductService.findAll() 调用dao.findAll()
        5.dao.findAll()  使用beanListHandler()
        6.在product_list.jsp展示所有商品
            使用 c:forEach
            使用javabean导航获取里面的数据

       项目结构:

      web.xml配置

     <servlet>
          <servlet-name>FindAllServlet</servlet-name>
          <servlet-class>com.hjh.servlet.FindAllServlet</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>FindAllServlet</servlet-name>
          <url-pattern>/findAll</url-pattern>
      </servlet-mapping>

      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">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
        <a href="${pageContext.request.contextPath  }/findAll">展示所有商品</a>
    </body>
    </html>

      product_list.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>商品展示页面</title>
    </head>
    <body>
        <table border="1px solid #96c2f1" background="#eff7ff" align="center">
            <tr>
                <td>id</td>
                <td>商品名称</td>
                <td>单价</td>
                <td>描述</td>
            </tr>
        <c:forEach items="${list }" var="product">
            <tr>
                <td>${product.id }</td>
                <td>${product.pname }</td>
                <td>${product.price }</td>
                <td>${product.pdesc }</td>
            </tr>
        </c:forEach>    
        </table>
    </body>
    </html>

      c3p0-config.xml

    <c3p0-config>
        <!-- 默认配置,如果没有指定则使用这个配置 -->
        <default-config>
            <!-- 基本配置 -->
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost/hejh?characterEncoding=UTF-8 </property>
            <property name="user">root</property>
            <property name="password">root</property>
        
            <!--扩展配置-->
            <property name="checkoutTimeout">30000</property>
            <property name="idleConnectionTestPeriod">30</property>
            <property name="initialPoolSize">10</property>
            <property name="maxIdleTime">30</property>
            <property name="maxPoolSize">100</property>
            <property name="minPoolSize">10</property>
            <property name="maxStatements">200</property>
        </default-config> 
        
        <!-- 命名的配置 -->
        <named-config name="XXX">
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/xxxx</property>
            <property name="user">root</property>
            <property name="password">1234</property>
            
            <!-- 如果池中数据连接不够时一次增长多少个 -->
            <property name="acquireIncrement">5</property>
            <property name="initialPoolSize">20</property>
            <property name="minPoolSize">10</property>
            <property name="maxPoolSize">40</property>
            <property name="maxStatements">20</property>
            <property name="maxStatementsPerConnection">5</property>
        </named-config>
    </c3p0-config> 

      DataSourseUtils.java

    package com.hjh.util;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import javax.sql.DataSource;
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class DataSourseUtils {
        //建立连接池ds
        private static ComboPooledDataSource ds =     new ComboPooledDataSource();
        
        //获取数据源
        public static DataSource getDataSourse() {
            return ds;
        }
        
        //获取连接
        public static Connection getConnection() throws SQLException {
            return ds.getConnection();
        }
        
        //释放资源
        public static void closeResourse(Connection conn,Statement st) {
            try {
                if(st!=null) {
                    st.close();
                }else {
                    st = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if(conn!=null) {
                    conn.close();
                }else {
                    conn = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        /**释放资源closeResourse(conn,ps)*/
        public static void closeResourse(Connection conn,PreparedStatement ps) {
            try {
                if(ps!=null) {
                    ps.close();
                }else {
                    ps = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if(conn!=null) {
                    conn.close();
                }else {
                    conn = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        /**释放资源closeResourse(rs)*/
        public static void closeResourse(ResultSet rs) {
            try {
                if(rs!=null) {
                    rs.close();
                }else {
                    rs = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }        
    } 
    FindAllServlet.java
    package com.hjh.servlet;
    
    import java.io.IOException;
    import java.sql.SQLException;
    import java.util.List;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.hjh.bean.Product;
    import com.hjh.service.ProductService;
    
    /**
     *展示所有商品
     */
    public class FindAllServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1、调用service,返回list
            List<Product> list = null;;
            try {
                list = new ProductService().findAll();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            
            //2、将list放入request域中
            request.setAttribute("list", list);
            
            //3、请求转发
            request.getRequestDispatcher("/show/product_list.jsp").forward(request, response);
            //response.sendRedirect(request.getContextPath()+"/show/product_list.jsp");
        }
    
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }

      ProductService.java

    package com.hjh.service;
    
    import java.sql.SQLException;
    import java.util.List;
    import com.hjh.dao.ProductDao;
    
    public class ProductService {
    
        public List findAll() throws SQLException {
            return new ProductDao().findAll();
        }
    }

      ProductDao.java

    package com.hjh.dao;
    
    import java.sql.SQLException;
    import java.util.List;
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.BeanListHandler;
    import com.hjh.bean.Product;
    import com.hjh.util.DataSourseUtils;
    
    public class ProductDao {
    
        public List<Product> findAll() throws SQLException {
            //创建queryRunner
            QueryRunner qr = new QueryRunner(DataSourseUtils.getDataSourse());
            //编写sql
            String  sql = "select  *  from product";
            //执行sql
            return  qr.query(sql, new BeanListHandler<Product>(Product.class));
        }
    } 
    Product.java
    package com.hjh.bean;
    
    public class Product {
        private int id;
        private String pname;
        private double price;
        private String pdesc;
        
        public Product() {}
        public Product(int id,String pname,double price,String pdesc) {
            this.id = id;
            this.pname = pname;
            this.price = price;
            this.pdesc  = pdesc;
        }
        
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getPname() {
            return pname;
        }
        public void setPname(String pname) {
            this.pname = pname;
        }
        public double getPrice() {
            return price;
        }
        public void setPrice(double price) {
            this.price = price;
        }
        public String getPdesc() {
            return pdesc;
        }
        public void setPdesc(String pdesc) {
            this.pdesc = pdesc;
        }    
    }

    案例2-重写登录案例

    需求:
        在页面上填写用户名和密码及验证码,点击提交,先校验验证码是否一致.若一致后再去找数据库.顺便记住用户名
    技术:
        表单 
        验证码
        servlet
        request
        session
        cookie
    步骤分析:
        1.数据库和表
            create table user(
                id int primary key auto_increment,
                username varchar(20),
                password varchar(20)
            );
        2.创建一个项目
            包结构
            jar包
            工具类和配置文件
        3.表单 login.jsp
        4.表单提交 loginServlet
            loginServlet:
                获取验证码(从前台传过来和session中)
                    判断两个验证码是否一致
                        若不一致:
                            填写错误信息,请求转发到login.jsp
                        若一致:获取用户名和密码
                            调用userService的getuserbyusernameandpassword 返回值 User user
                            判断user是否为空
                                若为空:填写错误信息,请求转发到login.jsp
                                若不为空:
                                    继续判断是否勾选了记住用户名
                                        若勾选:
                                            创建cookie 将用户名放入cookie写回浏览器
                                    将user对象放入session中
                                    页面重定向 index.jsp 展示 xxx:欢迎回来

      项目结构:

      数据库数据:

       eclipse项目结构:

      web.xml配置:

    <servlet>
          <servlet-name>CodeServlet</servlet-name>
          <servlet-class>com.login.CodeServlet</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>CodeServlet</servlet-name>
          <url-pattern>/code</url-pattern>
      </servlet-mapping>
    <servlet>
          <servlet-name>LoginServlet</servlet-name>
          <servlet-class>com.login.LoginServlet</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>LoginServlet</servlet-name>
          <url-pattern>/login</url-pattern>
      </servlet-mapping>

      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">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
        ${user.username }:欢迎回来!
    </body>
    </html>

      login.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">
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>用户登录</title>
    </head>
    <body>
    <form action="${pageContext.request.contextPath }/login" method="post">
       会员登录:<span width="20px" heigth="30px"><font color="red">${sessionScope.msg }</font></span><br>
        用户名:<input type="text" name="username" value="${cookie.saveName.value }"><br>
        密码:<input type="password" name="password"><br>
      验证码:<input type="text" placeholder="请输入验证码"  name="checkCode"> 
       <img alt="验证码" src="${pageContext.request.contextPath }/code" title="看不清,换一张" onclick="changeImg(this)"><br>
      <input type="submit" value="登录">
      <input type="checkbox" name="saveName" value="ok">记住用户名
    </form>
     
    </body>
    <script type="text/javascript">
        function changeImg(obj){
            //操作src属性
            obj.src="/Jsp/code?i="+Math.random();
        }
    </script>
    </html>
    LoginServlet.java
    package com.login;
    
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import java.io.IOException;
    import java.sql.SQLException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class LoginServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
            //设置编码
            request.setCharacterEncoding("utf-8");
                
            //接收生成和用户输入的2个验证码
            String uCode = request.getParameter("checkCode");//用户输入的验证码
            String sCode = (String) request.getSession().getAttribute("securityCode");//代码生成的验证码
            System.out.println(sCode);
            System.out.println(uCode);
            
            
            //一次性验证码用完以后,页面刷新就会失效,所以要移除
             //request.getSession().removeAttribute("securityCode");
            
             //比较2个验证码是否一致
             if(uCode==null||uCode.trim().length()==0||sCode==null) {
                 //验证码输入或生成有问题,提示后,跳转到login.jsp页面
                 request.getSession().setAttribute("msg", "请重新输入验证码");
                 request.getRequestDispatcher("/login/login.jsp").forward(request, response);
                 return ;
             }else if(uCode.equalsIgnoreCase("sCode")){
                 //验证码不一致
                 request.getSession().setAttribute("msg", "验证码输入错误");
                 request.getRequestDispatcher("/login/login.jsp").forward(request, response);
                 return ;
             }
             
             //获取用户名和密码
             String username = request.getParameter("username");
             String password = request.getParameter("password");
             
             //调用userService  getUserByUsernameAndPassword(),返回user
             User user=null;
            try {
                user = new UserService().getUserByUsernameAndPassword(username,password);
            } catch (SQLException e) {
                e.printStackTrace();
            }
             
             //判断user
             if(user==null) {
                 //若user为空,提示用户,然后跳转到login.jsp
                 request.getSession().setAttribute("msg", "用户名和密码不对");
                 request.getRequestDispatcher("/login/login.jsp").forward(request, response);
                 return;
             }else {
                 //若用户不为空,判断是否记住用户名,将username放入session中
                 if("ok".equals(request.getParameter("saveName"))) {
                     //创建cookie,username不能为中文
                     Cookie cookie  = new Cookie("saveName",username);
                     cookie.setPath(request.getContextPath()+"/");
                     cookie.setMaxAge(3600);
                     //写回浏览器
                     response.addCookie(cookie);
                 }
                 request.getSession().setAttribute("user", user);
             }
            //页面重定向到index.jsp
             request.getRequestDispatcher("/login/index.jsp").forward(request, response);
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
            doGet(request, response);
        }
    }

      CodeServlet.java

    package com.login;
    
    import javax.servlet.http.HttpServlet;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.util.Random;
    import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class CodeServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
    
                // 使用java图形界面技术绘制一张图片
    
                int charNum = 4;
                int width = 30 * 4;
                int height = 30;
    
                // 1. 创建一张内存图片
                BufferedImage bufferedImage = new BufferedImage(width, height,
                        BufferedImage.TYPE_INT_RGB);
    
                // 2.获得绘图对象
                Graphics graphics = bufferedImage.getGraphics();
    
                // 3、绘制背景颜色
                graphics.setColor(Color.YELLOW);
                graphics.fillRect(0, 0, width, height);
    
                // 4、绘制图片边框
                graphics.setColor(Color.BLUE);
                graphics.drawRect(0, 0, width - 1, height - 1);
    
                // 5、输出验证码内容
                graphics.setColor(Color.RED);
                graphics.setFont(new Font("宋体", Font.BOLD, 20));
    
                // 随机输出4个字符
                Graphics2D graphics2d = (Graphics2D) graphics;
                 String s = "ABCDEFGHGKLMNPQRSTUVWXYZ23456789";
                Random random = new Random();
                //session中要用到
                String msg="";
                int x = 5;
                for (int i = 0; i < 4; i++) {
                    int index = random.nextInt(32);
                    String content = String.valueOf(s.charAt(index));
                    msg+=content;
                    double theta = random.nextInt(45) * Math.PI / 180;
                    //让字体扭曲
                    graphics2d.rotate(theta, x, 18);
                    graphics2d.drawString(content, x, 18);
                    graphics2d.rotate(-theta, x, 18);
                    x += 30;
                }
                
                //将验证码放入session域中
                request.getSession().setAttribute("securityCode",msg);
                
                
                // 6、绘制干扰线
                graphics.setColor(Color.GRAY);
                for (int i = 0; i < 5; i++) {
                    int x1 = random.nextInt(width);
                    int x2 = random.nextInt(width);
    
                    int y1 = random.nextInt(height);
                    int y2 = random.nextInt(height);
                    graphics.drawLine(x1, y1, x2, y2);
                }
    
                // 释放资源
                graphics.dispose();
    
                // 图片输出 ImageIO
                ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
            }
        
        public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
            doGet(request, response);
        }
    }

       UserService.java

    package com.login;
    
    import java.sql.SQLException;
    
    public class UserService {
        public User getUserByUsernameAndPassword(String username, String password) throws SQLException {
            
            return new UserDao().getUserByUsernameAndPassword(username, password);
        }
    }
    UserDao.java
    package com.login;
    
    import java.sql.SQLException;
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.BeanHandler;
    import com.hjh.util.DataSourseUtils;
    
    public class UserDao {
    
        public User getUserByUsernameAndPassword(String username, String password) throws SQLException {
            QueryRunner qr = new QueryRunner(DataSourseUtils.getDataSourse());
            String sql = "select * from user where username=? and password=?";
            return  qr.query(sql, new BeanHandler<>(User.class),username,password)  ;
        }
    
    }

      user.java

    package com.login;
    
    public class User {
        
        private String id;
        private String username;
        private String password;
        
        public User() {}
        public User(String id,String username,String password) {
            this.id = id;
            this.username = username;
            this.password = password;
        }
        
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        
        @Override
        public String toString() {
            return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
        }    
    }

      DataSourseUtils.java

    package com.hjh.util;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import javax.sql.DataSource;
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class DataSourseUtils {
        //建立连接池ds
        private static ComboPooledDataSource ds =     new ComboPooledDataSource();
        
        //获取数据源
        public static DataSource getDataSourse() {
            return ds;
        }
        
        //获取连接
        public static Connection getConnection() throws SQLException {
            return ds.getConnection();
        }
        
        //释放资源
        public static void closeResourse(Connection conn,Statement st) {
            try {
                if(st!=null) {
                    st.close();
                }else {
                    st = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if(conn!=null) {
                    conn.close();
                }else {
                    conn = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        /**释放资源closeResourse(conn,ps)*/
        public static void closeResourse(Connection conn,PreparedStatement ps) {
            try {
                if(ps!=null) {
                    ps.close();
                }else {
                    ps = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if(conn!=null) {
                    conn.close();
                }else {
                    conn = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        /**释放资源closeResourse(rs)*/
        public static void closeResourse(ResultSet rs) {
            try {
                if(rs!=null) {
                    rs.close();
                }else {
                    rs = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }     
    } 
    c3p0-config.xml
    <c3p0-config>
        <!-- 默认配置,如果没有指定则使用这个配置 -->
        <default-config>
            <!-- 基本配置 -->
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost/hejh?characterEncoding=UTF-8 </property>
            <property name="user">root</property>
            <property name="password">root</property>
        
            <!--扩展配置-->
            <property name="checkoutTimeout">30000</property>
            <property name="idleConnectionTestPeriod">30</property>
            <property name="initialPoolSize">10</property>
            <property name="maxIdleTime">30</property>
            <property name="maxPoolSize">100</property>
            <property name="minPoolSize">10</property>
            <property name="maxStatements">200</property>
        </default-config> 
        
        
        <!-- 命名的配置 -->
        <named-config name="XXX">
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/xxxx</property>
            <property name="user">root</property>
            <property name="password">1234</property>
           
            <!-- 如果池中数据连接不够时一次增长多少个 -->
            <property name="acquireIncrement">5</property>
            <property name="initialPoolSize">20</property>
            <property name="minPoolSize">10</property>
            <property name="maxPoolSize">40</property>
            <property name="maxStatements">20</property>
            <property name="maxStatementsPerConnection">5</property>
        </named-config>
    </c3p0-config> 
  • 相关阅读:
    2019/10/21 动手动脑
    2019/10/21 课堂测试---向数据库添加新用户
    2019/10/14 如何在静态方法中访问类的实例成员
    2019/10/14 构造函数、默认值、初始化块的优先级。
    2019/10/14 动手动脑---
    2019/9/30 极限测试(1)
    读《程序员的修炼之道------从小工到专家》有感 1
    课堂测试,统计小说<飘>前N个最常出现的单词
    Java课堂 动手动脑
    2019/9/23 课堂测试一 回文
  • 原文地址:https://www.cnblogs.com/hejh/p/11063258.html
Copyright © 2020-2023  润新知