JSP、servlet、SQL之间的数据传递

xiaoxiao2021-02-28  96

背景:

       目前业界很流行的WVC(model-view-control)开发模式,具体暂可理解为

              模型是javaBean,

              视图是JSP,

             控制是servlet。

       web的运行机制:

              数据首先在jsp上被展示出来,用户看到页面后触发一些事件,并可能传递数据,这些数据和请求被控制器接收到,然后开始处理(往往会需要有一些数据库的操作(查询,修改数据库数据)),当这些处理结束后,我们就需要将数据反馈到JSP上显示给用户看,完成一次完整的交互过程。

 正文:   

    根据背景所述的顺序,我们依次介绍----如何从JSP传数据到servlet并接收、如何在servlet里面获得数据库数据并处理、如何将servlet内的数据传递给jsp并显示在网页上。

 

(一)从JSP到servlet

1、发信息

表单提交

Html代码   <form action="相对地址URL" name="表单名字" method="提交方式(post(推荐)、get)">              <input type="text" name="文本框名字"  /><!--一个文本输入框-->      </form>  

 

定义一个函数来处理表单文本框检查非空并提交表单事件

Html代码   <script>   $(document).ready(function(){               $("#被单击按钮的ID").click(function(){               if(document.all.文本框名字.value.length==0){                   alert("输入不能为空");                   return false;               }               document.all.表单名字submit();               return true;});   });   </script>  

 

2、收信息来到表单提交时URL所指向的servlet文件,获取传递过来的参数值

Java代码   String search = java.net.URLDecoder.decode(request.getParameter("文本框名字"),"utf-8");   System.out.println("在search的servlet中接收到的search参数为-->"+search);      

 

ok,完成

 

(二)从servlet到数据库

1、获得数据(MySQL为例)

①创建数据库连接池

创建一个配置文件,如图

确保名字一致,

Xml代码   <?xml version="1.0" encoding="UTF-8"?>   <Context>       <Resource name="jdbc/LeLe"             auth="Container"           type="javax.sql.DataSource"           maxActive="50"           maxIdle="5"           maxWait="10000"           logAbandoned="true"           username=""           password=""           driverClassName="com.mysql.jdbc.Driver"           url="jdbc:mysql://localhost:3306/lele" />   </Context>   <!-- jdbc/LeLe为项目名 -->  

 

②获取链接

Java代码   public static Connection getConnection() {          Connection con = null;    //创建用于连接数据库的Connection对象       DataSource ds = null;       try {              Context initContext = new InitialContext();           Context envContext = (Context)initContext.lookup("java:/comp/env");           ds = (DataSource)envContext.lookup("jdbc/LeLe");           System.out.println(ds.getConnection());       } catch (Exception e1) {           System.out.println("加载数据库驱动失败"+e1);              return null;       }// 加载Mysql数据驱动       try {           con = ds.getConnection();// 创建数据连接           System.out.println("数据库连接成功了");              return con;    //返回所建立的数据库连接                     } catch (Exception e) {           System.out.println("数据库连接失败" + e.getMessage());           return null;       }   }  

 

③执行SQL语句,并返回结果

Java代码   /* 查询数据库,输出符合要求的记录的情况*/       private static Connection conn;       private static Statement st;       private static ResultSet rs;   //    public static void main(String [] args){   //        query("select * from agreement");   //    }       public static ResultSet query(String sql ) {           System.out.println("函数DBQuery日志");           if(conn == null){               conn = DBConnection.getConnection();    //同样先要获取连接,即连接到数据库               if(conn == null){                   System.out.println("数据库连接失败" );                   return null;               }           }           System.out.println("查询函数中连接到数据库数据成功"+conn);              try {               st = (Statement) conn.createStatement();    //创建用于执行静态sql语句的Statement对象,st属局部变量                  rs = (ResultSet)st.executeQuery(sql);    //执行sql查询语句,返回查询数据的结果集               if(!rs.next()){                   System.out.println("数据库中未查询到数据");                   return null;               }                      System.out.println("数据库中已经查询到数据");   //            String agreement_id = rs.getString(1);      //            String agreement_content = rs.getString(2);   //            System.out.println("已经查询到数据的数据为----agreement_id:"+agreement_id+"\tagreement_content:"+agreement_content);               return rs;           } catch (SQLException e) {               System.out.println("数据库中查数据失败");               return null;           }                 }          public static void closeDB() throws SQLException{           if(null != rs)               rs.close();           if(null != st)               st.close();           if(null != conn)               conn.close();    //关闭数据库连接       }  

 

2、处理数据(使用javaBean保存数据)

Java代码   if(rs != null){       do{           User user0=new User();//一个javaBean的实例化对象           user0.setUser_id(rs.getString("user_id"));           user0.setUser_name(rs.getString("user_name"));           user0.setUser_email(rs.getString("user_email"));           user0.setUser_password(rs.getString("user_password"));           collection.add(user0);           System.out.println(rs.getString("user_id"));           System.out.println(rs.getString("user_name"));           System.out.println(rs.getString("user_email"));           System.out.println(rs.getString("user_password"));       }while(rs.next());   }  

 

Java代码   public class User {       private String user_id;//用户编号       private String user_email;//用户邮编       private String user_name;//用户名       private String user_password;//用户密码             public String getUser_id() {           return user_id;       }       public void setUser_id(String userId) {           user_id = userId;       }       public String getUser_email() {           return user_email;       }       public void setUser_email(String userEmail) {           user_email = userEmail;       }       public String getUser_name() {           return user_name;       }       public void setUser_name(String userName) {           user_name = userName;       }       public String getUser_password() {           return user_password;       }       public void setUser_password(String userPassword) {           user_password = userPassword;       }   }  

 

ok,完成

 

(三)从servlet到JSP

1、发数据

使用重定向将request和response转发给一个JSP

Java代码   //将数据发到JSP   RequestDispatcher rd = request.getRequestDispatcher("index_search.jsp");   request.setAttribute("test",collection);//存值   rd.forward(request,response);//开始跳转  

 

2、接收数据

来到重定向指向的URL中获取刚才发送过来的数据,并显示在网页上

Java代码   Collection<User> collectionUser=(Collection<User>)request.getAttribute("test");   Iterator it=collectionUser.iterator();   while(it.hasNext())   {       User user=(User)it.next();       out.println("<td ><div align='center'>"+user.getUser_name()+"</td>");              out.println("<td ><div align='center'><a href='#' οnclick=window.open('MyJsp.jsp?usid="+user.getUser_id().trim()+"','newwindow','width=600,height=350,top=300,left=300')>管理</a></td>");       out.println("</tr>");   }  
转载请注明原文地址: https://www.6miu.com/read-64340.html

最新回复(0)