目录
11.2 servlet :FindUserByPageServlet
列:使用jstl实现crud、登录、分页、分页模糊查询
1 创建web项目并导包
2 创建数据库
CREATE DATABASE day17; -- 创建数据库
USE day17;
CREATE TABLE USER(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL,
gender VARCHAR(20),
age INT,
address VARCHAR(32),
qq VARCHAR(20),
email VARCHAR(50),
username VARCHAR(20),
PASSWORD VARCHAR(20)
)CHARACTER SET utf8;
INSERT INTO USER VALUES(NULL,'老王','女',55,'广西','15624662','222@qq.com',NULL,NULL);
SELECT COUNT(*) FROM USER
SELECT COUNT(*) FROM USER WHERE 1=1
3 数据库配置文件与工具类
druid.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///day17?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username=root
password=123
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000
cn.lws.demo.util.JDBCUtils
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
public class JDBCUtils {
private static DataSource dataSource;
static {
try {
Properties properties = new Properties();//1.加载配置文件
InputStream inputStream = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");//使用ClassLoader加载配置文件,获取字节输入流
properties.load(inputStream);
dataSource = DruidDataSourceFactory.createDataSource(properties);//2.初始化连接池对象
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接池对象
*/
public static DataSource getDataSource(){
return dataSource;
}
/**
* 获取连接Connection对象
*/
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}
4 用户名密码登录
4.1 CheckCodeServlet 验证码
@WebServlet("/checkCodeServlet")
public class CheckCodeServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
//服务器通知浏览器不要缓存
response.setHeader("pragma","no-cache");
response.setHeader("cache-control","no-cache");
response.setHeader("expires","0");
//在内存中创建一个长80,宽30的图片,默认黑色背景
//参数一:长
//参数二:宽
//参数三:颜色
int width = 80;
int height = 30;
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//获取画笔
Graphics g = image.getGraphics();
//设置画笔颜色为灰色
g.setColor(Color.GRAY);
//填充图片
g.fillRect(0,0, width,height);
//产生4个随机验证码,12Ey
String checkCode = getCheckCode();
//将验证码放入HttpSession中
request.getSession().setAttribute("CHECKCODE_SERVER",checkCode);
//设置画笔颜色为黄色
g.setColor(Color.YELLOW);
//设置字体的小大
g.setFont(new Font("黑体",Font.BOLD,24));
//向图片上写入验证码
g.drawString(checkCode,15,25);
//将内存中的图片输出到浏览器
//参数一:图片对象
//参数二:图片的格式,如PNG,JPG,GIF
//参数三:图片输出到哪里去
ImageIO.write(image,"PNG",response.getOutputStream());
}
/**
* 产生4位随机字符串
*/
private String getCheckCode() {
String base = "0123456789ABCDEFGabcdefg";
int size = base.length();
Random r = new Random();
StringBuffer sb = new StringBuffer();
for(int i=1;i<=4;i++){
//产生0到size-1的随机值
int index = r.nextInt(size);
//在base字符串中获取下标为index的字符
char c = base.charAt(index);
//将c放入到StringBuffer中去
sb.append(c);
}
return sb.toString();
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
}
4.2 LoginServlet登录
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");//1 设置编码
String verifycode = req.getParameter("verifycode");//2 获取用户填写的验证码
HttpSession session = req.getSession();
String checkcode_server = (String)session.getAttribute("CHECKCODE_SERVER");
if(!checkcode_server.equalsIgnoreCase(verifycode)){
//验证码不正确
req.setAttribute("login_msg","你输入的验证码不正确");
req.getRequestDispatcher("/login.jsp").forward(req,resp);//重定向
return;
}
Map<String, String[]> map = req.getParameterMap();
//封装User对象
User user = new User();
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
UserService service=new UserServiceImpl();
User loginUser=service.login(user);
System.out.println(loginUser+"------------------");
//判断是否登录成功
if(loginUser!=null){
//登录成功
session.setAttribute("user",user);
resp.sendRedirect(req.getContextPath()+"/index.jsp");//跳转
}else {
req.setAttribute("login_msg","用户名或密码不正确");
req.getRequestDispatcher("/login.jsp").forward(req,resp);
}
}
4.3 UserServiceImpl
@Override
public User login(User user) {
return dao.findUserByUsernameAndPassword(user.getUsername(), user.getPassword());
}
4.4 UserDaoImpl
public class UserDaoImpl implements UserDao{
private JdbcTemplate jdbcTemplate=new JdbcTemplate(JDBCUtils.getDataSource());
@Override
public List<User> findAll() {
String sql="select * from user";
List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class));
return users;
}
4.5 login.jsp
<div class="container" style="width: 400px;">
<h3 style="text-align: center;">管理员登录</h3>
<form action="${pageContext.request.contextPath}/loginServlet" method="post">
<div class="form-group">
<label for="user">用户名:</label>
<input type="text" name="username" class="form-control" id="user" placeholder="请输入用户名"/>
</div>
<div class="form-group">
<label for="password">密码:</label>
<input type="password" name="password" class="form-control" id="password" placeholder="请输入密码"/>
</div>
<div class="form-inline">
<label for="vcode">验证码:</label>
<input type="text" name="verifycode" class="form-control" id="verifycode" placeholder="请输入验证码" style="width: 120px;"/>
<a href="javascript:refreshCode()">
<img src="${pageContext.request.contextPath}/checkCodeServlet" title="看不清点击刷新" id="vcode"/></a>
</div>
<hr/>
<div class="form-group" style="text-align: center;">
<input class="btn btn btn-primary" type="submit" value="登录">
</div>
</form>
<!-- 出错显示的信息框 -->
<div class="alert alert-warning alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" >
<span>×</span></button>
<strong>${login_msg}</strong>
</div>
</div>
结果:
5 列表查询
5.1 FindUserServlet
@WebServlet("/findUserServlet") public class FindUserServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String id = req.getParameter("id"); //1.获取id UserService service=new UserServiceImpl(); User user=service.findUserById(id);//2.调用Service查询 System.out.println(user+"--------------"); req.setAttribute("user",user); //3.将user存入request req.getRequestDispatcher("/update.jsp").forward(req,resp);//4.转发到update.jsp }
5.2 UserServiceImpl
public class UserServiceImpl implements UserService{ private UserDao dao=new UserDaoImpl(); @Override public List<User> findAll() { return dao.findAll(); }
5.3 UserDaoImpl
public class UserDaoImpl implements UserDao{ private JdbcTemplate jdbcTemplate=new JdbcTemplate(JDBCUtils.getDataSource()); @Override public List<User> findAll() { String sql="select * from user"; List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class)); return users; }
5.4 list.jsp
<table border="1" class="table table-bordered table-hover"> <tr class="success"> <th><input type="checkbox" id="firstCheckbox"></th> <th>编号</th> <th>姓名</th> <th>性别</th> <th>年龄</th> <th>籍贯</th> <th>QQ</th> <th>邮箱</th> <th>操作</th> </tr> <c:forEach items="${user}" var="user" varStatus="s"> <%-- <c:forEach items="${users}" var="user" varStatus="s">--%> <tr>