zoukankan      html  css  js  c++  java
  • JSP Servlet SQL 三者之间数据传递

    前言:

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

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

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

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

    背景:

           目前业界很流行的MVC(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,完成

    原文地址:http://java--hhf.iteye.com/blog/1973375

  • 相关阅读:
    Win8系统 Python安装
    一些安卓开源框架整理
    Android 媒体键监听以及模拟媒体键盘的实现 demo
    android View 自动 GONE 问题
    Android 定时器TimerTask 简单使用
    关于Android studio 相对 eclipse 优点
    Java序列化与反序列化
    android shape的使用 边框
    Android Studio 修改 包名 package name
    Android WebView Long Press长按保存图片到手机
  • 原文地址:https://www.cnblogs.com/bohanfu/p/5694963.html
Copyright © 2011-2022 走看看