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、发信息
表单提交
- <form action="相对地址URL" name="表单名字" method="提交方式(post(推荐)、get)">
- <input type="text" name="文本框名字" /><!--一个文本输入框-->
- </form>
定义一个函数来处理表单文本框检查非空并提交表单事件
- <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文件,获取传递过来的参数值
- String search = java.net.URLDecoder.decode(request.getParameter("文本框名字"),"utf-8");
- System.out.println("在search的servlet中接收到的search参数为-->"+search);
ok,完成
(二)从servlet到数据库
1、获得数据(MySql为例)
①创建数据库连接池
创建一个配置文件,如图
确保名字一致,
- <?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为项目名 -->
②获取链接
- 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语句,并返回结果
- /* 查询数据库,输出符合要求的记录的情况*/
- 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保存数据)
- 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());
- }
- 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
- //将数据发到JSP
- RequestDispatcher rd = request.getRequestDispatcher("index_search.jsp");
- request.setAttribute("test",collection);//存值
- rd.forward(request,response);//开始跳转
2、接收数据
来到重定向指向的URL中获取刚才发送过来的数据,并显示在网页上
- 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='#' onclick=window.open('MyJsp.jsp?usid="+user.getUser_id().trim()+"','newwindow','width=600,height=350,top=300,left=300')>管理</a></td>");
- out.println("</tr>");
- }
ok,完成
结束语:
推荐一本JavaScript进阶读物--------《JavaScript修炼之道》
推荐一本项目开发实录书籍----------《Java项目开发案例全程实录》
JSP、servlet、SQL三者之间的数据传递的更多相关文章
- JSP Servlet SQL 三者之间数据传递
前言: 最近一直在做WEB开发,现总结一下这一段时间的体会和感触. 切记,web开发重点在于前台数据交互,页面美化而不要太沉溺于底层数据. 浏览器时代来到,向我们召唤出更炫.更简洁.更方便.更大气的网 ...
- 一、JSP、servlet、SQL三者之间的数据传递(前台与后台数据交互)
背景: 目前业界很流行的MVC(model-view-control)开发模式,理解为 模型是Bean, 视图是 Html/Jsp, 控制是Servlet, 关联数据库的Dao web的运行机制: 数 ...
- 二、JSP、servlet、SQL三者之间的数据传递(前台与后台数据交互)
2.收信息来到表单提交时URL所指向的servlet文件,获取传递过来的参数值
- activity之间的数据传递方法
1 基于消息的通信机制 Intent--------boudle,extra 用这种简单的形式,一般而言传递一些简单的类型是比较容易的,如int.string等 详细介绍下Intent机制 Inte ...
- Vue基础知识之组件及组件之间的数据传递(五)
vue中的组件是自定的标签,可以扩展的原生html元素,封装可复用的代码 note: 1.在标签命中不要使用大写,标签名字必须用短横线隔开 2.模板中只能有一个根元素,不能使用并列标签. 定义组件 全 ...
- ASP.NET MVC3中Controller与View之间的数据传递
在ASP.NET MVC中,经常会在Controller与View之间传递数据,因此,熟练.灵活的掌握这两层之间的数据传递方法就非常重要.本文从两个方面进行探讨: 一. Controller向Vie ...
- Activity之间的数据传递
最常用的Activity之间的数据传递. btnStartAty1.setOnClickListener(new View.OnClickListener() { @Override public v ...
- ASP.NET MVC 之控制器与视图之间的数据传递
今天,我们来谈谈控制器与视图之间的数据传递. 数据传递,指的是视图与控制器之间的交互,包括两个方向上的数据交互,一个是把控制器的数据传到视图中,在视图中如何显示数据,一个是把视图数据传递到控制器中, ...
- (转载)Javascript操作表单之间的数据传递
(转载)http://www.aspxhome.com/javascript/skills/200710/214825.htm 今天有朋友问我关于用JAVASCRIPT来进行页面各表单之间的数据传递的 ...
随机推荐
- Ceph源码解析:读写流程
转载注明出处,整理也是需要功夫的,http://www.cnblogs.com/chenxianpao/p/5572859.html 一.OSD模块简介 1.1 消息封装:在OSD上发送和接收信息. ...
- Redis的5个常见使用场景
1.会话缓存(Session Cache) 最常用的一种使用Redis的情景是会话缓存(session cache).用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持 ...
- iOS:开发常用GitHub开源项目(持续更新)
IOS开发常用GitHub开源项目(持续更新) 数据类 开源库 作者 简介 AFNetworking Mattt 网络请求库 ASIHTTPRequest pokeb 网络请求库 Alamofire ...
- python 调试模式pdb(转)
标准库的pdb pdb是Python自带的一个库,为Python程序提供了一种交互式的源代码调试功能,包含了现代调试器应有的功能,包括设置断点.单步调试.查看源码.查看程序堆栈等.如果读者具有C或C+ ...
- IntelliJ IDEA java开发 WebService
测试的功能是通过访问solr服务器,获取相关信息,然后以webservice的形式供客户端访问来获取数据.通过查询资料,现在把过程记录如下: 1.环境 IntelliJ IDEA 2017.2.6 J ...
- (转)IntelliJ IDEA下的使用git
1.git简介 Git是目前流行的分布式版本管理系统.它拥有两套版本库,本地库和远程库,在不进行合并和删除之类的操作时这两套版本库互不影响.也因此其近乎所有的操作都是本地执行,所以在断网的情况下任然可 ...
- Android 底部TabActivity(1)——FragmentActivity
先看看效果图: 第一篇Tab系列的文章首先实现这样的风格的底部Tab:背景条颜色不变,我们是用了深灰的颜色,图标会发生对应的变化.当选中某个标签后该标签的背板会由正常的颜色变为不正常,哈哈,是变为加深 ...
- 算法笔记_064:蓝桥杯练习 操作格子(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 有n个格子,从左到右放成一排,编号为1-n. 共有m次操作,有3种操作类型: 1.修改一个格子的权值, 2.求连续一段格子权值和, 3.求 ...
- Python 二维码解码
二维码解析 Python中关于二维码解析的现成模块有很多,比较著名的就是Zbar以及ZXing.然而很不幸的是,官方的版本都是支持到python2.x,下面是在python2.x的例子: import ...
- HipHop PHP简介(转)
HipHop PHP是FaceBook的一个开源项目,它优化了FaceBook网站Web服务器的运行速度. HipHop 是一个源代码转换器.它将 PHP 代码转换为高度优化的 C++ 代码,然后再使 ...