• 用户注册记录字符串


    今天涉及到了如何将用户输入信息保存的问题,这里附上一些代码,

    问题:A页面用户填写用户信息,提交服务器做完校验,如果通过,那么就跳转到其他页面,如果没有,那么就返回原本的页面,并且原本填写的信息还在,防止用户还需要重新填写

    问题分析:主要涉及到的是request只是用来两个页面之间传递参数的问题,比如A页面POST或者GET信息传递到服务器后,这个时候可以在Servlet通过request.getParameter的方式得到信息,但是当这个信息获取到了以后然后返回原本的页面的时候,这个时候相当于第三个页面了  就无法获取到第一个页面提交的信息了,所以需要通过session来共享信息,实现方法如下:

    充分利用表单的不同提交方式:GET和POST,get用来获取显示信息,POSt同来提交信息,那么现在实现方法如下:

    package com.zhangwei;
    
    import java.io.*;
    import javax.servlet.http.*;
    
    public class LoginServlet extends HttpServlet{
        
        //处理get请求
        public void doGet(HttpServletRequest req, HttpServletResponse res){
            res.setContentType("text/html; charset=GBK");
            try{
                PrintWriter pw = res.getWriter();
                //输出的html的代码,在表单部分的value设定为%s,用户字符串格式化
                String html = "<html><body>用户登录<form action=login method=POST>用户名:<input type=text name=username value=%s><br>"+
                    "昵称:<input type=text name=name value=%s><br>邮箱:<input type=text name=mail value=%s><br>"+
                    "密码:<input type=password name=passwd value=%s><br><input type=submit value=login><br></form></body></html>";
                HttpSession a = req.getSession(true);
                String username = (String)a.getAttribute("username");
                String name = (String)a.getAttribute("name");
                String mail = (String)a.getAttribute("mail");
                String password = (String)a.getAttribute("password");
                //服务器后台打印获取到的数据,用于调试
                System.out.print(username+name+password+mail);
                //将html代码格式化(也就是将从session中获取到的原本用户输入的信息放置到html页面中)
                html = String.format(html,username,name,mail,password);
                //写到response中
                pw.println(html);
            }
            catch (Exception e){
                e.printStackTrace();
            }
        }
        public void doPost(HttpServletRequest req, HttpServletResponse res){
            
            //由于要从request获取数据,默认编码是iso8859-1编码,会导致中文乱码,所以在获取数据之前先设定req的编码
            try{
                req.setCharacterEncoding("GBK");
            }catch(Exception e){
                e.printStackTrace();
            }
            
            //对post过来的数据先放置到session里面
            HttpSession hs = req.getSession(true);
            String username = req.getParameter("username");
            String name = req.getParameter("name");
            String mail = req.getParameter("mail");
            String password = req.getParameter("passwd");
            System.out.print(username+name+password+mail);
            hs.setAttribute("username",username);
            hs.setAttribute("name",name);
            hs.setAttribute("mail",mail);
            hs.setAttribute("password",password);
            //如果校验通过,session的数据将传递下去,比如给账号信息页面获取然后显示
            if("root".equals(username)){
                try{
                    res.sendRedirect("account");
                }catch(Exception e){
                    e.printStackTrace();
                }
            }else{
                //如果校验没有通过.那么就调用doget方法,从session中获取原本输入的参数并且显示
                this.doGet(req,res);
            }
        }
    }

    编译完成后配置好web.xml文件,然后启动tomcat服务器,测试时,如果输入的用户名不是root,那么返回页面如下:

    发现用户输入的信息没有通过校验的时候,成功返回了原本页面并且保留了用户输入的信息,这个时候url仍然为http://localhost:8080/sayhello/login,

    当校验通过时,跳转到了账户页面,显示了用户信息:

     在这个实现中,充分利用了Get和POST的各自特点:get传输数据量小,但是效率高,传递的参数会显式显示在url中.post方式传输的数据量大,但是效率没有get高,传输的参数放置到http的header中,安全性比get高,所以一般使用场合是:

      get用于向服务端获取数据,比如显示用户信息,查询等,当用户用浏览器打开一个地址,默认的是调用的get方法.post一般用于客户端向服务端传输数据,比如用户填写了注册的账号密码,这个时候通过post传送到服务器处理.

  • 相关阅读:
    java中有趣的unicode转义序列
    react父组件传入子组件的props不更新问题
    create-react-app修改端口号
    转移博客启动中。。。
    idea java界面设置中文
    记录一次 electronjs 12.0.0 安装运行出现cli.js出错、以及获取不到nodeapi的问题(解决办法:版本不对导致的)
    springboot 统一json返回格式,并设置http响应码
    springboot 统一json返回结构
    【Python】【PyPI】twine模块打包python项目上传pypi
    【GitHub】README.md自述文件配置
  • 原文地址:https://www.cnblogs.com/color-my-life/p/3991630.html
Copyright © 2020-2023  润新知