java成绩查询_JavaWeb项目第三次总结_成绩查询的实现

查询图书的功能实现

如何知道浏览器往服务器传入的参数

1、在编写好查询页面后,使用火狐浏览器的friebug (全部—>POST—>参数)

2、编写GradeListServlet,重写doGet()和doPOST()方法

服务器处理页面请求的过程

1、重写doPOST()方法。

处理过程

1、连接数据库 2、创建JSONObject对象 3、格式化数据 4、将处理后的数据以{key,value}放入到JSONObject对象中 5、响应客户端的请求

获取页面请求的参数 使用方法:request.getParameter(“page/rows”);

创建PageBean类 将获取来的参数传入到PageBean类进行初始化。

PageBean

package com.it.model;

public class PageBean {

private int page;//第几页

private int rows;//每页的记录数

private int start;//起始页

public PageBean(int page, int rows) {

super();

this.page = page;

this.rows = rows;

}

public int getPage() {

return page;

}

public void setPage(int page) {

this.page = page;

}

public int getRows() {

return rows;

}

public void setRows(int rows) {

this.rows = rows;

}

public int getStart() {

return (page-1)*rows;

}

}

创建从数据库查询出来的数据转化成JSON格式的数据

JSON将数据转化成了字符串类型的数据

转化对象后是键值对的形式 {name:value}

JSON格式转化的工具类

package com.it.util;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

/*

* Json 工具包 用来处理JSon格式

* 用来转化格式

* JSONArray格式是 键值对形式的

*/

public class JsonUtil {

/**

* 将数据库内的数据集转化成JSON格式的数据 输出到浏览器页面

* @param rs 数据库查询返回的集合

* @return

* @throws Exception

*/

public static JSONArray formatRsToJsonArray(ResultSet rs)throws Exception{

ResultSetMetaData md=rs.getMetaData();//获取纵向集合

int num = md.getColumnCount();//获取ResultSetMetaData 有多少行

JSONArray array=new JSONArray();

//JSONArray 里的每一个对象是 JSONObject

while(rs.next()){ //横向的遍历

JSONObject mapOfColValues=new JSONObject(); //JSONArray 里的每一个对象叫JSONObject

for(int i=1;i<=num;i++){

mapOfColValues.put(md.getColumnName(i), rs.getObject(i));//给对象赋值

}

array.add(mapOfColValues);

}

return array;//添加到JSONArray数组

}

}

GradeListServlet

package com.it.web;

import java.io.IOException;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

import com.it.dao.GradeDao;

import com.it.model.PageBean;

import com.it.util.Dbutil;

import com.it.util.JsonUtil;

import com.it.util.ResponseUtil;

public class GradeListServlet extends HttpServlet {

Dbutil dbUtil=new Dbutil();

GradeDao gradeDao=new GradeDao();

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

this.doPost(request, response);

}

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

String page = request.getParameter("page");//页面请求 page

String rows = request.getParameter("rows");//每页的记录数

PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));

Connection con=null;

