问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么在JSP和Servlet之间传递对象

发布网友 发布时间:2022-04-09 05:17

我来回答

2个回答

懂视网 时间:2022-04-09 09:38

背景:

       目前业界很流行的MVC(model-view-control)开发模式,理解为

              模型是Bean,

              视图是 Html/Jsp,

              控制是Servlet,

     关联数据库的Dao

       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);

(二)从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+" agreement_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;
}
}

(三)从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=‘#‘ onclick=window.open(‘MyJsp.jsp?usid="+user.getUser_id().trim()+"‘,‘newwindow‘,‘width=600,height=350,top=300,left=300‘)>管理</a></td>");
out.println("</tr>");
}

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

标签:

热心网友 时间:2022-04-09 06:46

servlet可以传一个list给jsp,具体用法如下:
一般来说,在servlet中能用request的就尽量用request。
request.setAttribute("list",list);再到前台用c标签是可以取出来就可以了。
新建参数接收页result.jsp,代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<%
List myList = (List)request.getAttribute("list");
%>
<p>
获取servlet中的list:<%=myList %>
</p>
</body>
</html>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
用六个成语各造一段话 关于把握机会的名言名句 关于把握住机会的名言名句(把握机会,成就未来) 关于把握机会的名言名句(把握机会的励志句子) 关于机会的名言名句篇一 包括“机遇”的名言名句(一) BPM中国普及之路还有多远? 哪个公司可以做OA系统 目前业内有很多人认为OA现在某些应用或者说功能在向BPM领域延生,请问... ting的三个声调组词 怎么写工程事故赔偿协议书? 保时捷911 后面GT 是什么意思 股票002104今年有无分红配送 有哪位好心朋友可以告诉我plc是从哪里学起的?谢谢 恒宝股份是什么板块 请问谁有51单片机用74HC595的数码管以及16*16点阵的程序例子?汇编语言的! 请高手来帮忙!请教用DS1302芯片,怎么显示农历 计算器上十位的左边是 GT911有替代料吗? exce表格l 马上入职的新手老师,有什么好的建议? 加急!!Excel 表格中出现了问题 frequency公式 - 信息提示 作为老教师,你对新入职的年轻教师有什么建议 有没有手机应用,可以学习excel相关知识的,比如函数,功能,技巧的呢,或者说是excel论坛的呢 想好好学习excel函数 但是没有可供实际操作的数据 只看excel函数帮助看了就忘了 EXCEL表格操作有没有学习探讨群? 你有哪些给新手老师的建议? 有没有专业一点的交流Excel或Word应用方面实用技巧的论坛网站,越多越好 二灰拌合站和稳定土拌合站的区别? 请问:比小说篇幅短的叫什么文体?散文又有什么特点?专门写这些的职业是什么 要写一个关于美国文学的论文 但是不知道该写什么题目的 有没有什么推荐的作品 要近代一点的 新一点的 谢谢 什么是小小说? 短篇小说、小小说、微型小说三者有什么区别 怎样写好微型小说呢? 请问世界比较文学巨匠都有哪几位啊? 怎样写一篇关于十九世纪美国文学的论文 求一篇关于美国作家Katherine Anne Poter的论文!急!!! 胡铁生的期刊论文 管理学论文的写作指导 有王艳兵李二牛叫什么电视剧? 内存显示3.46可用,什么情况??? Win10 8G内存显示只有3.46G可用??? 系统8G内存3.46G可用,请问怎么解决? WIN7 64位操作系统 安装内存8G 可用内存只有3.46G 怎么解决? 两条8G内存,显示可用内存只有3.46G,求解决方法 我的尿常规检查结果。请帮我分析一下这几个数据。谢谢! 如何看尿常规化验单? WIN7内存是8G为什么只有3.46G可用? 有没有患肾炎到底看尿常规中的哪几项,怎样的值才算正常?