基于javaweb+mysql的jsp+servlet日记系统(java+jsp+bootstrap+servlet+mysql)
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的JSP+Servlet日记系统(java+jsp+bootstrap+servlet+mysql)
项目介绍
本项目主要功能有: 写日记 查看日记 日记删除 日记修改 日记类别添加 日记类别修改 日记类别删除 个人信息查看 个人信息修改 分页功能
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.数据库:MySql 5.7版本; 6.是否Maven项目: 否;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目
技术栈
- 后端:servlet 2. 前端:JSP+bootstrap+jQuery
使用说明
- 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven; 若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中db.properties配置文件中的数据库配置改为自己的配置; 4. 运行项目,在浏览器中输入http://localhost:8080/ 登录
}
}
}
request.setAttribute("mainPage", "diaryType/diaryTypeSave.jsp");
request.getRequestDispatcher("mainTemp.jsp").forward(request, response);
}
/**
* 日记类别保存
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void diaryTypeSave(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String diaryTypeId=request.getParameter("diaryTypeId");
String typeName=request.getParameter("typeName");
DiaryType diaryType=new DiaryType(typeName);
if(StringUtil.isNotEmpty(diaryTypeId)){
diaryType.setDiaryTypeId(Integer.parseInt(diaryTypeId));
}
Connection con=null;
try{
con=dbUtil.getCon();
int saveNum=0;
if(StringUtil.isNotEmpty(diaryTypeId)){
saveNum=diaryTypeDao.diaryTypeUpdate(con, diaryType);
}else{
saveNum=diaryTypeDao.diaryTypeAdd(con, diaryType);
}
if(saveNum>0){
request.getRequestDispatcher("diaryType?action=list").forward(request, response);
}else{
request.setAttribute("diaryType", diaryType);
request.setAttribute("error", "保存失败!");
request.setAttribute("mainPage", "diaryType/diaryTypeSave.jsp");
request.getRequestDispatcher("mainTemp.jsp").forward(request, response);
}
}catch(Exception e){
e.printStackTrace();
}finally{
/**
* 获取分页代码
* @param totalNum 总记录数
* @param currentPage 当前页
* @param pageSize 每页大小
* @return
*/
private String genPagation(int totalNum,int currentPage,int pageSize){
int totalPage=totalNum%pageSize==0?totalNum/pageSize:totalNum/pageSize+1;
StringBuffer pageCode=new StringBuffer();
pageCode.append("<li><a href='main?page=1'>首页</a></li>");
if(currentPage==1){
pageCode.append("<li class='disabled'><a href='#'>上一页</a></li>");
}else{
pageCode.append("<li><a href='main?page="+(currentPage-1)+"'>上一页</a></li>");
}
for(int i=currentPage-2;i<=currentPage+2;i++){
if(i<1||i>totalPage){
continue;
}
if(i==currentPage){
pageCode.append("<li class='active'><a href='#'>"+i+"</a></li>");
}else{
pageCode.append("<li><a href='main?page="+i+"'>"+i+"</a></li>");
}
}
if(currentPage==totalPage){
pageCode.append("<li class='disabled'><a href='#'>下一页</a></li>");
}else{
pageCode.append("<li><a href='main?page="+(currentPage+1)+"'>下一页</a></li>");
}
pageCode.append("<li><a href='main?page="+totalPage+"'>尾页</a></li>");
return pageCode.toString();
}
}
e.printStackTrace();
}
}
}
/**
* 日记类别删除
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void diaryTypeDelete(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String diaryTypeId=request.getParameter("diaryTypeId");
Connection con=null;
try{
con=dbUtil.getCon();
if(diaryDao.existDiaryWithTypeId(con, diaryTypeId)){
request.setAttribute("error", "日志类别下有日志,不能删除该类别!");
}else{
diaryTypeDao.diaryTypeDelete(con, diaryTypeId);
}
request.getRequestDispatcher("diaryType?action=list").forward(request, response);
}catch(Exception e){
e.printStackTrace();
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 用户登录Servlet类
*
*/
public class LoginServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
DbUtil dbUtil=new DbUtil(); // 实例化数据库工具对象
UserDao userDao=new UserDao(); // 实例化用户DAO对象
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
HttpSession session=request.getSession(); // 获取session
String userName=request.getParameter("userName"); // 获取用户名
String password=request.getParameter("password"); // 获取密码
String remember=request.getParameter("remember"); // 获取是否记住密码
Connection con=null;
try{
con=dbUtil.getCon(); // 获取数据库连接
User user=new User(userName,password); // 实例化用户对象
User currentUser=userDao.login(con, user); // 登录验证
if(currentUser==null){ // 假如验证失败,跳回登录页面
request.setAttribute("user", user);
request.setAttribute("error", "用户名或密码错误!");
request.getRequestDispatcher("login.jsp").forward(request, response);
}else{ // 登录成功,则转发到主页面
if("remember-me".equals(remember)){ // 判断是否记住密码
rememberMe(userName,password,response);
}
session.setAttribute("currentUser", currentUser);
request.getRequestDispatcher("main").forward(request, response);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
DbUtil dbUtil=new DbUtil(); // 实例化数据库工具类
DiaryDao diaryDao=new DiaryDao(); // 实例化日记类
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String action=request.getParameter("action"); // 获取请求方法
if("show".equals(action)){ // 显示日记
diaryShow(request,response);
}else if("preSave".equals(action)){ // 准备调用日记保存
diaryPreSave(request,response);
}else if("save".equals(action)){ // 调用日记保存
diarySave(request,response);
}else if("delete".equals(action)){ // 调用日记删除
diaryDelete(request,response);
}
}
/**
* 日记显示
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void diaryShow(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String diaryId=request.getParameter("diaryId");
Connection con=null;
try{
con=dbUtil.getCon();
Diary diary=diaryDao.diaryShow(con, diaryId);
request.setAttribute("diary", diary);
request.setAttribute("mainPage", "diary/diaryShow.jsp");
request.getRequestDispatcher("mainTemp.jsp").forward(request, response);
}catch(Exception e){
e.printStackTrace();
*
*/
private static final long serialVersionUID = 1L;
DbUtil dbUtil=new DbUtil(); // 实例化数据库工具对象
UserDao userDao=new UserDao(); // 实例化用户DAO对象
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
HttpSession session=request.getSession(); // 获取session
String userName=request.getParameter("userName"); // 获取用户名
String password=request.getParameter("password"); // 获取密码
String remember=request.getParameter("remember"); // 获取是否记住密码
Connection con=null;
try{
con=dbUtil.getCon(); // 获取数据库连接
User user=new User(userName,password); // 实例化用户对象
User currentUser=userDao.login(con, user); // 登录验证
if(currentUser==null){ // 假如验证失败,跳回登录页面
request.setAttribute("user", user);
request.setAttribute("error", "用户名或密码错误!");
request.getRequestDispatcher("login.jsp").forward(request, response);
}else{ // 登录成功,则转发到主页面
if("remember-me".equals(remember)){ // 判断是否记住密码
rememberMe(userName,password,response);
}
session.setAttribute("currentUser", currentUser);
request.getRequestDispatcher("main").forward(request, response);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
/**
* 日记类别列表
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void diaryTypeList(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
Connection con=null;
try{
con=dbUtil.getCon();
List<DiaryType> diaryTypeList=diaryTypeDao.diaryTypeList(con);
request.setAttribute("diaryTypeList", diaryTypeList);
request.setAttribute("mainPage", "diaryType/diaryTypeList.jsp");
request.getRequestDispatcher("mainTemp.jsp").forward(request, response);
}catch(Exception e){
e.printStackTrace();
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 日记类别准备保存
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void diaryTypePreSave(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String diaryTypeId=request.getParameter("diaryTypeId");
if(StringUtil.isNotEmpty(diaryTypeId)){
Connection con=null;
try{
con=dbUtil.getCon();
DiaryType diaryType=diaryTypeDao.diaryTypeShow(con,diaryTypeId);
request.setAttribute("diaryType", diaryType);
}catch(Exception e){
e.printStackTrace();
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 日记类别删除
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void diaryTypeDelete(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String diaryTypeId=request.getParameter("diaryTypeId");
Connection con=null;
try{
con=dbUtil.getCon();
if(diaryDao.existDiaryWithTypeId(con, diaryTypeId)){
request.setAttribute("error", "日志类别下有日志,不能删除该类别!");
}else{
diaryTypeDao.diaryTypeDelete(con, diaryTypeId);
}
request.getRequestDispatcher("diaryType?action=list").forward(request, response);
}catch(Exception e){
e.printStackTrace();
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
e.printStackTrace();
}
}
}
request.setAttribute("mainPage", "diaryType/diaryTypeSave.jsp");
request.getRequestDispatcher("mainTemp.jsp").forward(request, response);
}
/**
* 日记类别保存
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void diaryTypeSave(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String diaryTypeId=request.getParameter("diaryTypeId");
String typeName=request.getParameter("typeName");
DiaryType diaryType=new DiaryType(typeName);
if(StringUtil.isNotEmpty(diaryTypeId)){
diaryType.setDiaryTypeId(Integer.parseInt(diaryTypeId));
}
Connection con=null;
try{
con=dbUtil.getCon();
int saveNum=0;
if(StringUtil.isNotEmpty(diaryTypeId)){
saveNum=diaryTypeDao.diaryTypeUpdate(con, diaryType);
}else{
saveNum=diaryTypeDao.diaryTypeAdd(con, diaryType);
}
if(saveNum>0){
request.getRequestDispatcher("diaryType?action=list").forward(request, response);
}else{
request.setAttribute("diaryType", diaryType);
request.setAttribute("error", "保存失败!");
request.setAttribute("mainPage", "diaryType/diaryTypeSave.jsp");
request.getRequestDispatcher("mainTemp.jsp").forward(request, response);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 日记类别删除
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void diaryTypeDelete(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String diaryTypeId=request.getParameter("diaryTypeId");
Connection con=null;
try{
con=dbUtil.getCon();
if(diaryDao.existDiaryWithTypeId(con, diaryTypeId)){
request.setAttribute("error", "日志类别下有日志,不能删除该类别!");
}else{
diaryTypeDao.diaryTypeDelete(con, diaryTypeId);
}
request.getRequestDispatcher("diaryType?action=list").forward(request, response);
}catch(Exception e){
e.printStackTrace();
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String action=request.getParameter("action"); // 获取请求方法
if("preSave".equals(action)){ // 准备保存
userPreSave(request,response);
}else if("save".equals(action)){ // 保存
userSave(request,response);
}
}
/**
* 准备保存用户
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void userPreSave(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
request.setAttribute("mainPage", "user/userSave.jsp");
request.getRequestDispatcher("mainTemp.jsp").forward(request, response);
}
/**
* 保存用户
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void userSave(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
FileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload upload=new ServletFileUpload(factory);
List<FileItem> items=null;
try {
items=upload.parseRequest((RequestContext) request);
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Iterator<FileItem> itr=items.iterator();
HttpSession session=request.getSession();
User user=(User)session.getAttribute("currentUser");
private void diaryTypeSave(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String diaryTypeId=request.getParameter("diaryTypeId");
String typeName=request.getParameter("typeName");
DiaryType diaryType=new DiaryType(typeName);
if(StringUtil.isNotEmpty(diaryTypeId)){
diaryType.setDiaryTypeId(Integer.parseInt(diaryTypeId));
}
Connection con=null;
try{
con=dbUtil.getCon();
int saveNum=0;
if(StringUtil.isNotEmpty(diaryTypeId)){
saveNum=diaryTypeDao.diaryTypeUpdate(con, diaryType);
}else{
saveNum=diaryTypeDao.diaryTypeAdd(con, diaryType);
}
if(saveNum>0){
request.getRequestDispatcher("diaryType?action=list").forward(request, response);
}else{
request.setAttribute("diaryType", diaryType);
request.setAttribute("error", "保存失败!");
request.setAttribute("mainPage", "diaryType/diaryTypeSave.jsp");
request.getRequestDispatcher("mainTemp.jsp").forward(request, response);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 日记类别删除
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void diaryTypeDelete(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String diaryTypeId=request.getParameter("diaryTypeId");
Connection con=null;
try{
con=dbUtil.getCon();
if(diaryDao.existDiaryWithTypeId(con, diaryTypeId)){
request.setAttribute("error", "日志类别下有日志,不能删除该类别!");
}else{
diaryTypeDao.diaryTypeDelete(con, diaryTypeId);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
HttpSession session=request.getSession(); // 获取session
String s_typeId=request.getParameter("s_typeId"); // 获取查询的类别id
String s_releaseDateStr=request.getParameter("s_releaseDateStr"); // 获取查询的发布日期
String s_title=request.getParameter("s_title"); // 获取查询的标题
String all=request.getParameter("all"); // 获取all
String page=request.getParameter("page"); // 获取当前页
Diary diary=new Diary();
if("true".equals(all)){ // 判断是否是全部
if(StringUtil.isNotEmpty(s_title)){ // 判断标题是否是空
diary.setTitle(s_title);
}
session.removeAttribute("s_releaseDateStr"); // 移除session中的发布日期属性
session.removeAttribute("s_typeId"); // 移除session中的类别id属性
session.setAttribute("s_title", s_title); // 移除session中的标题
}else{
if(StringUtil.isNotEmpty(s_typeId)){ // 判断类别id是否是空
diary.setTypeId(Integer.parseInt(s_typeId));
session.setAttribute("s_typeId", s_typeId);
session.removeAttribute("s_releaseDateStr");
session.removeAttribute("s_title");
}
if(StringUtil.isNotEmpty(s_releaseDateStr)){ // 判断发布日期是否是空
s_releaseDateStr=new String(s_releaseDateStr.getBytes("ISO-8859-1"),"UTF-8");
diary.setReleaseDateStr(s_releaseDateStr);
session.setAttribute("s_releaseDateStr", s_releaseDateStr);
session.removeAttribute("s_typeId");
session.removeAttribute("s_title");
}
if(StringUtil.isEmpty(s_typeId)){ // 判断类别id是否是空
Object o=session.getAttribute("s_typeId");
if(o!=null){
diary.setTypeId(Integer.parseInt((String)o));
}
}
if(StringUtil.isEmpty(s_releaseDateStr)){ // 判断发布日期是否是空
Object o=session.getAttribute("s_releaseDateStr");
if(o!=null){
diary.setReleaseDateStr((String)o);
}
diaryDao.diaryDelete(con, diaryId);
request.getRequestDispatcher("main?all=true").forward(request, response);
}catch(Exception e){
e.printStackTrace();
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 用户管理Servlet类
*
*/
public class UserServlet extends HttpServlet{
private void diaryTypeSave(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String diaryTypeId=request.getParameter("diaryTypeId");
String typeName=request.getParameter("typeName");
DiaryType diaryType=new DiaryType(typeName);
if(StringUtil.isNotEmpty(diaryTypeId)){
diaryType.setDiaryTypeId(Integer.parseInt(diaryTypeId));
}
Connection con=null;
try{
con=dbUtil.getCon();
int saveNum=0;
if(StringUtil.isNotEmpty(diaryTypeId)){
saveNum=diaryTypeDao.diaryTypeUpdate(con, diaryType);
}else{
saveNum=diaryTypeDao.diaryTypeAdd(con, diaryType);
}
if(saveNum>0){
request.getRequestDispatcher("diaryType?action=list").forward(request, response);
}else{
request.setAttribute("diaryType", diaryType);
request.setAttribute("error", "保存失败!");
request.setAttribute("mainPage", "diaryType/diaryTypeSave.jsp");
request.getRequestDispatcher("mainTemp.jsp").forward(request, response);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 日记类别删除
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void diaryTypeDelete(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String diaryTypeId=request.getParameter("diaryTypeId");
e.printStackTrace();
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 日记类别准备保存
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void diaryTypePreSave(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String diaryTypeId=request.getParameter("diaryTypeId");
if(StringUtil.isNotEmpty(diaryTypeId)){
Connection con=null;
try{
con=dbUtil.getCon();
DiaryType diaryType=diaryTypeDao.diaryTypeShow(con,diaryTypeId);
request.setAttribute("diaryType", diaryType);
}catch(Exception e){
e.printStackTrace();
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
request.setAttribute("mainPage", "diaryType/diaryTypeSave.jsp");
request.getRequestDispatcher("mainTemp.jsp").forward(request, response);
}
/**
* 日记类别保存
* @param request
* @param response
* @throws ServletException
* @throws IOException
/**
* 主页请求Servlet类
*
*/
public class MainServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
DbUtil dbUtil=new DbUtil(); // 实例化数据库工具对象
DiaryDao diaryDao=new DiaryDao(); // 实例化日记对象
DiaryTypeDao diaryTypeDao=new DiaryTypeDao(); // 实例化日记类别对象
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
HttpSession session=request.getSession(); // 获取session
String s_typeId=request.getParameter("s_typeId"); // 获取查询的类别id