
解决服务端接收数据乱码问题。服务器默认采用 ISO8859-1 编码响应内容。
// 1req.setCharacterEncoding("utf-8");// 2byte[] bytes = req.getParameter("username").getBytes("iso-8859-1");System.out.println("username:" + new String(bytes,0,bytes.length,"utf-8"));
解决服务端发送到客户端数据乱码问题。
// 1 text/html,响应数据类型;resp.setContentType("text/html;charset=utf8;");// 2resp.setCharacterEncoding("utf-8");resp.setHeader("Content-type","text/html;charset=utf8");
单元测试。
src 同级目录创建 test 文件夹,右键 -> Mark Directory as ->Sources Root,文件名采用测试的模块名 + Test。
转发。转发的作用在服务器端,将请求发送给服务器上的其他资源,以共同完成一次请求的处理。使用forward跳转时,是在服务器内部跳转,地址栏不发生变化,属于同一次请求。
request.getRequestDispatcher(“/目标URL-pattern”).forward(request, response);// 存数据request.setAttribute(key,value);// 取数据request.getAttribute(key);
重定向。重定向作用在客户端,客户端将请求发送给服务器后,服务器响应给客户端一个新的请求地址,客户端重新发送新请求。
重定向可以指向任何的资源,包括当前应用程序中的其他资源、同一个站点上的其他应用程序中的资源、其他站点的资源。
response.sendRedirect(“目标URI”);// 带数据response.sendRedirect(“目标URI?username=tom&ps=123”);// 接收数据request.getParameter(“username”);
servlet 用户管理系统。
目录结构。


