zoukankan      html  css  js  c++  java
  • servlet如何获取jsp表单里的数据

    先看一下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">&nbsp;<jsp:getProperty name="regUser" property="username"/></td>
     6         </tr>
     7         <tr>
     8           <td class="title">密码:</td>
     9           <td class="content">&nbsp;<jsp:getProperty name="regUser" property="mypassword"/></td>
    10         </tr>
    11         <tr>
    12           <td class="title">E-mail:</td>
    13           <td class="content">&nbsp;<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,把数据传入到了目标页面(实际上也未必需要传入到一个页面,只是这个例子里是在目标页面获取数据并显示,实际上也可能是传入到其他地方)。

     

      

  • 相关阅读:
    Redis安装
    mysql 存储过程与存储函数
    mysql 常用函数
    cpu-z笔记本加条子
    centos上网络服务起不来network.service failed
    centos/redhat命令行上传下载文件
    docker删除已经停止的容器
    centos/redhat/ubuntu不同之处
    部署lamp动态网站(图解)
    写交互式脚本时,遇到到报错:not a regular file
  • 原文地址:https://www.cnblogs.com/youwuyi/p/10250050.html
Copyright © 2011-2022 走看看