servlet下一个页面获取上一个页面的信息

来源:互联网 发布:守望先锋mac能玩吗 编辑:程序博客网 时间:2024/06/05 18:12

获取上一个页面的信息的方法有三种方式,以获取用户名和密码为例

1.使用关键字Static关键字可以实现,static修饰的变量在一个类中只保存一份,可以通过getter和setter获取。Java类实现如下:

public class DataTest {    private static String userName;    private static String password;    public static String getUserName() {        return userName;    }    public static void setUserName(String userName) {        DataTest.userName = userName;    }    public static String getPassword() {        return password;    }    public static void setPassword(String password) {        DataTest.password = password;    }}
登录界面使用servlet实现,jsp实现比较好,然而现在我还不会,所以以后再改进吧。基本上是由HTML组成,提交方式为post

public class LoginServlet extends javax.servlet.http.HttpServlet {    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {        response.setContentType("text/html;charset=utf-8");        PrintWriter writer=response.getWriter();        writer.println("<html><head><title>Login</title><head>");        writer.println("<body><h3>Login Frame</h3>");        writer.println("<form method='post' action='/myServlet/control'>");        writer.println("用户名:<input type='text' name='username' /><br/>");        writer.println("密 码:<input type='password' name='password' /><br/>");        writer.println("<input type='submit' value='登录'/>");        writer.println("</form></body></html>");    }    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {        this.doPost(request,response);    }}
然后由一个servlet控制跳转到哪一个页面,使用response.sendRedirect方法,使用httpfox可以看到会出现一个状态码,表示资源需要跳转到另一个页面。

public class ControlServlet extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        response.setContentType("text/html;charset=utf-8");        //解决中文乱码        request.setCharacterEncoding("utf-8");        //获取用户名和密码        String userName=request.getParameter("username");        String password=request.getParameter("password");        //第一种方法,使用全局变量static        DataTest.setUserName(userName);        DataTest.setPassword(password);            response.sendRedirect("/myServlet/MainFrameServlet");    }

然后在主界面就可以获取用户名和密码

public class MainFrameServlet extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        response.setContentType("text/html;charset=utf-8");        PrintWriter writer=response.getWriter();        writer.println("<html><head><title>mainFrame</title></head>");        writer.println("<body><h3>main Frame</h3>");        writer.println("userName="+ DataTest.getUserName());        writer.println("password="+DataTest.getPassword());        writer.println("</body></html>");    }

2.使用sendRedirect(不能传对象)

在ControlServlet中添加以下代码

//第二种方法,使用sendRedirect将变量名放入资源名后面,只能传字符,不能传对象//解决中文乱码问题,将userName编码设置为“UTF-8”
 userName= URLEncoder.encode(userName,"UTF-8");
 response.sendRedirect("/myServlet/MainFrameServlet?username="+userName+"&password="+password);
然后在主界面使用request.getParameter()获取

        //字符串要与sendRedirect中的字符保持一致 String userName=request.getParameter("username"); String password=request.getParameter("password"); writer.println("username="+userName+" password="+password);
3.使用session(可以传对象)
在ControlServlet中添加以下代码

        //第三种方法,使用session,可以传对象 request.getSession().setAttribute("name",userName); request.getSession().setAttribute("password",password); response.sendRedirect("/myServlet/MainFrameServlet");
然后在主界面使用request.getParameter()获取

String name=(String)request.getSession().getAttribute("name");String password=(String) request.getSession().getAttribute("password");
writer.println(name);writer.println(password);
session传对象的方法

新建User类,包含username和password变量,并且实现getter和setter方法,然后在ControlServlet中新建一个对象,并将用户名和密码传入对象,代码如下:

 User user=new User(); user.setUsername(userName); user.setPassword(password); request.getSession().setAttribute("userObj",user); response.sendRedirect("/myServlet/MainFrameServlet");
然后在主界面获取对象,并得到用户名和密码

 User user=(User)request.getSession().getAttribute("userObj"); writer.println("username="+user.getUsername()+" password="+user.getPassword());