public class AddUserServlet extends HttpServlet {private IUserService userService = new UserServiceImpl();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf8");String username = req.getParameter("username");String password = req.getParameter("password");String age = req.getParameter("age");String sex = req.getParameter("sex");User user = new User();user.setUsername(username);user.setPassword(password);user.setAge(Integer.valueOf(age));user.setSex(Integer.valueOf(sex));int i = userService.AddUser(user);if (i == 0) {resp.getWriter().write("添加失败");} else {resp.getWriter().write("添加成功");resp.getWriter().write("<br><a href=\"GetUserListServlet\">查询所有用户</a>");}}}public class DeleteUserServlet extends HttpServlet {private IUserService userService = new UserServiceImpl();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf8");String username = req.getParameter("username");int i = userService.DeleteUser(username);if (i == 0) {resp.getWriter().write("删除失败");} else {resp.getWriter().write("删除成功");resp.getWriter().write("<br><a href=\"GetUserListServlet\">查询所有用户</a>");}}}public class GetUserListServlet extends HttpServlet {private IUserService userService = new UserServiceImpl();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf8");System.out.println("查询所有的用户:" + req);List<User> userList = userService.getUserList();// 转发数据req.setAttribute("userList",userList);// 转发对象req.getRequestDispatcher("ViewUserServlet").forward(req,resp);// 重定向 最好不带参数resp.sendRedirect("ViewUserServlet?username=zs&password=123");resp.sendRedirect("http://www.baidu.com");}}public class LoginUserServlet extends HttpServlet {private IUserService userService = new UserServiceImpl();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf8");String username = req.getParameter("username");String password = req.getParameter("password");User user = userService.login(username, password);if (user == null) {resp.getWriter().write("用户名或密码错误..");} else {resp.getWriter().write("欢迎【" + req.getRemoteAddr() + username + "】登陆");resp.getWriter().write("<br><a href=\"GetUserListServlet\">查询所有用户</a>");}}}public class SelectUserServlet extends HttpServlet {private IUserService userService = new UserServiceImpl();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf8");System.out.println("查询所有的用户:" + req);String username = req.getParameter("username");User user = userService.SelectUser(username);StringBuffer buffer = new StringBuffer();buffer.append("<html>");buffer.append("<body>");buffer.append("<table border=\"1\">");buffer.append("<tr>");buffer.append("<th>ID</th>");buffer.append("<th>用户名</th>");buffer.append("<th>密码</th>");buffer.append("<th>年龄</th>");buffer.append("<th>性别</th>");buffer.append("</tr>");if (user != null) {buffer.append("<tr>");buffer.append("<td>" + user.getId() + "</td>");buffer.append("<td>" + user.getUsername() + "</td>");buffer.append("<td>" + user.getPassword() + "</td>");buffer.append("<td>" + user.getAge() + "</td>");buffer.append("<td>" + user.getSex() + "</td>");buffer.append("</tr>");}buffer.append("</table>");buffer.append("</body>");buffer.append("</html>");buffer.append("<a href=\"GetUserListServlet\">查询所有用户</a>");resp.getWriter().write(buffer.toString());}}public class UpdateUserServlet extends HttpServlet {private IUserService userService = new UserServiceImpl();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf8");String username = req.getParameter("username");String password = req.getParameter("password");String age = req.getParameter("age");String sex = req.getParameter("sex");User user = new User();user.setUsername(username);user.setPassword(password);user.setAge(Integer.valueOf(age));user.setSex(Integer.valueOf(sex));int i = userService.UpdateUser(user);if (i == 0) {resp.getWriter().write("更新失败");} else {resp.getWriter().write("更新成功");resp.getWriter().write("<br><a href=\"GetUserListServlet\">查询所有用户</a>");}}}public class ViewUserServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("展示所有的用户:" + req);resp.setContentType("text/html;charset=utf8");System.out.println("username:" + req.getParameter("username"));List<User> userList = (List<User>) req.getAttribute("userList");StringBuffer buffer = new StringBuffer();buffer.append("<html>");buffer.append("<body>");buffer.append("<table border=\"1\">");buffer.append("<tr>");buffer.append("<th>ID</th>");buffer.append("<th>用户名</th>");buffer.append("<th>密码</th>");buffer.append("<th>年龄</th>");buffer.append("<th>性别</th>");buffer.append("</tr>");if (userList != null) {for (User user: userList) {buffer.append("<tr>");buffer.append("<td>" + user.getId() + "</td>");buffer.append("<td>" + user.getUsername() + "</td>");buffer.append("<td>" + user.getPassword() + "</td>");buffer.append("<td>" + user.getAge() + "</td>");buffer.append("<td>" + user.getSex() + "</td>");buffer.append("</tr>");}}buffer.append("</table>");buffer.append("</body>");buffer.append("</html>");resp.getWriter().write(buffer.toString());}}
public interface IUserDao {public User login(String username);public List<User> getUserList();public int AddUser(User user);public int DeleteUser(String name);public int UpdateUser(User user);public User SelectUser(String name);}public class UserDaoImpl implements IUserDao {@Overridepublic User login(String username) {String sql = "select * from t_user where username = ?";List<User> users = DaoUtils.commonQuery(sql, User.class, username);if (users.isEmpty()) {return null;}return users.get(0);}@Overridepublic List<User> getUserList() {return DaoUtils.commonQuery("select * from t_user", User.class);}@Overridepublic int AddUser(User user) {List<User> userList = getUserList();// 存在同名for (User subUser: userList) {if (subUser.getUsername().equals(user.getUsername())) {return 0;}}String sql = "insert into t_user(username, password, age, sex) value(?, ?, ?, ?)";int i = DaoUtils.commonUpdate(sql, user.getUsername(),user.getPassword(), user.getAge(),user.getSex());return i;}@Overridepublic int DeleteUser(String username) {String sql = "delete from t_user where username = ?";int i = DaoUtils.commonUpdate(sql, username);return i;}@Overridepublic int UpdateUser(User user) {String sql = "update t_user set password=?,age=?,sex=? where username = ?";int i = DaoUtils.commonUpdate(sql,user.getPassword(),user.getAge(),user.getSex(),user.getUsername());return i;}public User SelectUser(String name) {List<User> users = DaoUtils.commonQuery("select * from t_user where username = ?", User.class, name);if (users.isEmpty()) {return null;}return users.get(0);}}
@Datapublic class User {private Integer id;private String username;private String password;private Integer age;private Integer sex;}
public interface IUserService {public User login(String username, String password);public List<User> getUserList();public int AddUser(User user);public int DeleteUser(String name);public int UpdateUser(User user);public User SelectUser(String name);}public class UserServiceImpl implements IUserService {private IUserDao userDao = new UserDaoImpl();@Overridepublic User login(String username, String password) {User user = userDao.login(username);if (user == null) {System.out.println("用户名或密码错误");return null;}if (!user.getPassword().equals(password)) {System.out.println("用户名或密码错误");return null;}return user;}@Overridepublic List<User> getUserList() {return userDao.getUserList();}public int AddUser(User user) {return userDao.AddUser(user);}public int DeleteUser(String name) {return userDao.DeleteUser(name);}public int UpdateUser(User user) {return userDao.UpdateUser(user);}public User SelectUser(String name) {return userDao.SelectUser(name);}}
public class DaoUtils {// 更改public static int commonUpdate(String sql, Object ...args) {Connection connection = DBUtils.getConnection();PreparedStatement prst = null;try {prst = connection.prepareStatement(sql);if (args != null && args.length > 0) {for (int i = 0; i < args.length; i ++) {prst.setObject(i + 1,args[i]);}}return prst.executeUpdate();} catch (SQLException e) {e.printStackTrace();} finally {DBUtils.close(prst);}return 0;}// 查询public static <T> List<T> commonQuery(String sql, Class<T> cls, Object ...args) {Connection connection = DBUtils.getConnection();PreparedStatement prst = null;ResultSet resultSet = null;List<T> list = new ArrayList<>();try {prst = connection.prepareStatement(sql);if (args != null && args.length > 0) {for (int i = 0; i < args.length; i ++) {prst.setObject(i + 1,args[i]);}}resultSet = prst.executeQuery();while (resultSet.next()) {T t = cls.newInstance();Field[] fields = cls.getDeclaredFields();for (Field field: fields) {// 设置动态给属性赋值权限field.setAccessible(true);Object value = null;try {value = resultSet.getObject(field.getName());} catch (SQLException e) {// 出现实体字段和数据库字段不一致String columnName = DBUtils.getProperties().getProperty(field.getName());value = resultSet.getObject(columnName);}field.set(t, value);}list.add(t);}} catch (SQLException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} finally {DBUtils.close(resultSet, prst);}return list;}}
public class DBUtils {private static DataSource dataSource = null;private static Properties properties = new Properties();private static ThreadLocal<Connection> threadLocal = new ThreadLocal<>();static {try {properties.load(DBUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"));dataSource = DruidDataSourceFactory.createDataSource(properties);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}public static Properties getProperties() {return properties;}public static Connection getConnection() {Connection connection = threadLocal.get();if (connection == null) {try {connection = dataSource.getConnection();threadLocal.set(connection);} catch (SQLException e) {e.printStackTrace();}}return connection;}public static void close(AutoCloseable ...args) {for (AutoCloseable obj: args) {if (obj != null) {try {obj.close();} catch (Exception e) {e.printStackTrace();}}}}}
# jdbc.properties#连接设置driverClassName=com.mysql.cj.jdbc.Driverurl=jdbc:mysql://localhost:3306/mydb1?characterEncoding=utf-8username=rootpassword=Liu01234#初始化可连接数量,实际项目时要设置更大值initialSize=100#最大连接数量maxActive=500#最小空闲连接,当空闲连接小于此值时会开辟新当空间,直到最大连接数量minIdle=50#超时等待时间以毫秒为单位 1000等于1秒maxWait=5000
<!-- web.xml --><?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"version="2.5"><!-- 登陆 --><servlet><servlet-name>LoginUserServlet</servlet-name><servlet-class>com.baidu.day.test1.controller.LoginUserServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginUserServlet</servlet-name><url-pattern>/LoginUserServlet</url-pattern></servlet-mapping><!-- 查所有 --><servlet><servlet-name>GetUserListServlet</servlet-name><servlet-class>com.baidu.day.test1.controller.GetUserListServlet</servlet-class></servlet><servlet-mapping><servlet-name>GetUserListServlet</servlet-name><url-pattern>/GetUserListServlet</url-pattern></servlet-mapping><!-- 重定向/转发跳转 --><servlet><servlet-name>ViewUserServlet</servlet-name><servlet-class>com.baidu.day.test1.controller.ViewUserServlet</servlet-class></servlet><servlet-mapping><servlet-name>ViewUserServlet</servlet-name><url-pattern>/ViewUserServlet</url-pattern></servlet-mapping><!-- 添加 --><servlet><servlet-name>AddUserServlet</servlet-name><servlet-class>com.baidu.day.test1.controller.AddUserServlet</servlet-class></servlet><servlet-mapping><servlet-name>AddUserServlet</servlet-name><url-pattern>/AddUserServlet</url-pattern></servlet-mapping><!-- 删 --><servlet><servlet-name>DeleteUserServlet</servlet-name><servlet-class>com.baidu.day.test1.controller.DeleteUserServlet</servlet-class></servlet><servlet-mapping><servlet-name>DeleteUserServlet</servlet-name><url-pattern>/DeleteUserServlet</url-pattern></servlet-mapping><!-- 改 --><servlet><servlet-name>UpdateUserServlet</servlet-name><servlet-class>com.baidu.day.test1.controller.UpdateUserServlet</servlet-class></servlet><servlet-mapping><servlet-name>UpdateUserServlet</servlet-name><url-pattern>/UpdateUserServlet</url-pattern></servlet-mapping><!-- 查 --><servlet><servlet-name>SelectUserServlet</servlet-name><servlet-class>com.baidu.day.test1.controller.SelectUserServlet</servlet-class></servlet><servlet-mapping><servlet-name>SelectUserServlet</servlet-name><url-pattern>/SelectUserServlet</url-pattern></servlet-mapping></web-app>
<%-- index.jsp --%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>$Title$</title></head><body><form method="post" action="LoginUserServlet">username:<input type="text" name="username" value="zs"><br><br>password:<input type="text" name="password" value="123"><br><br><input type="submit" value="登陆"></form><br><br><form method="post" action="AddUserServlet">username:<input type="text" name="username" value="zs"><br><br>password:<input type="text" name="password" value="123"><br><br>age:<input type="text" name="age" value="12"><br><br>sex:<input type="text" name="sex" value="1"><br><br><input type="submit" value="添加用户"></form><br><br><form method="post" action="DeleteUserServlet">username:<input type="text" name="username" value="zs"><br><br><input type="submit" value="删除用户"></form><br><br><form method="post" action="SelectUserServlet">username:<input type="text" name="username" value="zs"><br><br><input type="submit" value="查询用户"></form><br><br><form method="post" action="UpdateUserServlet">username:<input type="text" name="username" value="zs"><br><br>password:<input type="text" name="password" value="123"><br><br>age:<input type="text" name="age" value="12"><br><br>sex:<input type="text" name="sex" value="1"><br><br><input type="submit" value="修改用户"></form><br><br></body></html>
文章转载自java小小小小栈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




