java web案例_java web综合案例

这篇博客详细介绍了使用Bootstrap、JSP、Servlet和三层架构实现的Java Web管理员登录功能,包括验证码的生成和验证。登录页面具备查询用户列表的增删改查功能,并涉及数据库设计和环境搭建。代码示例展示了CheckCodeServlet和LoginServlet的关键部分。
摘要由CSDN通过智能技术生成

1、采用的技术:

bootstrap+jsp+servlet+三层架构(servlet,service,dao)+mysql

注意:mysql使用的是5.5版本,使用高版本会有很多问题。可以将5.5版本安装在虚拟机上,这样方便很多

2、基本功能:

登录功能,有验证码功能 (因为这是个小demo,所以每个用户都是管理员,都有对其他用户的操作权限)-----此处很让人纠结

登陆进去有一个查询用户列表页面,该页面可以实现用户的增删改查。拓展功能为删除选中,分页功能,联合查询

登录界面:

000cd7c6be52d9b36b98c22746c82e59.png

用户列表页面:

d1bb851a26b5914976990a5ec0530f4a.png

修改页面:

2947ffebe52d576b3b5fa49a410a07b8.png

添加联系人页面:

c534ae9d1b6cfb3592ed7a93e3f0f9a9.png

三、数据库设计

表单设计:此处的name可以理解为昵称。登录使用的是username,password俩个字段

8ac59570caa3322e4549c89a63684249.png

四、环境搭建

jdk1.8,tomcat版本随意,不使用web.xml配置文件

b653c27deeabe7c909224a7f1536f997.png

五、代码开发

1、登录功能:

登录的jsp页面需要请求CheckCodeServlet(功能:生成验证码),CheckCodeServlet将验证码字符串存到session域中,并将图片返回给login.jsp

把提交表单提交给LoginServlet, LoginServlet先判断验证码是否正确

如果不正确,设置验证码错误的提示信息,跳转到login.jsp,让div显示提示

如果正确,根据获取的用户名,密码到数据库查询,

查到了跳转到登录成功页面。

没查到就 设置一个用户名密码的错误提示,存到request里面,然后login.jsp使用el表达式获取提示信息,显示在div内部

login.jsp代码如下:

1

2

3

4

5

6

7

管理员登录

8

9

10

11

12

13 functionrefreshCode() {14 var vcode=document.getElementById("vcode");15

16 vcode.src="${pageContext.request.contextPath}/checkCodeServlet ?time="+newDate().getTime();17 }18

19

20

21

22

管理员登录

23

24

25

26 用户名:

27

28

29

30

31 密码:

32

33

34

35

36 验证码:

37

38

39

40 checkCodeServlet

41

42

43


44

45

46

47

48

49

50

51 ${login_msg}

52

53 ×

54

55

56

57

58

59

60

CheckCodeServlet:

1 package cn.itcast.web.servlet;2

3 import javax.imageio.ImageIO;4 import javax.servlet.ServletException;5 import javax.servlet.annotation.WebServlet;6 import javax.servlet.http.HttpServlet;7 import javax.servlet.http.HttpServletRequest;8 import javax.servlet.http.HttpServletResponse;9 import java.awt.*;10 import java.awt.image.BufferedImage;11 import java.io.IOException;12 import java.util.Random;13

14 /**15 * 验证码16 */

