用户注册记录字符串

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

问题: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传送到服务器处理.

原文地址:https://www.cnblogs.com/color-my-life/p/3991630.html