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

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

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());


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值