获取上一个页面的信息的方法有三种方式,以获取用户名和密码为例
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”
response.sendRedirect("/myServlet/MainFrameServlet?username="+userName+"&password="+password); 然后在主界面使用request.getParameter()获取userName= URLEncoder.encode(userName,"UTF-8");
3.使用session(可以传对象)//字符串要与sendRedirect中的字符保持一致 String userName=request.getParameter("username"); String password=request.getParameter("password"); writer.println("username="+userName+" password="+password);
在ControlServlet中添加以下代码然后在主界面使用request.getParameter()获取//第三种方法,使用session,可以传对象 request.getSession().setAttribute("name",userName); request.getSession().setAttribute("password",password); response.sendRedirect("/myServlet/MainFrameServlet");
String name=(String)request.getSession().getAttribute("name"); String password=(String) request.getSession().getAttribute("password");
session传对象的方法writer.println(name); writer.println(password);
新建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());