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>

jsp之jstl(展示所有商品、重写登录案例)的更多相关文章

  1. 【jsp】JSTL标签大全详解

    一.JSTL标签介绍 1.什么是JSTL? JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便,它与JSP动作标签一样,只不过它不是 ...

  2. jsp+servlet+mysql 实现简单的银行登录转账功能

    jsp+servlet+mysql 实现简单的银行登录转账功能 [前期的准备] html(登录界面),servlet(处理业务逻辑),jsp(主要实现界面),mysql(实现与数据库的简单的交互)先从 ...

  3. SSM框架之关于使用JSP作为视图展示问题解决方案

    JSP作为视图层展示数据,已经有很长一段时间了,不管是在校学习还是企业工作,总会或多或少接触这个.特别是对于一些传统中小型或者一些几年前的企业而言,有很多使用JSP作为视图展示层. JSP本质是就是S ...

  4. JavaEE之动态页面技术(JSP/EL/JSTL)

    动态页面技术(JSP/EL/JSTL) JSP技术 jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%= ...

  5. JavaWeb之JSP & EL & JSTL

    JSP & EL & JSTL JSP Java Server Page 什么是JSP 从用户角度看,就是一个网页.从程序员角度看,就是一个Java类,它继承Servlet,所以可以说 ...

  6. JSP、JSTL标签、EL表达式

    JSP.JSTL标签.EL表达式 1.EL表达式:${} 功能: 获取数据 执行运算 获取web开发的常用对象 2.JSP标签 例如: jsp标签还有很多功能,这里只列举出一种. <jsp:fo ...

  7. 基于Struts2框架实现登录案例 之 使用Struts2标签库简化表单+继承ActionSupport完成输入交验

    一,使用Struts2标签库简化表单 在文章[基于Struts2框架实现登录案例]的基础上,通过使用Struts标签库可以简化登录页面login2.jsp <%@ page language=& ...

  8. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  9. 简单登录案例(SharedPreferences存储账户信息)&联网请求图片并下载到SD卡(文件外部存储)

    新人刚学习Android两周,写一个随笔算是对两周学习成果的巩固,不足之处欢迎各位建议和完善. 这次写的是一个简单登录案例,大概功能如下: 注册的账户信息用SharedPreferences存储: 登 ...

随机推荐

  1. 关于判断是安卓还是ios环境跳转下载页

    H5项目中判断是安卓还是iOS手机就跳转到不同的下载页,项目如下https://github.com/JserJser/dailyPush/tree/master/daily6/H5 这个项目里面我比 ...

  2. HZOI20190903模拟36 字符,蛋糕,游戏

    题面:https://www.cnblogs.com/Juve/articles/11461528.html A:字符 暴力模拟一下,细节很多,但是暴力思路都不大一样 先枚举循环节长度,然后处理一个b ...

  3. https://blog.csdn.net/u012235003/article/details/54576737

    https://blog.csdn.net/u012235003/article/details/54576737

  4. ROS多线程编程

    int main(int argc, char **argv) { ros::init(argc, argv, "multi_sub"); multiThreadListener ...

  5. 19-10-24-J-快乐?

    向未来的大家发送祝福(不接受的请自动忽略): 祝大家程序员节快乐! 好了. ZJ一下 额. 考场上差点死了. 码1h后,T1还没过大样例. 我×××. 后来发现是自己××了. T2T3丢暴力. 比咕的 ...

  6. light oj 1071 dp(吃金币升级版)

    #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> ...

  7. 《机器学习及实践--从零开始通往Kaggle竞赛之路》

    <机器学习及实践--从零开始通往Kaggle竞赛之路> 在开始说之前一个很重要的Tip:电脑至少要求是64位的,这是我的痛. 断断续续花了个把月的时间把这本书过了一遍.这是一本非常适合基于 ...

  8. linux学习(三)-----linux用户管理、实用指令

    用户管理 基本介绍 说明: 1.Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向 系统管理员申请一个账号,然后以这个账号的身份进入系统. 2.Linux 的用户 ...

  9. linux学习(一)-----vm、centos安装

    安装vm和Centos 1)先安装 virtual machine ,vm12 2)再安装 Linux (CentOS 6.8) 3)原理示意图,这里我们画图说明一下 VM 和 CentOS 的关系. ...

  10. 警告: [SetPropertiesRule]{Context/Loader} Setting property 'useSystemClassLoaderAsParent' to 'false' did not find a matching property.

    警告: [SetPropertiesRule]{Context/Loader} Setting property 'useSystemClassLoaderAsParent' to 'false' d ...