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

 

posted @ 2020-06-05 15:33  cadaver  阅读(254)  评论(0编辑  收藏  举报