**
web项目的一般练习
**
1.过滤器用来解决中文字符集乱码,它需要实现Filter接口,并重写doFilter函数
package com.filter;
import javax.servlet.*;
import java.io.IOException;
public class EncodingFilter implements Filter {
public EncodingFilter() {
System.out.println("执行过滤器");
}
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
filterChain.doFilter(request, response);
}
public void destroy() {
}
}
2.处理对数据库的连接操作(用户名或密码按照自己的数据库更改)
package com.util;
import java.sql.*;
/*数据库工具类:
* 1.连接数据库
* 2.增删改查
* 3.执行SQL语句并返回执行结果
* 4.关流
* */
public class DBCoon {
//serverTimezone=UTC设置连接时区,不设置可能会报时区错误
static String url = "jdbc:mysql://localhost:3306/vip05?serverTimezone=UTC" +
"&useUnicode=true&characterEncoding=utf-8";
static String username = "root";
static String password = "123456";
static Connection conn = null;
static ResultSet rs = null;
static PreparedStatement ps = null;
/*连接数据库*/
public static void init() {
try {
/*1.加载驱动获得驱动管理器*/
Class.forName("com.mysql.jdbc.Driver");
/*2.连接数据库*/
conn = DriverManager.getConnection(url, username, password);
System.out.println("数据库连接成功");
} catch (Exception e) {
e.printStackTrace();
System.out.println("数据库连接失败");
}
}
/*查询数据(传递参数)*/
public static ResultSet searchSql(String sql, Object[] args) {
try {
ps = conn.prepareStatement(sql);
for (int j = 0; j < args.length; j++) {
ps.setObject(j + 1, args[j]);
}
rs = ps.executeQuery();
System.out.println("数据查询成功");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("数据查询失败");
}
return rs;
}
/*增删改查数据(传递参数)*/
public static int addUpdDel(String sql, Object[] args) {
int i = 0;
try {
ps = conn.prepareStatement(sql);
for (int j = 0; j < args.length; j++) {
ps.setObject(j + 1, args[j]);
}
i = ps.executeUpdate();
System.out.println("增删改成功");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("增删改失败");
}
return i;
}
/*不传递参数查询所有用户信息*/
public static ResultSet getUsers(String sql) {
try {
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
System.out.println("数据查询成功");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("数据查询失败");
}
return rs;
}
/*关流*/
public static void close() {
try {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
System.out.println("数据流关闭异常");
}
}
}
3.实现对用户登录的操作:
package com.service;
import com.dao.IUserDao;
import com.dao.UserDao;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
/*req.getParameter获取前台输入框的值即input框里的name属性的值*/
String name = req.getParameter("name");
String pwd = req.getParameter("pwd");
IUserDao ud = new UserDao();
if(ud.login(name,pwd)){
/*如果要获取request存放的参数则使用请求转发,路径加不加/都行 */
System.out.println("用户"+name+"登录成功");
/*req.setAttribute向request域中添加名为msg对象object为string类型的信息*/
req.setAttribute("msg","用户"+name+"登录成功");
req.getRequestDispatcher("success.jsp").forward(req, resp);
}else {
/*如果不获取参数则使用重定向到错误页面*/
resp.sendRedirect("error.jsp");
}
}
}
4.创建一个 用来实现用户注册的操作:
public class RegisterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
String pwd = req.getParameter("pwd");
String sex = req.getParameter("sex");
String home = req.getParameter("home");
String info = req.getParameter("info");
//实例化一个对象,组装属性
Users user = new Users();
user.setName(name);
user.setPwd(pwd);
user.setSex(sex);
user.setHome(home);
user.setInfo(info);
IUserDao ud = new UserDao();
if (ud.register(user)) {
System.out.println("用户" + name + "注册成功");
req.setAttribute("msg", "用户" + name + "注册成功");
req.getRequestDispatcher("success.jsp").forward(req, resp);
} else {
resp.sendRedirect("error.jsp");
}
}
}
5.查询全部用户成功,返回数据库中所有用户信息
public class SearchAllServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
IUserDao ud = new UserDao();
List<Users> users = ud.searchAll();
req.setAttribute("users",users);
System.out.println("查询全部用户成功");
req.getRequestDispatcher("/showAll.jsp").forward(req, resp);
}
}
6.数据库中更新用户信息:
public class UpdateServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String id = req.getParameter("id");
int userId = Integer.parseInt(id);
String name = req.getParameter("name");
String pwd = req.getParameter("pwd");
String sex = req.getParameter("sex");
String home = req.getParameter("home");
String info = req.getParameter("info");
IUserDao ud = new UserDao();
if(ud.update(userId, name, pwd, sex, home, info)){
req.getRequestDispatcher("searchAll").forward(req, resp);
}else{
resp.sendRedirect("error.jsp");
}
}
}
7.删除用户信息:
public class DeleteServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String id = req.getParameter("id");
System.out.println("删除的用户id为:"+id);
/*获取到的id是一个引用数据类型即对象,需要变成基本数据类型作为参数传输*/
int userId = Integer.parseInt(id);
/*调用dao层,返回值是一个整形数字*/
IUserDao ud = new UserDao();
/*delete方法的参数为int id,所以必须把从jsp页面获取到的id转换成基本数据类型*/
if(ud.delete(userId)){
/*站内转发:请求转发到searchAll的servlet*/
req.getRequestDispatcher("searchAll").forward(req, resp);
}else{
/*站外转发:重定向到首页*/
resp.sendRedirect("error.jsp");
}
}
}
login.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<form action="login" method="post" style="margin: 0 auto;">
账号:<input type="text" name="name"><br><br>
密码: <input type="password" name="pwd"><br><br>
<input type="submit"value="登录"name="">
<input type="reset"value="重置"><br>
</form>
<a href="register.jsp">新用户注册</a>
</body>
</html>
8.查看所有用户:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>所有用户信息</title>
</head>
<body>
<table width="600" border="1" cellpadding="0" >
<tr>
<th>ID</th>
<th>姓名</th>
<th>性别</th>
<th>密码</th>
<th>家乡</th>
<th>备注</th>
<th>操作</th>
</tr>
<c:forEach var="U" items="${users}">
<form action="update" method="post">
<tr>
<td><input type="text" value="${U.id}" name="id" ></td>
<td><input type="text" value="${U.name}" name="name"></td>
<td><input type="text" value="${U.sex}" name="sex"></td>
<td><input type="text" value="${U.pwd}" name="pwd"></td>
<td><input type="text" value="${U.home}" name="home"></td>
<td><input type="text" value="${U.info}" name="info"></td>
<td><a href="delete?id=${U.id}">删除</a> <input type="submit" value="更新"/></td>
</tr>
</form>
</c:forEach>
</table>
</body>
</html>