admin管理员组文章数量:1530518
配置xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3/2001/XMLSchema-instance" xmlns="http://xmlns.jcp/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp/xml/ns/javaee http://xmlns.jcp/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
</web-app>
404以及500页面并没有写出,只是给用户一个提醒而已。
登录页面: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/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function changeCode(){
//得到图片元素
var img = document.getElementsByTagName("img")[0];
img.src = "${pageContext.request.contextPath}/validateCode?time="+new Date().getTime();
}
</script>
</head>
<body>
${info }<br>
${loginInfo }
<form action= "${pageContext.request.contextPath }/login" method="post">
账号:<input type="text" name="email" placeholder="请输入邮箱"><br>
密码: <input type="password" name="password" placeholder="请输入密码"><br>
验证码:<input type="text" name="code" placeholder="${msg }" />
<img src="${pageContext.request.contextPath}/validateCode" onclick="changeCode()"/><a href="javascript:changeCode()" >看不清换一张</a><br>
<input type="submit" value="登录"/><br>
</form>
</body>
</html>
进入后的页面: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/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
欢迎:${userName }<br>
<a href="${pageContext.request.contextPath }/user/list">查看所有的用户</a> <br>
<a href="${pageContext.request.contextPath }/useradd.jsp">添加用户</a>
<a target="_blank" href="http://wpa.qq/msgrd?v=3&uin=1539399310&site=qq&menu=yes"><img border="0" src="http://wpa.qq/pa?p=2:1539399310:53" alt="点击这里给我发消息" title="点击这里给我发消息"/></a></body>
</html>
添加、删除、修改用户等总跳转:user.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/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="user/add">useradd</a><br>
<a href="user/update">update</a><br>
<a href="user/delete">delete</a><br>
<a href="user/list">list</a><br>
</body>
</html>
添加用户页面:useradd.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/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- request.getParameter("username") 如果用户不填信息的话 获取的值为null值 null值是可以进行==判断的 -->
${msg }
<form action="user/add" method="post">
用户:<input type="text" name="username" value="<%= request.getParameter("username")==null ?"":request.getParameter("username") %>"><br>
邮箱:<input type="text" name="email" value="<%= request.getParameter("email")==null ?"":request.getParameter("email")%>"><br>
密码:<input type="password" name="password"><br>
确认密码:<input type="password" name="confirmpwd"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
修改用户页面:userupdate.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/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="update" method="post">
<!-- disable 属性设置的域无法传到request请求域中 -->
<input type="hidden" name="id" readonly="readonly" value="${user.id }" ><br>
用户名:<input type="text" name="username" value="${user.username }"><br>
邮箱:<input type="text" name="email" value="${user.email }"><br>
密码:<input type="password" name="password" value="${user.password }"><br>
<button type="submit">提交</button>
</form>
</body>
</html>
所有用户显示页面:userlist.jsp
包含修改 删除用户,上下一页等。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:choose>
<c:when test="${!empty pageUser.userList }">
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<th>用户ID</th>
<th>用户姓名</th>
<th>用户邮箱</th>
<th colspan="2">编辑</th>
</tr>
<c:forEach items="${pageUser.userList }" var="user" >
<tr>
<td>${user.id }</td>
<td>${user.username }</td>
<td>${user.email }</td>
<td>
<a href="${pageContext.request.contextPath }/user/preUpdate?id=${user.id}">
修改
</a>
</td>
<td>
<a href="${pageContext.request.contextPath }/user/delete?id=${user.id}">
删除
</a>
</td>
</tr>
</c:forEach>
</table>
<a href="${pageContext.request.contextPath }/page?currentPage=${pageUser.currentPage==1 ? 1:pageUser.currentPage-1}">上一页<< </a>
当前页${pageUser.currentPage }/共${pageUser.totalPage }页
<a href="${pageContext.request.contextPath }/page?currentPage=${pageUser.currentPage == pageUser.totalPage ? pageUser.totalPage : pageUser.currentPage+1}"> >>下一页</a>
</c:when>
<c:when test="${empty userlist }">
没有用户信息
<a href="index.jsp">返回首页</a>
</c:when>
</c:choose>
</body>
</html>
利用枚举将每页显示数据条数列出(这里默认设置的四条):pageenum.java
package com.javaweb.costant;
public enum PageEnum {
PageSize;
//每页的默认大小
public int size;
PageEnum(int size){
this.size = size;
}
private PageEnum() {
this(4);
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
获取总记录数及获取当前页数据:pagedao.java
package com.javaweb.dao;
import java.sql.SQLException;
import java.util.List;
import org.apachemons.dbutils.QueryRunner;
import org.apachemons.dbutils.handlers.BeanListHandler;
import org.apachemons.dbutils.handlers.ScalarHandler;
import com.javaweb.entity.User;
import com.javaweb.util.DruidUtil;
public class PageDao {
static QueryRunner queryRunner;
static{
//dataSource 在容器启动的时候 进行的初始化
queryRunner = new QueryRunner(DruidUtil.dataSource);
}
//获取总的记录数
public long getToalSize(){
try {
ScalarHandler<Long> scalarHandler = new ScalarHandler<>();
long i = (long) queryRunner.query("select count(*) from user",scalarHandler);
return i;
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}
//获取当前页的数据
public List<User> getCurrentPage(int currentPage,int pageSize){
try {
BeanListHandler<User> beanListHandler = new BeanListHandler<>(User.class);
List<List<User>> result = queryRunner.execute("select * from user limit ?,?",beanListHandler,(currentPage-1)*pageSize,pageSize );
return result.get(0);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
userdao.java
package com.javaweb.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apachemons.dbutils.QueryRunner;
import org.apachemons.dbutils.handlers.BeanHandler;
import org.apachemons.dbutils.handlers.BeanListHandler;
import com.javaweb.entity.User;
import com.javaweb.util.DruidUtil;
/**
* 数据访问 层
* @author Administrator
*
*/
public class UserDao {
static QueryRunner queryRunner;
static{
//dataSource 在容器启动的时候 进行的初始化
queryRunner = new QueryRunner(DruidUtil.dataSource);
}
public User getUserByEmail(String email){
List<User> result;
try {
result = queryRunner.execute("select * from user where email =?", new BeanHandler<>(User.class),email);
return result.get(0);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public boolean deleteUser(int id){
try {
int i = queryRunner.update("delete from user where id = ? ",id);
if(i > 0){
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
public boolean updateUser(String username,String email,String password,int id){
int update;
try {
update = queryRunner.execute("update user set username = ?,email = ?,password = ? where id = ? ",username,email,password,id);
if(update>0){
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
public User getUserById(int id){
List<User> result;
try {
result = queryRunner.execute("select * from user where id =?", new BeanHandler<>(User.class),id);
return result.get(0);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public boolean addUser(String username,String email,String password){
int update;
try {
update = queryRunner.execute("insert into user(username,email,password) values(?,?,?)",username,email,password);
if(update > 0){
return true;
}
} catch (SQLException e) {
e.printStackTrace();
return false;
}
return false;
}
public boolean deleteUserById(int id){
try {
int update = queryRunner.update("delete from user where id = ? ",id);
if(update>0){
return true;
}
} catch (SQLException e) {
e.printStackTrace();
return false;
}finally {
//TODO QueryRunner 除了数据源 其他自己处理
}
return false;
}
public List<User> getAllUserByApache(){
// 用于处理实体bean的结果集
BeanListHandler<User> beanListHandler = new BeanListHandler<>(User.class);
List<List<User>> execute=null;
try {
execute = queryRunner.execute("select * from user",beanListHandler);
} catch (SQLException e) {
e.printStackTrace();
}
//queryRunner.execute("select * from user", new BeanListHandler<>(User.class));
return execute.get(0);
}
public List<User> getAllUser(){
Connection connection = DruidUtil.getConnection();
List<User> userList = new ArrayList<>();
PreparedStatement prepareStatement=null;
ResultSet resultSet=null;
try {
prepareStatement = connection.prepareStatement("select * from user");
resultSet = prepareStatement.executeQuery();
while(resultSet.next()){
//一条记录 对应一个User对象; 有几条记录 new 几个user实例
User user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername("java12="+resultSet.getString("username"));
user.setEmail(resultSet.getString("email"));
userList.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DruidUtil.close(null, connection, prepareStatement, resultSet);
}
return userList;
}
}
实例定义:pagebean.java及user.java
package com.javaweb.entity;
import java.util.List;
public class PageBean {
//总的页数
private Integer totalPage;
//当前页
private Integer currentPage;
//每页的数据
private List<User> userList;
public Integer getTotalPage() {
return totalPage;
}
public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
}
public Integer getCurrentPage() {
return currentPage;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
@Override
public String toString() {
return "PageBean [totalPage=" + totalPage + ", currentPage=" + currentPage + ", userList=" + userList + "]";
}
}
package com.javaweb.entity;
public class User {
private Integer id;
private String username;
private String password;
private String email;
private Address address;
public User(Integer id, String username, String password, String email) {
super();
this.id = id;
this.username = username;
this.password = password;
this.email = email;
}
public User() {
super();
}
public Integer getId() {
return id;
}
public void setId(Integer 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;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User [id=" + id + ", nausername=" + username + ", password=" + password + ", email=" + email + "]";
}
}
加入过滤器使页面可以显示或者添加中文:encodefilter.java
package com.javaweb.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@WebFilter("/*")
public class EncodeFilter implements Filter {
public EncodeFilter() {
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
登录页面过滤器:loginfilter.java
package com.javaweb.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@WebFilter("/*")
public class LoginFilter implements Filter {
Logger logger = LoggerFactory.getLogger(LoginFilter.class);
public LoginFilter() {
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest)request;
HttpServletResponse httpServletResponse = (HttpServletResponse)response;
String requestURI = httpServletRequest.getRequestURI();
//对login.jsp 和生成验证码的servlet 进行放行 其他请求过滤
if(!requestURI.contains("login") && !requestURI.contains("validateCode")){
//判断session是否用用户登陆的信息
String userName =(String)httpServletRequest.getSession().getAttribute("userName");
if(logger.isInfoEnabled()){
logger.info("session中的用户为:{}",userName);
}
if(userName==null){
httpServletRequest.setAttribute("loginInfo", "请登陆");
httpServletRequest.getRequestDispatcher("/login.jsp").forward(httpServletRequest, httpServletResponse);
//httpServletResponse.sendRedirect(httpServletRequest.getContextPath()+"/login.jsp");
}else{
chain.doFilter(httpServletRequest, httpServletResponse);
}
}else{
chain.doFilter(request, response);
}
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
监听器:contextlistener.java
package com.javaweb.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.javaweb.util.DruidUtil;
@WebListener
public class ContextListener implements ServletContextListener {
Logger logger = LoggerFactory.getLogger(ContextListener.class);
public ContextListener() {
}
public void contextDestroyed(ServletContextEvent sce) {
DruidUtil.closeDataSource();
if(logger.isInfoEnabled()){
logger.info("数据源关闭了");
}
}
//Tomcat容器启动的时候调用 用于初始化数据源
public void contextInitialized(ServletContextEvent sce) {
try {
Class.forName("com.javaweb.util.DruidUtil");
if(logger.isInfoEnabled()){
logger.info("数据源初始化完成");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
页面服务:pageservice.java
package com.javaweb.service;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.javaweb.costant.PageEnum;
import com.javaweb.dao.PageDao;
import com.javaweb.entity.PageBean;
import com.javaweb.entity.User;
import com.javaweb.servlet.PageServlet;
public class PageService {
Logger logger = LoggerFactory.getLogger(PageService.class);
public PageBean getPageBean(String currentPage){
if(logger.isInfoEnabled()){
logger.info("获取的当前页为:{}",currentPage);
}
Integer currentPageInteger = 0;
if(currentPage!=null){
currentPageInteger = Integer.valueOf(currentPage);
}
PageDao pageDao = new PageDao();
//总记录数
long totalSize = pageDao.getToalSize();
if(logger.isInfoEnabled()){
logger.info("获取的总记录数为:{}",totalSize);
}
//总的页码
int totalPage = (int) (totalSize % PageEnum.PageSize.size == 0 ? totalSize / PageEnum.PageSize.size : (totalSize / PageEnum.PageSize.size) +1);
//int totalPage = (int)Math.ceil(totalSize / PageEnum.PageSize.size)+1;
if(logger.isInfoEnabled()){
logger.info("获取的总页数为:{}",totalPage);
}
//当前页的数据
List<User> currentPageUser = pageDao.getCurrentPage(currentPageInteger, PageEnum.PageSize.size);
if(logger.isInfoEnabled()){
logger.info("获取的当前页的数据为:{}",currentPageUser);
}
PageBean pageBean = new PageBean();
pageBean.setCurrentPage(currentPageInteger);
pageBean.setTotalPage(totalPage);
pageBean.setUserList(currentPageUser);
if(logger.isInfoEnabled()){
logger.info("返回到当前页的数据为:{}",pageBean);
}
return pageBean;
}
}
登录验证页面:loginservlet.java
package com.javaweb.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.tomcat.util.buf.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.javaweb.dao.UserDao;
import com.javaweb.entity.User;
import com.javaweb.util.PasswordUtil;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
Logger logger = LoggerFactory.getLogger(LoginServlet.class);
public LoginServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String code = request.getParameter("code");
String email = request.getParameter("email");
String password = request.getParameter("password");
String sessionCode = (String)request.getSession().getAttribute("sessioncode");
if(logger.isInfoEnabled()){
logger.info("页面传过来的code为:{}。session中的验证码为:{}",code,sessionCode);
}
//为什么将sessionCode放在前面这个问题
/* 如果从页面中获取的code为null的话 也就是用户没有输入(加入前端没有提示) 此时将报NullPointerExcepiton
if(code.equals(sessionCode)){}
*/
//①首先判断验证码 因为邮箱密码的时候 需要进行数据库的查询 这样减少与数据库的交互 省了查询的时间
if(!sessionCode.equalsIgnoreCase(code)){
request.setAttribute("msg", "验证码不一致 请重新输入");
request.getRequestDispatcher("login.jsp").forward(request, response);
}else{
if(logger.isInfoEnabled()){
logger.info("获取到的账号邮箱为:{},密码为:{}",email,password);
}
//② 验证码 正确 开始进行数据库的查询 进行校验密码
UserDao userDao = new UserDao();
User userByEmail = userDao.getUserByEmail(email);
if(logger.isInfoEnabled()){
logger.info("查询出来的用户为:{}",userByEmail);
}
//③ 从数据库中查询出来的用户不存在
if(userByEmail == null){
request.setAttribute("info", "用户账号不存在");
request.getRequestDispatcher("login.jsp").forward(request, response);
}else{
//④ 存在情况 开始加密密码值的比对 因为用户输入的是明文 数据库保存的是密文
//对用户输入的明文密码进行加密
String secPassword = PasswordUtil.createPassword(password);
//使用加密后的密码和数据库中的密码进行比对
if(!userByEmail.getPassword().equals(secPassword)){
request.setAttribute("info", "密码错误");
request.getRequestDispatcher("login.jsp").forward(request, response);
}else{
//登陆完成 在session中存放用户名
HttpSession session = request.getSession();
session.setAttribute("userName", userByEmail.getUsername());
session.setMaxInactiveInterval(60*1);
response.sendRedirect("index.jsp");
}
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
页面页码:pageservlet.java
package com.javaweb.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.javaweb.costant.PageEnum;
import com.javaweb.entity.PageBean;
import com.javaweb.entity.User;
import com.javaweb.service.PageService;
@WebServlet("/page")
public class PageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
Logger logger = LoggerFactory.getLogger(PageServlet.class);
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//需要从页面获取当前页 如果是第一次进入查看的话 currentpage 是没有值的 设置默认值为第一页
String currentPage = request.getParameter("currentPage") != null ? request.getParameter("currentPage") : "1";
PageService pageService = new PageService();
PageBean pageBean = pageService.getPageBean(currentPage);
request.setAttribute("pageUser", pageBean);
request.getRequestDispatcher("/userlist.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
* 主要 删除添加修改用户信息:userservlet.java
package com.javaweb.servlet;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apachemons.beanutils.BeanUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.javaweb.dao.UserDao;
import com.javaweb.entity.PageBean;
import com.javaweb.entity.User;
import com.javaweb.service.PageService;
import com.javaweb.util.PasswordUtil;
@WebServlet("/user/*")
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
Logger logger = LoggerFactory.getLogger(UserServlet.class);
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String requestURI = request.getRequestURI();
if (logger.isInfoEnabled()) {
logger.info("获取到的URI为:{}", requestURI);
}
//eg:"/javaweb_crud_v3/user/list" => "","javaweb_crud-v3","user","list"
String[] splitURI = requestURI.split("/");
if (logger.isInfoEnabled()) {
logger.info("截取到的URI中包含的操作为为:{}", splitURI[3]);
}
switch (splitURI[3]) {
case "add":
addUser(request,response);
break;
case "delete":
deleteUser(request,response);
break;
// 预修改 用于回显修改的数据
case "preUpdate":
preUpdateUser(request,response);
break;
// 提交修改的操作
case "update":
updateUser(request,response);
break;
case "list":
listUser(request, response);
break;
// 没有该请求路径的时候
default:
nonSuchUrl(request,response);
break;
}
}
private void nonSuchUrl(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.getWriter().print("请检查你的路径");
}
private void addUser(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
//从页面中获取体积的参数 这些参数 是可以通过转发 到某一个页面 再重新获取的(<%request.getParameter("") %>)
//如果想通过EL表达式获取的话 需要使用request.setAttribute("","");
//参数域过多的情况 需要对属性一个一个的set值操作 过程繁琐 需要封装 用Apache提供的工具类
String username = request.getParameter("username");
String email = request.getParameter("email");
String password = request.getParameter("password");
String confirmpwd = request.getParameter("confirmpwd");
//================================================
//参数域过多的情况下 使用Apache工具类 进行属性域的填充
User user = new User();
try {
//Apache 工具类 直接对对象进行渲染
BeanUtils.populate(user, request.getParameterMap());
if(logger.isInfoEnabled()){
logger.info("获取的所有参数域为:{}",request.getParameterMap());
}
if(logger.isInfoEnabled()){
logger.info("封装的用户对象为:{}",user);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//=================================================
//进行日志输出 查看获取的参数
if(logger.isInfoEnabled()){
logger.info("获取到的用户名为:{},邮箱为:{}",username,email);
}
//两次密码不一致 需要重新添加
if(password.equals(confirmpwd)){
//需不需要对username email password..... 进行对象的封装
//如果需要的话 该如何处理??????
UserDao userDao = new UserDao();
String createPassword = PasswordUtil.createPassword(password);
boolean addFlag = userDao.addUser(username, email, createPassword);
//添加成功 重定向到查询页面 简单粗暴有效
//显示一个页面 告诉你3秒后跳转 or 直接跳转??????
if(addFlag){
//简单的模拟
response.getWriter().println("用户添加成功,3秒后跳转");
response.setHeader("refresh", "3;url="+request.getContextPath()+"/user/list");
//response.sendRedirect("listusers");
}else{
//添加失败 得用转发 用于回显用户填写的信息 用户只需要修改错误的信息字段即可 其他不需要修改 也不需要重新填写
request.getRequestDispatcher("/useradd.jsp").forward(request, response);
}
}else{
//setAttribute这种形式 是可以使用EL表达式 进行获取值的
request.setAttribute("msg", "两次密码不一致");
request.getRequestDispatcher("/useradd.jsp").forward(request, response);
}
}
private void updateUser(HttpServletRequest request, HttpServletResponse response) throws IOException {
String id = request.getParameter("id");
String username = request.getParameter("username");
String email = request.getParameter("email");
String password = request.getParameter("password");
if(logger.isInfoEnabled()){
logger.info("要修改的数据为:用户ID{},用户名{},邮箱{}",id,username,email);
}
//对修改的密码进行加密
String createPassword = PasswordUtil.createPassword(password);
UserDao userDao = new UserDao();
boolean updateFlag = userDao.updateUser(username, email, createPassword, Integer.valueOf(id));
if(updateFlag){
response.sendRedirect(request.getContextPath()+"/user/list");
}
}
private void deleteUser(HttpServletRequest request, HttpServletResponse response) throws IOException {
String id = request.getParameter("id");
UserDao userDao = new UserDao();
boolean deleteFlag = userDao.deleteUser(Integer.valueOf(id));
if(logger.isInfoEnabled()){
logger.info("删除用户ID为{}的用户",id);
}
if(deleteFlag){
response.sendRedirect(request.getContextPath()+"/user/list");
}
}
private void preUpdateUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
Integer integer = Integer.valueOf(id);
//根据用户ID来查找该用户
UserDao userDao = new UserDao();
User user = userDao.getUserById(integer);
if(logger.isInfoEnabled()){
logger.info("查找出来的用户为:{}",user);
}
if(user!=null){
request.setAttribute("user", user);
request.getRequestDispatcher("/userupdate.jsp").forward(request, response);
}
}
private void listUser(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//需要从页面获取当前页 如果是第一次进入查看的话 currentpage 是没有值的 设置默认值为第一页
String currentPage = request.getParameter("currentPage") != null ? request.getParameter("currentPage") : "1";
PageService pageService = new PageService();
PageBean pageBean = pageService.getPageBean(currentPage);
request.setAttribute("pageUser", pageBean);
request.getRequestDispatcher("/userlist.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
生成验证码:validatecodeservlet.java
package com.javaweb.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.dsna.util.images.ValidateCode;
@WebServlet("/validateCode")
public class ValidateCodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ValidateCodeServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 告诉客户端不使用缓存
response.setHeader("pragma", "no-cache");
response.setHeader("cache-control", "no-cache");
response.setIntHeader("expires", 0);
ValidateCode vc = new ValidateCode(110, 25, 4, 9);
String code = vc.getCode();// 得到生成的字符
//将验证码存放到session中
request.getSession().setAttribute("sessioncode", code);
vc.write(response.getOutputStream());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
druid连接池链接数据库:druidutil.java
package com.javaweb.util;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
public class DruidUtil {
// 避免DataSource 数据源创建多次
// 在类加载的时候即初始化一次
static Properties properties;
public static DataSource dataSource;
static{
properties = new Properties();
try {
properties.load(DruidUtil.class.getClassLoader().getResourceAsStream("alibaba.properties"));
getDataSource();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void closeDataSource(){
DruidDataSource druidDataSource=(DruidDataSource)dataSource;
druidDataSource.close();
}
public static DataSource getDataSource(){
try {
dataSource = DruidDataSourceFactory.createDataSource(properties);
return dataSource;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static Connection getConnection(){
try {
Connection connection = dataSource.getConnection();
return connection;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static void close(DataSource dataSource,Connection conn,PreparedStatement preparedStatement,ResultSet resultSet){
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(preparedStatement!=null){
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(dataSource!=null){
DruidDataSource source=(DruidDataSource)dataSource;
source.close();
}
}
public static void main(String[] args) throws SQLException {
DruidDataSource dataSource = (DruidDataSource)DruidUtil.getDataSource();
System.out.println(dataSource.getConnection());
DruidDataSource dataSource2 = (DruidDataSource)DruidUtil.getDataSource();
System.out.println(dataSource2.getConnection());
}
}
密码加密:passwordutil.java
package com.javaweb.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class PasswordUtil {
// 16进制下数字到字符的映射数组
private static String[] hexDigits = new String[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c",
"d", "e", "f" };
// 将inputstr加密
public static String createPassword(String inputstr) {
return encodeByMD5(inputstr);
}
// 验证密码是否正确
public static boolean authenticatePassword(String pass, String inputstr) {
if (pass.equals((encodeByMD5(inputstr)))) {
return true;
} else {
return false;
}
}
// 对字符串进行MD5编码
private static String encodeByMD5(String originstr) {
if (originstr != null) {
try {
// 创建具有指定算法名称的信息摘要
MessageDigest md = MessageDigest.getInstance("MD5");
// 使用指定的字节数组对摘要进行最后的更新,然后完成摘要计算
byte[] results = md.digest(originstr.getBytes());
// 将得到的字节数组编程字符窜返回
String resultString = byteArrayToHexString(results);
return resultString.toUpperCase();
} catch (Exception ex) {
ex.printStackTrace();
}
}
return null;
}
// 转换字节数组为十六进制字符串
private static String byteArrayToHexString(byte[] b) {
StringBuffer resultsb = new StringBuffer();
int i = 0;
for (i = 0; i < b.length; i++) {
resultsb.append(byteToHexString(b[i]));
}
return resultsb.toString();
}
// 将字节转化成十六进制的字符串
private static String byteToHexString(byte b) {
int n = b;
if (n < 0) {
n = 256 + n;
}
int d1 = n / 16;
int d2 = n / 16;
return hexDigits[d1] + hexDigits[d2];
}
/**
* @param decript 要加密的字符串
* @return 加密的字符串
* SHA1加密
*/
public final static String SHA1(String decript) {
try {
MessageDigest digest = java.security.MessageDigest
.getInstance("SHA-1");
digest.update(decript.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
// 字节数组转换为 十六进制 数
for (int i = 0; i < messageDigest.length; i++) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
if (shaHex.length() < 2) {
hexString.append(0);
}
hexString.append(shaHex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
public static void main(String[] args) {
String password = PasswordUtil.createPassword("123456");
System.out.println("对123456用MD5加密后:" + password);
String inputstr = "1234";
System.out.println("1234与密码相同?" + PasswordUtil.authenticatePassword(password, inputstr));
inputstr = "123456";
System.out.println("123456与密码相同?" + PasswordUtil.authenticatePassword(password, inputstr));
}
}
代码中用到的两个properties文件:alibaba、simplelogger
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/javaweb?useSSL=false
username=root
password=980916
filters=stat
initialSize=21
maxActive=300
maxWait=60000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200
# SLF4J's SimpleLogger configuration file
# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err.
# Default logging detail level for all instances of SimpleLogger.
# Must be one of ("trace", "debug", "info", "warn", or "error").
# If not specified, defaults to "info".
org.slf4j.simpleLogger.defaultLogLevel=info
# 指定文件输出的方向
org.slf4j.simpleLogger.logFile = System.out
# Logging detail level for a SimpleLogger instance named "xxxxx".
# Must be one of ("trace", "debug", "info", "warn", or "error").
# If not specified, the default logging detail level is used.
#org.slf4j.simpleLogger.log.xxxxx=
# Set to true if you want the current date and time to be included in output messages.
# Default is false, and will output the number of milliseconds elapsed since startup.
#org.slf4j.simpleLogger.showDateTime=false
# The date and time format to be used in the output messages.
# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat.
# If the format is not specified or is invalid, the default format is used.
# The default format is yyyy-MM-dd HH:mm:ss:SSS Z.
#org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z
# Set to true if you want to output the current thread name.
# Defaults to true.
#org.slf4j.simpleLogger.showThreadName=true
# Set to true if you want the Logger instance name to be included in output messages.
# Defaults to true.
#org.slf4j.simpleLogger.showLogName=true
# Set to true if you want the last component of the name to be included in output messages.
# Defaults to false.
#org.slf4j.simpleLogger.showShortLogName=false
本文需要导入的架包:
版权声明:本文标题:web管理员登录页面 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1725631395a1033767.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论