先看一下jsp的表单里有哪些数据:
1 <form name="regForm" action="servlet/RegServlet" method="post" > 2 <table border="0" width="800" cellspacing="0" cellpadding="0"> 3 <tr> 4 <td class="lalel">用户名:</td> 5 <td class="controler"><input type="text" name="username" /></td> 6 </tr> 7 <tr> 8 <td class="label">密码:</td> 9 <td class="controler"><input type="password" name="mypassword" ></td> 10 11 </tr> 12 <tr> 13 <td class="label">确认密码:</td> 14 <td class="controler"><input type="password" name="confirmpass" ></td> 15 16 </tr> 17 <tr> 18 <td class="label">电子邮箱:</td> 19 <td class="controler"><input type="text" name="email" ></td> 20 21 </tr> 22
只是部分代码,说明一下流程。
jsp表单数据里有用户名username;密码mypassword;邮箱email。
第一,需要有一个实体类专门放数据(项目里的model?)
这个类是一个javabean,有属性变量(对应表单里的数据);有针对属性变量的get和set方法。
1 //用户实体类 2 public class Users { 3 4 private String username; //用户名 5 private String mypassword; //密码 6 private String email; //电子邮箱 7 8 public Users() 9 { 10 11 } 12 13 public String getUsername() { 14 return username; 15 } 16 public void setUsername(String username) { 17 this.username = username; 18 } 19 public String getMypassword() { 20 return mypassword; 21 } 22 public void setMypassword(String mypassword) { 23 this.mypassword = mypassword; 24 } 25 public String getEmail() { 26 return email; 27 } 28 public void setEmail(String email) { 29 this.email = email; 30 } 31 }
(可以只写属性,然后通过 右键---Source--生成getter和setter自动创建get和set方法)
第二 servelt赋值给实体类
1. 创建一个servelt
Jsp的表单里的<form name=” …” action=”这里是servelt的url,一般就是 包名/servelt类名” method=”get/post”>。上面的代码里是 servlet/RegServlet
2. Servlet里要重写doGet(),doPost()
表单的提交方法Method=post时:
doGet(){ 里面就直接写doPost(request,response); }
doPost(){这里new一个第一步里的实体类,声明对应的变量}
39 Users u = new Users(); //用来存放数据的实体类Users 40 String username,mypassword,email; // 对应的属性变量的声明,用来接收表单数据。
1 public class RegServlet extends HttpServlet { 2 3 public RegServlet() { 4 super(); 5 } 6 7 public void destroy() { 8 super.destroy(); // Just puts "destroy" string in log 10 } 11 18 public void doGet(HttpServletRequest request, HttpServletResponse response) 19 throws ServletException, IOException { 20 21 doPost(request,response); 22 } 23 34 public void doPost(HttpServletRequest request, HttpServletResponse response) 35 throws ServletException, IOException { 36 37 request.setCharacterEncoding("utf-8"); //防止中文乱码 38 39 Users u = new Users(); //用来存放数据的实体类Users 40 String username,mypassword,email; // 对应的属性变量的声明,用来接收表单数据。 46 try 47 { 48 username = request.getParameter("username"); //通过request.getParamater ()获取表单穿进来的值。 49 mypassword = request.getParameter("mypassword");
51 email = request.getParameter("email"); 52 introduce = request.getParameter("introduce"); 53 birthday = sdf.parse(request.getParameter("birthday")); 64 u.setUsername(username); 65 u.setMypassword(mypassword); 67 u.setEmail(email); 79 80 //把注册成功的用户对象保存在session中 81 request.getSession().setAttribute("regUser", u); 82 //跳转到注册成功页面 83 request.getRequestDispatcher("../userinfo.jsp").forward(request,response); 84 } 85 catch(Exception ex) 86 { 87 ex.printStackTrace(); 88 } 89 90 91 } 92 98 public void init() throws ServletException { 99 // Put your code here 100 } 101 102 }
(代码不全,只是说明一下流程)
3. 然后取值
通过request.getParamater ()获取表单穿进来的值。字符串的话用request.getParamaterValues()。
然后用实体类的set方法赋值:
所以流程就是创建一个存放表单数据的实体类,servelt里new一个实体类的对象,通过request.getParamater ()获取表单的数据,然后通过实体类对象的set方法把数据存放到对象的属性变量里。
4. 然后页面跳转
这里用的是服务器内部跳转, 因为servelt这个Java文件和要跳转的jsp不在一个目录,所以地址里有” ../”,回退到根目录
跳转之前先保存这个表单对象,也就是上面那句request.getSession().setAttribute("regUser", u)。
这个regUser是一个id,目标页面获取值得时候要用。
5. 目标页面获取数据
目标页面代码
1 <jsp:useBean id="regUser" class="entity.Users" scope="session"/> 2 <table width="600" cellpadding="0" cellspacing="0" border="1"> 3 <tr> 4 <td class="title">用户名:</td> 5 <td class="content"> <jsp:getProperty name="regUser" property="username"/></td> 6 </tr> 7 <tr> 8 <td class="title">密码:</td> 9 <td class="content"> <jsp:getProperty name="regUser" property="mypassword"/></td> 10 </tr> 11 <tr> 12 <td class="title">E-mail:</td> 13 <td class="content"> <jsp:getProperty name="regUser" property="email"/></td> 14 </tr>
使用jsp:useBean 动作标签。<jsp:useBean id="regUser" class="entity.Users" scope="session"/> 里的 id和前面servelt里保存到session里时的id对应,class就是实体类的名(包名/类名),范围scope就是 session。
通过jsp:getProperty标签获取属性数据: <jsp:getProperty name="regUser" property="mypassword"/></td> 。 name是javabeans的名,property就是属性值。
自此,从一个jsp页面传入的数据,通过一个存放数据的javabean实体类,一个servelt,把数据传入到了目标页面(实际上也未必需要传入到一个页面,只是这个例子里是在目标页面获取数据并显示,实际上也可能是传入到其他地方)。