前言:

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

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

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

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

背景:

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

模型是javaBean,

视图是JSP,

控制是servlet。

web的运行机制:

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

正文:

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

(一)从JSP到servlet

1、发信息

表单提交

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

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

  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文件,获取传递过来的参数值

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

ok,完成

(二)从servlet到数据库

1、获得数据(MySql为例)

①创建数据库连接池

创建一个配置文件,如图

确保名字一致,

  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为项目名 -->

②获取链接

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

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

  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. try {
  19. st = (Statement) conn.createStatement();    //创建用于执行静态sql语句的Statement对象,st属局部变量
  20. rs = (ResultSet)st.executeQuery(sql);    //执行sql查询语句,返回查询数据的结果集
  21. if(!rs.next()){
  22. System.out.println("数据库中未查询到数据");
  23. return null;
  24. }
  25. System.out.println("数据库中已经查询到数据");
  26. //            String agreement_id = rs.getString(1);
  27. //            String agreement_content = rs.getString(2);
  28. //            System.out.println("已经查询到数据的数据为----agreement_id:"+agreement_id+"\tagreement_content:"+agreement_content);
  29. return rs;
  30. } catch (SQLException e) {
  31. System.out.println("数据库中查数据失败");
  32. return null;
  33. }
  34. }
  35. public static void closeDB() throws SQLException{
  36. if(null != rs)
  37. rs.close();
  38. if(null != st)
  39. st.close();
  40. if(null != conn)
  41. conn.close();    //关闭数据库连接
  42. }

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

  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. }
  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. public String getUser_id() {
  7. return user_id;
  8. }
  9. public void setUser_id(String userId) {
  10. user_id = userId;
  11. }
  12. public String getUser_email() {
  13. return user_email;
  14. }
  15. public void setUser_email(String userEmail) {
  16. user_email = userEmail;
  17. }
  18. public String getUser_name() {
  19. return user_name;
  20. }
  21. public void setUser_name(String userName) {
  22. user_name = userName;
  23. }
  24. public String getUser_password() {
  25. return user_password;
  26. }
  27. public void setUser_password(String userPassword) {
  28. user_password = userPassword;
  29. }
  30. }

ok,完成

(三)从servlet到JSP

1、发数据

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

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

2、接收数据

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

  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项目开发案例全程实录》

JSP、servlet、SQL三者之间的数据传递的更多相关文章

  1. JSP Servlet SQL 三者之间数据传递

    前言: 最近一直在做WEB开发,现总结一下这一段时间的体会和感触. 切记,web开发重点在于前台数据交互,页面美化而不要太沉溺于底层数据. 浏览器时代来到,向我们召唤出更炫.更简洁.更方便.更大气的网 ...

  2. 一、JSP、servlet、SQL三者之间的数据传递(前台与后台数据交互)

    背景: 目前业界很流行的MVC(model-view-control)开发模式,理解为 模型是Bean, 视图是 Html/Jsp, 控制是Servlet, 关联数据库的Dao web的运行机制: 数 ...

  3. 二、JSP、servlet、SQL三者之间的数据传递(前台与后台数据交互)

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

  4. activity之间的数据传递方法

    1  基于消息的通信机制 Intent--------boudle,extra 用这种简单的形式,一般而言传递一些简单的类型是比较容易的,如int.string等 详细介绍下Intent机制 Inte ...

  5. Vue基础知识之组件及组件之间的数据传递(五)

    vue中的组件是自定的标签,可以扩展的原生html元素,封装可复用的代码 note: 1.在标签命中不要使用大写,标签名字必须用短横线隔开 2.模板中只能有一个根元素,不能使用并列标签. 定义组件 全 ...

  6. ASP.NET MVC3中Controller与View之间的数据传递

    在ASP.NET MVC中,经常会在Controller与View之间传递数据,因此,熟练.灵活的掌握这两层之间的数据传递方法就非常重要.本文从两个方面进行探讨: 一.  Controller向Vie ...

  7. Activity之间的数据传递

    最常用的Activity之间的数据传递. btnStartAty1.setOnClickListener(new View.OnClickListener() { @Override public v ...

  8. ASP.NET MVC 之控制器与视图之间的数据传递

    今天,我们来谈谈控制器与视图之间的数据传递. 数据传递,指的是视图与控制器之间的交互,包括两个方向上的数据交互,一个是把控制器的数据传到视图中,在视图中如何显示数据,一个是把视图数据传递到控制器中, ...

  9. (转载)Javascript操作表单之间的数据传递

    (转载)http://www.aspxhome.com/javascript/skills/200710/214825.htm 今天有朋友问我关于用JAVASCRIPT来进行页面各表单之间的数据传递的 ...

随机推荐

  1. cmake处理多源文件目录的方法

    cmake处理源代码分布在不同目录中的情况也很简单,现在假设我们的源代码分布情况如下: 源代码的分布情况 其中src目录下的文件要编译成一个链接库 第一步,项目主目录中的CMakelist.txt 在 ...

  2. $stateProvider resovle 无法找到的原因

    $stateProvider 在写resolve的时候,也要写上controller,不能直接在页面上用ng-controller 来指定!!!! 不然的话,就是报依赖注入异常,找不到该provide ...

  3. 同步和异步 阻塞和非阻塞 IO多路复用和select总结

    同步和异步的概念 同步是指用户线程发起IO请求后,需要等待或者轮询内核IO操作完成后才能继续执行: 异步是指用户线程发起IO请求后仍继续执行,当内核IO操作完成后会通知用户线程或者调用用户线程注册的回 ...

  4. python中常用第三方库记录

    python中有很多很好用的第三方库,现在记录一下这些库以及如何下载 一.virtualenv,这是一个可以将生产环境隔离开的python库,非常好用 在linux下使用pip install vir ...

  5. LINUX 下编译不通过解答

    在linux下编译android源码或者webkit等程序源码时,不论在源码下加什么错误,编译器都默认正确,检索不到错误,此时,可能是之前编译的生成文件默认编译器不再检索编译新修改过的文件,只是发现修 ...

  6. Android RxJava/RxAndroid结合Retrofit使用

    概述 RxJava是一个在 Java VM 上使用可观測的序列来组成异步的.基于事件的程序的库.更重要的是:使用RxJava在代码逻辑上会非常简洁明了,尤其是在复杂的逻辑上.告别迷之缩进. RxAnd ...

  7. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-为什么没有自动识别成标准FBD功能块

    新建一个项目,是不会自动把FBD对应名称的模块识别成标准功能块的   你需要引入相应的类库重新输入FBD   然后才会自动生成     更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: ht ...

  8. ES6 let用法

    1.实现块作用域 2.不存在变量提升. ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域.凡是在声明之前就使用这些变量,就会报错.

  9. Nunit2.5.10快速上手(笔记)

    1.下载Nunit:http://www.nunit.org/index.php?p=download,下载MSI格式的安装包: 2.安装Nunit,根据提示安装即可,没有什么需要配置的,直接下一步就 ...

  10. struts action不在是一个单例类

    在servlet中,servlet类是一个单例,在servlet中的成员变量,将会被所有请求共享,同时也有可能存在线程安全问题,如有一个成员变量num,每次方法后市的num自增 package act ...