首页 > 代码库 > 用户注册记录字符串

用户注册记录字符串

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

问题: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=http://www.mamicode.com/%s>
"+ "昵称:<input type=text name=name value=%s><br>邮箱:<input type=text name=mail value=http://www.mamicode.com/%s>
"+ "密码:<input type=password name=passwd value=http://www.mamicode.com/%s>

"; 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传送到服务器处理.

用户注册记录字符串