• JSP、servlet、SQL三者之间的数据传递


    前言:

           最近一直在做WEB开发,现总结一下这一段时间的体会和感触。

           切记,web开发重点在于前台数据交互,页面美化而不要太沉溺于底层数据。

           浏览器时代来到,向我们召唤出更炫、更简洁、更方便、更大气的网站。

           这篇博客目的在于为大家解决web开发中最基础的数据传递操作,让大家有一个好的起点,在web开放中更加游刃有余

    背景:

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

                  模型是javaBean,

                  视图是JSP,

                 控制是servlet。

           web的运行机制:

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

     正文:

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

    (一)从JSP到servlet

    1、发信息

    表单提交

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

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

    Html代码  收藏代码
    1. <script>  
    2. $(document).ready(function(){  
    3.             $("#被单击按钮的ID").click(function(){  
    4.             if(document.all.文本框名字.value.length==0){  
    5.                 alert("输入不能为空");  
    6.                 return false;  
    7.             }  
    8.             document.all.表单名字submit();  
    9.             return true;});  
    10. });  
    11. </script>  

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

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

    ok,完成

    (二)从servlet到数据库

    1、获得数据(MySql为例)

    ①创建数据库连接池

    创建一个配置文件,如图

    确保名字一致,

    Xml代码  收藏代码
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <Context>  
    3.     <Resource name="jdbc/LeLe"    
    4.         auth="Container"  
    5.         type="javax.sql.DataSource"  
    6.         maxActive="50"  
    7.         maxIdle="5"  
    8.         maxWait="10000"  
    9.         logAbandoned="true"  
    10.         username=""  
    11.         password=""  
    12.         driverClassName="com.mysql.jdbc.Driver"  
    13.         url="jdbc:mysql://localhost:3306/lele" />  
    14. </Context>  
    15. <!-- jdbc/LeLe为项目名 -->  

    ②获取链接

    Java代码  收藏代码
    1. public static Connection getConnection() {  
    2.   
    3.     Connection con = null;    //创建用于连接数据库的Connection对象  
    4.     DataSource ds = null;  
    5.     try {  
    6.   
    7.         Context initContext = new InitialContext();  
    8.         Context envContext = (Context)initContext.lookup("java:/comp/env");  
    9.         ds = (DataSource)envContext.lookup("jdbc/LeLe");  
    10.         System.out.println(ds.getConnection());  
    11.     } catch (Exception e1) {  
    12.         System.out.println("加载数据库驱动失败"+e1);     
    13.         return null;  
    14.     }// 加载Mysql数据驱动  
    15.     try {  
    16.         con = ds.getConnection();// 创建数据连接  
    17.         System.out.println("数据库连接成功了");     
    18.         return con;    //返回所建立的数据库连接  
    19.              
    20.     } catch (Exception e) {  
    21.         System.out.println("数据库连接失败" + e.getMessage());  
    22.         return null;  
    23.     }  
    24. }  

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

    Java代码  收藏代码
    1. /* 查询数据库,输出符合要求的记录的情况*/  
    2.     private static Connection conn;  
    3.     private static Statement st;  
    4.     private static ResultSet rs;  
    5. //    public static void main(String [] args){  
    6. //        query("select * from agreement");  
    7. //    }  
    8.     public static ResultSet query(String sql ) {  
    9.         System.out.println("函数DBQuery日志");  
    10.         if(conn == null){  
    11.             conn = DBConnection.getConnection();    //同样先要获取连接,即连接到数据库  
    12.             if(conn == null){  
    13.                 System.out.println("数据库连接失败" );  
    14.                 return null;  
    15.             }  
    16.         }  
    17.         System.out.println("查询函数中连接到数据库数据成功"+conn);  
    18.   
    19.         try {  
    20.             st = (Statement) conn.createStatement();    //创建用于执行静态sql语句的Statement对象,st属局部变量     
    21.             rs = (ResultSet)st.executeQuery(sql);    //执行sql查询语句,返回查询数据的结果集  
    22.             if(!rs.next()){  
    23.                 System.out.println("数据库中未查询到数据");  
    24.                 return null;  
    25.             }         
    26.             System.out.println("数据库中已经查询到数据");  
    27. //            String agreement_id = rs.getString(1);     
    28. //            String agreement_content = rs.getString(2);  
    29. //            System.out.println("已经查询到数据的数据为----agreement_id:"+agreement_id+" agreement_content:"+agreement_content);  
    30.             return rs;  
    31.         } catch (SQLException e) {  
    32.             System.out.println("数据库中查数据失败");  
    33.             return null;  
    34.         }  
    35.          
    36.     }  
    37.   
    38.     public static void closeDB() throws SQLException{  
    39.         if(null != rs)  
    40.             rs.close();  
    41.         if(null != st)  
    42.             st.close();  
    43.         if(null != conn)  
    44.             conn.close();    //关闭数据库连接  
    45.     }  

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

    Java代码  收藏代码
    1. if(rs != null){  
    2.     do{  
    3.         User user0=new User();//一个javaBean的实例化对象  
    4.         user0.setUser_id(rs.getString("user_id"));  
    5.         user0.setUser_name(rs.getString("user_name"));  
    6.         user0.setUser_email(rs.getString("user_email"));  
    7.         user0.setUser_password(rs.getString("user_password"));  
    8.         collection.add(user0);  
    9.         System.out.println(rs.getString("user_id"));  
    10.         System.out.println(rs.getString("user_name"));  
    11.         System.out.println(rs.getString("user_email"));  
    12.         System.out.println(rs.getString("user_password"));  
    13.     }while(rs.next());  
    14. }  
    Java代码  收藏代码
    1. public class User {  
    2.     private String user_id;//用户编号  
    3.     private String user_email;//用户邮编  
    4.     private String user_name;//用户名  
    5.     private String user_password;//用户密码  
    6.      
    7.     public String getUser_id() {  
    8.         return user_id;  
    9.     }  
    10.     public void setUser_id(String userId) {  
    11.         user_id = userId;  
    12.     }  
    13.     public String getUser_email() {  
    14.         return user_email;  
    15.     }  
    16.     public void setUser_email(String userEmail) {  
    17.         user_email = userEmail;  
    18.     }  
    19.     public String getUser_name() {  
    20.         return user_name;  
    21.     }  
    22.     public void setUser_name(String userName) {  
    23.         user_name = userName;  
    24.     }  
    25.     public String getUser_password() {  
    26.         return user_password;  
    27.     }  
    28.     public void setUser_password(String userPassword) {  
    29.         user_password = userPassword;  
    30.     }  
    31. }  

    ok,完成

    (三)从servlet到JSP

    1、发数据

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

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

    2、接收数据

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

    Java代码  收藏代码
    1. Collection<User> collectionUser=(Collection<User>)request.getAttribute("test");  
    2. Iterator it=collectionUser.iterator();  
    3. while(it.hasNext())  
    4. {  
    5.     User user=(User)it.next();  
    6.     out.println("<td ><div align='center'>"+user.getUser_name()+"</td>");         
    7.     out.println("<td ><div align='center'><a href='#' onclick=window.open('MyJsp.jsp?usid="+user.getUser_id().trim()+"','newwindow','width=600,height=350,top=300,left=300')>管理</a></td>");  
    8.     out.println("</tr>");  
    9. }  

     ok,完成

    结束语:

               推荐一本JavaScript进阶读物--------《JavaScript修炼之道》

               推荐一本项目开发实录书籍----------《Java项目开发案例全程实录》

  • 相关阅读:
    [背包]JZOJ 3232 【佛山市选2013】排列
    内核空间、用户空间、虚拟地址
    进程与线程的概念
    Python中字符串颜色
    socket编程
    模块与包
    常用模块
    面向对象进阶
    面向对象编程
    函数式编程
  • 原文地址:https://www.cnblogs.com/yhoralce/p/java.html
Copyright © 2020-2023  润新知