try{

con=dbUtil.getCon();

JSONObject result=new JSONObject(); //创建JSONObject对象用来存放JSONArray 数组

JSONArray jsonArray = JsonUtil.formatRsToJsonArray(gradeDao.gradeList(con, pageBean));//将返回的结果集转化成JSON格式的数据

// ResultSet rs=gradeDao.gradeList(con, pageBean);

// gradeDao.print(con, rs);

int total=gradeDao.gradeCount(con);//返回统计的总行数

result.put("rows", jsonArray);

result.put("total", total);

ResponseUtil.write(response, result);

}catch(Exception e){

e.printStackTrace();

}finally{

try {

dbUtil.closeCon(con);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

## 数据库处理层GradeDao类 ##

package com.it.dao;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import com.it.model.Grade;

import com.it.model.PageBean;

public class GradeDao {

public ResultSet gradeList(Connection con,PageBean pageBean)throws Exception{

StringBuffer sb=new StringBuffer("select * from t_grade");

if(pageBean!=null){

sb.append(" limit "+pageBean.getStart()+","+pageBean.getRows());

}

PreparedStatement pstmt = con.prepareStatement(sb.toString());

return pstmt.executeQuery();

}

public int gradeCount(Connection con)throws Exception{

String sql="select count(*) as total from t_grade";// as total 是起的别名

PreparedStatement psmt = con.prepareStatement(sql);

ResultSet rs = psmt.executeQuery();

if(rs.next()){

return rs.getInt("total");

}else{

return 0;

}

}

public void print(Connection con,ResultSet rs)throws Exception{

while(rs.next()){

Grade grade=new Grade();

grade.setId(rs.getInt("id"));

grade.setGradeName(rs.getString("gradeName"));

grade.setGradeDesc(rs.getString("gradeDesc"));

System.out.println(grade);

}

}

}

响应页面的工具类

package com.it.util;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

public class ResponseUtil {

public static void write(HttpServletResponse response,JSONObject jsonObject)throws Exception{

response.setContentType("text/html;charaset=UTF-8");

response.setCharacterEncoding("UTF-8");//解决无法输出中文的问题

PrintWriter out = response.getWriter();

out.println(jsonObject.toString());

out.flush();

out.close();

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Train Problem I hdu 1022(栈)

http://acm.split.hdu.edu.cn/showproblem.php?pid1022 题意&#xff1a;给出火车的进站与出站顺序&#xff0c;判断是否可以按照给出的出站顺序出站。 #include <iostream> #include <stdio.h> #include <string.h> #include <string> #include <…

Spring数据和Redis

本文是我们学院课程的一部分&#xff0c;标题为Redis NoSQL键值存储 。 这是Redis的速成班。 您将学习如何安装Redis并启动服务器。 此外&#xff0c;您将在Redis命令行中乱七八糟。 接下来是更高级的主题&#xff0c;例如复制&#xff0c;分片和集群&#xff0c;同时还介绍了…

java的原生数据类型_Java中的8种原生数据类型(Primitive Data Types)分析

八种数据类型类型 int short long byte float double char boolean字节数 4 2 8 1 4 8 4 JVM相关大小 -2147483648~2147483647 -32768~32767 -9223372036854775808~9223372036854775807 -128~127 3.40282347E38F 1.79769313486231570E308tip:八种类型我是这样记忆的&#xff1a…

史上最全的SpringMVC学习笔记

SpringMVC学习笔记---- 一、SpringMVC基础入门&#xff0c;创建一个HelloWorld程序 1.首先&#xff0c;导入SpringMVC需要的jar包。 2.添加Web.xml配置文件中关于SpringMVC的配置<!--configure the setting of springmvcDispatcherServlet and configure the mapping-->&…

python 进程池 等待数量_【2020Python修炼记】python并发编程(六)补充—进程池和线程池...

1、2、 为啥要有 进程池和线程池进程池来控制进程数目&#xff0c;比如httpd的进程模式&#xff0c;规定最小进程数和最大进程数3、创建进程池的类pool如果指定numprocess为3&#xff0c;则进程池会从无到有创建三个进程&#xff0c;然后自始至终使用这三个进程去执行所有任务&…

shader weaver_Oracle通过邀请Weaver和Chin推动JavaFX向前发展

shader weaver昨天&#xff0c;我发布了愚人节帖子&#xff0c;内容涉及加入NASA协助探索红色大行星。 那篇文章与事实相距不远……美国宇航局开发的技术的所有细节都是100&#xff05;准确的。 哎呀&#xff0c;即使我辞职也是事实&#xff01; 唯一不正确的部分是我将加入的公…

mysql快速上手3

上一章给大家说的是数据库的视图&#xff0c;存储过程等等操作&#xff0c;这章主要讲索引&#xff0c;以及索引注意事项&#xff0c;如果想看前面的文章&#xff0c;url如下&#xff1a; mysql快速上手1mysql快速上手2索引简介 索引是对数据库表中一个或多个列&#xff08;例如…

python图像锐化_Python图像处理介绍--图像模糊与锐化

欢迎关注 “小白玩转Python”&#xff0c;发现更多 “有趣”引言在之前的文章中&#xff0c;我们讨论了边缘检测内核。在本文我们将讨论如何在图像上应用模糊与锐化内核&#xff0c;将这些内核应用到彩色图像上&#xff0c;同时保留核心图像。一如既往&#xff0c;我们从导入所…

看一下CDI 2.0 EDR1

CDI是最近对Java EE最好的补充之一。 该观点在用户和集成商之间广泛共享。 当前版本的CDI 1.2于2014年4月发布。现在&#xff0c;在2015年中期&#xff0c;我们将面对CDI 2.0规范的早期草案。 CDI 2.0将在Java 8和更高版本上运行。 最终版本计划于2016年发布&#xff0c;该路线…

redis key设计技巧

1: 把表名转换为key前缀 如, user: 2: 第2段放置用于区分区key的字段--对应mysql中的主键的列名,如userid 3: 第3段放置主键值,如2,3,4...., a , b ,c 4: 第4段,写要存储的列名 用户表 user , 转换为key-value存储 userid username passworde email 9 Lisi 1111111 li…

python编程游戏代码 游戏人物如何升级_如何玩游戏提高python编程技能?

笔者公众号&#xff1a;技术杂学铺Python Challenge是首个谜语编程网站。挑战者需要连续挑战33个需要编程才能解开的谜题以锻炼自己的编程能力。该网站建立于2005年&#xff0c;至今已经有三百多万位访客浏览并尝试解决该网站的谜题。python challenge 官网虽然网站建立的年代比…

Eclipse配置初始化(自用)

以上都是性能调优的配置&#xff0c;下面是其他常用的配置和优化 设置utf-8编码 window -> preferences -> General -> workplace中text file encoding改为utf-8 设置properties文件编码window -> preferences -> General -> Content Types —> Text —&g…

java bits_一段关于JAVA程序升级的问题(Changing bits)

展开全部import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;import javax.…

hibernate脏数据_Hibernate性能提示:脏收集效果

hibernate脏数据在使用Hibernate作为ORM开发服务器和嵌入式应用程序8年后&#xff0c;我全力以赴地寻求提高Hibernate性能的解决方案&#xff0c;阅读博客和参加会议&#xff0c;我决定与您分享在这些年中获得的知识。 这是更多新帖子中的第一篇&#xff1a; 去年&#xff0c;…

有关struts2中用到 js 总结

1.js中取Struts2中的栈里的值 var current "${currentPage}"; 2.js 如何提交执行提交url连接 &#xff0c;以及 Struts中的url如何如何写 var current "${currentPage}"; location.href"showSeparatePageGoods.action?currentPage"current&q…

java合并两个有序链表_JS实现的合并两个有序链表算法示例

本文实例讲述了JS实现的合并两个有序链表算法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例&#xff1a;输入&#xff1a;1->2->4, 1->3->4输出&…

外墙设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

8.25小结

1.导出csv文件 后台导出&#xff1a;CSVUtils工具类&#xff1a; /*** * CSV文件导出工具类* * author* reviewer*/ public class CSVUtils {public static File createCSVFile(List<Object> head, List<List<Object>>dataList, String outPutPath, String f…

java 监控 native 内存_JVM NativeMemoryTracking 分析堆外内存泄露

Native Memory Tracking (NMT) 是Hotspot VM用来分析VM内部内存使用情况的一个功能。我们可以利用jcmd(jdk自带)这个工具来访问NMT的数据。NMT介绍工欲善其事必先利其器&#xff0c;我们先把相关需要的配置和工具介绍清楚&#xff0c;再通过例子来看看具体如何使用NMT。打开NMT…

Charles 从入门到精通

目录与版权 转载请保留顶部的 Charles 中国特惠内容&#xff0c;本文的内容主要包括&#xff1a; Charles 的简介如何安装 Charles将 Charles 设置成系统代理Charles 主界面介绍过滤网络请求截取 iPhone 上的网络封包截取 Https 通讯信息模拟慢速网络修改网络请求内容给服务器做…