17 @WebServlet("/checkCodeServlet")18 public class CheckCodeServlet extends HttpServlet {19 public voiddoGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {20

21 //服务器通知浏览器不要缓存

22 response.setHeader("pragma","no-cache");23 response.setHeader("cache-control","no-cache");24 response.setHeader("expires","0");25

26 //在内存中创建一个长80,宽30的图片,默认黑色背景

27 //参数一:长

28 //参数二:宽

29 //参数三:颜色

30 int width = 80;31 int height = 30;32 BufferedImage image = newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);33

34 //获取画笔

35 Graphics g =image.getGraphics();36 //设置画笔颜色为灰色

37 g.setColor(Color.GRAY);38 //填充图片

39 g.fillRect(0,0, width,height);40

41 //产生4个随机验证码,12Ey

42 String checkCode =getCheckCode();43 //将验证码放入HttpSession中

44 request.getSession().setAttribute("CHECKCODE_SERVER",checkCode);45

46 //设置画笔颜色为黄色

47 g.setColor(Color.YELLOW);48 //设置字体的小大

49 g.setFont(new Font("黑体",Font.BOLD,24));50 //向图片上写入验证码

51 g.drawString(checkCode,15,25);52

53 //将内存中的图片输出到浏览器

54 //参数一:图片对象

55 //参数二:图片的格式,如PNG,JPG,GIF

56 //参数三:图片输出到哪里去

57 ImageIO.write(image,"PNG",response.getOutputStream());58 }59 /**60 * 产生4位随机字符串61 */

62 private String getCheckCode() {63 String base = "0123456789ABCDEFGabcdefg";64 int size =base.length();65 Random r = newRandom();66 StringBuffer sb = newStringBuffer();67 for(int i=1;i<=4;i++){68 //产生0到size-1的随机值

69 int index =r.nextInt(size);70 //在base字符串中获取下标为index的字符

71 char c =base.charAt(index);72 //将c放入到StringBuffer中去

73 sb.append(c);74 }75 returnsb.toString();76 }77 public voiddoPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {78 this.doGet(request,response);79 }80 }

LoginServlet:

1 package cn.itcast.web.servlet;2

3 import cn.itcast.domain.User;4 import cn.itcast.service.UserService;5 import cn.itcast.service.impl.UserServiceImpl;6 import org.apache.commons.beanutils.BeanUtils;7

8 import javax.servlet.ServletException;9 import javax.servlet.annotation.WebServlet;10 import javax.servlet.http.HttpServlet;11 import javax.servlet.http.HttpServletRequest;12 import javax.servlet.http.HttpServletResponse;13 import javax.servlet.http.HttpSession;14 import java.io.IOException;15 import java.lang.reflect.InvocationTargetException;16 import java.util.Map;17

18 @WebServlet("/loginServlet")19 public class LoginServlet extends HttpServlet {20 protected voiddoPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {21 //1.设置编码

22 request.setCharacterEncoding("utf-8");23

24 //2.获取数据

25 //2.1获取用户填写验证码

26 String verifycode = request.getParameter("verifycode");27

28 //3.验证码校验

29 HttpSession session =request.getSession();30 String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");31

32 session.removeAttribute("CHECKCODE_SERVER");//确保验证码一次性

33 if(!checkcode_server.equalsIgnoreCase(verifycode)){34 //验证码不正确

35 //提示信息

36 request.setAttribute("login_msg","验证码错误!");37 //跳转登录页面

38 request.getRequestDispatcher("/login.jsp").forward(request,response);39

40 return;41 }42

43 Map map =request.getParameterMap();44 //4.封装User对象

45 User user = newUser();46 try{47 BeanUtils.populate(user,map);48 } catch(IllegalAccessException e) {49 e.printStackTrace();50 } catch(InvocationTargetException e) {51 e.printStackTrace();52 }53

54

55 //5.调用Service查询

56 UserService service = newUserServiceImpl();57 User loginUser =service.login(user);58 //6.判断是否登录成功

59 if(loginUser != null){60 //登录成功

61 //将用户存入session

62 session.setAttribute("user",loginUser);63 //跳转页面

64 response.sendRedirect(request.getContextPath()+"/index.jsp");65 }else{66 //登录失败

67 //提示信息

68 request.setAttribute("login_msg","用户名或密码错误!");69 //跳转登录页面

70 request.getRequestDispatcher("/login.jsp").forward(request,response);71

72 }73

74

75 }76

77 protected voiddoGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {78 this.doPost(request, response);79 }80 }

2、列表查询

分析:

bd45e3025b8b52b443fa44dee19774b0.png

六、总结

每次做完一个功能要重启服务器,负责看不到代码效果会让你以为错了,进而要浪费很长时间看哪里有问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值