JavaWeb作业servlet应用
首先在idea中创建一个web项目,环境配置和项目依赖一系列配置完成后创建一个servlet进行测试输出,配置这里可以参考一篇博客:https://blog.csdn.net/herojuice/article/details/85209326
这里我创建的是helloservlet
然后在web.xml中配置一下,就可以/hello的方式访问到这个servlet
运行项目并在网址后面加上hello访问
运行测试成功,将登录网页的相关文件复制到项目文件夹web下
新建一个servlet实现连接数据库进行登录验证,并且通过cookie保存用户信息一段时间
这里数据库我使用的是SQLserver2018,表的信息如下
LoginServer信息:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=UTF-8"); request.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); String strName = request.getParameter("username"); String strPwd = request.getParameter("password"); out.println("您好!"+strName+" "+strPwd + "<br>"); Connection conn = null; Statement stmt; ResultSet rs; try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); conn= DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databasename=News","sql用户名","sql密码"); stmt = conn.createStatement(); String sql = "select * from UserInfo where username='"+strName+"' and password='"+strPwd+"'"; rs=stmt.executeQuery(sql); if (rs.next()) { out.println("您好!" + strName + " "+strPwd + "<br>"); Cookie cooUserName= new Cookie("username", strName);//创建一个键值对的cookie对象 cooUserName.setMaxAge(60*60*24*7);//设置cookie的生命周期 response.addCookie(cooUserName);//添加到response中 Cookie cooPwd= new Cookie("pwd", strPwd);//创建一个键值对的cookie对象 cooPwd.setMaxAge(60*60*24*7);//设置cookie的生命周期 response.addCookie(cooPwd);//添加到response中 HttpSession session = request.getSession(true); session.setAttribute("username", strName); /*String path = request.getContextPath(); System.out.println("path:"+path); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; String page=basePath+"/page/index.html"; System.out.println("basePath:"+basePath); response.sendRedirect(page);*/ } else { out.println("错误的用户名和密码"); } rs.close(); conn.close(); stmt.close(); } catch (Exception e) { System.out.println(e); } }
web.xml中配置一下,以login的方式访问
于是在web登录网页中的表单把action设置为login,由于我的LoginServlet是在dopost中进行处理的,所以表单也要以post方法提交
<form id="login" action="login" method="post">
然后就能运行项目进行测试了
这里先输入数据库中正确的用户名和密码进行测试,点击登录后会显示如下信息,而且会弹出提醒是否保存cookie信息,保存后下次进入登录页面会自动读取登录信息
没有问题,再来试一下错误的用户名和密码
也没有问题,提示了是错误的用户名和密码,这里还有个问题,正常情况下在输入框中输入中文后,servlet接收和输出的应该会是乱码,我这里输入的用户名也是中文,但是没有产生乱码,这是使用了Filter过滤器的原因,将网页编码和后端编码统一了,所以前后端交互不会产生乱码。下面介绍一下过滤器的创建:
在项目文件夹中右键创建一个Filter,我这里取名为GBFilter
GBFilter代码:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { String encoding=request.getCharacterEncoding();//原来的编码 System.out.println("before encoding " + encoding + " filter!"); encoding="utf-8";//新编码 request.setCharacterEncoding(encoding); response.setContentType("text/html;charset="+encoding); chain.doFilter(request, response); System.out.println("after encoding " + encoding + " filter!"); System.err.println("----------------------------------------"); }
web.xml配置:
现在重新运行项目后就不会产生乱码了,最后附上源代码,
码云链接:https://gitee.com/cadaver/servlet