Struts2结合DisplayTag、DbUtils实现查询分页、导出Excel

实例:Struts2结合DisplayTagDbUtils实现查询分页、导出Excel(转)

    这几天在看书的时候,发现了一个好东西,一个开源的jsp自定义标签库,可以实现分页显示,导出为excel或其他的格式,简单的学习了,还真的是很有用,对于不想写html表格代码的,带样式的、带分页的,使用这个我感觉已经戳戳有余了。有些功能已经提供了,但是由于是结合了Struts2,所以有些东西是需要设置的。同时项目中使用了DbUtils这个框架。Displaytag的内部已经内置了poi,如果使用我们自己的POI可能会出现错误,所以就不用管了。

Struts2使用的是2.3.4这个版本。

DbUtils的下载地址:

http://commons.apache.org/proper/commons-dbutils/

DisplayTag的下载地址:

http://sourceforge.net/projects/displaytag/files/display%20tag%20library/1.2/

下载的是1.2的版本。解压安装目录中的displaytag-examples-1.2.war文件,将目录中的前四个文件夹复制到项目的下面,并将WEB-INF下的lib下的所有的jar包放到项目的下面,如图所示:


2、将项目配置成struts2的开发环境,编写对应的实体类、控制器类、数据库访问类,最终的项目结构如下所示:

3、由于使用了struts2,所以需要配置一个displaytag提供的过滤器,解决一些乱码还有其他的问题,web.xml的代码如下所示:

[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.   <display-name></display-name>   
  8.     
  9.     <!-- struts2的核心控制器 -->  
  10.     <filter>  
  11.         <filter-name>struts2</filter-name>  
  12.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  13.     </filter>  
  14.     <filter-mapping>  
  15.         <filter-name>struts2</filter-name>  
  16.         <url-pattern>/*</url-pattern>  
  17.     </filter-mapping>  
  18.     <filter><!-- 在Struts2环境中,要使用这个过滤器来解决displaytag的一些问题 -->  
  19.         <filter-name>ResponseOverrideFilter</filter-name>  
  20.         <filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>  
  21.     </filter>  
  22.     <filter-mapping>  
  23.         <filter-name>ResponseOverrideFilter</filter-name>  
  24.         <url-pattern>*.action</url-pattern>  
  25.     </filter-mapping>  
  26.     <filter-mapping>  
  27.         <filter-name>ResponseOverrideFilter</filter-name>  
  28.         <url-pattern>*.jsp</url-pattern>  
  29.     </filter-mapping>  
  30.   <welcome-file-list>  
  31.     <welcome-file>index.jsp</welcome-file>  
  32.   </welcome-file-list>  
  33. </web-app>  

4、然后需要在src文件夹下建立displaytag.properties文件,解决导出的问题,内容如下:

[plain]  view plain copy print ?
  1. export.excel.class=org.displaytag.export.excel.ExcelHssfView  

5struts.xml文件如下所示:

[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.3.dtd">  
  5. <struts>  
  6.     <constant name="struts.enable.DynamicMethodInvocation" value="true" />  
  7.     <constant name="struts.devMode" value="true" />  
  8.     <package name="default"  extends="struts-default">  
  9.         <action name="studentAction" class="com.qqhr.action.StudentAction">  
  10.             <result name="success">/main.jsp</result>  
  11.         </action>  
  12.     </package>  
  13. </struts>  


6action类的代码如下所示:

[java]  view plain copy print ?
  1. package com.qqhr.action;  
  2.   
  3. import java.util.List;  
  4. import com.opensymphony.xwork2.ActionSupport;  
  5. import com.qqhr.dao.StudentDao;  
  6.   
  7. public class StudentAction extends ActionSupport  
  8. {  
  9.     private List list;//由于写在action类里,所以不用存在request作用域里  
  10.     public List getList()  
  11.     {  
  12.         return list;  
  13.     }  
  14.   
  15.     public void setList(List list)  
  16.     {  
  17.         this.list = list;  
  18.     }  
  19.       
  20.     @Override  
  21.     public String execute() throws Exception  
  22.     {  
  23.         StudentDao dao = new StudentDao();  
  24.         list = dao.getAllStudent();//从dao中取出  
  25.         return SUCCESS;  
  26.     }  
  27. }  

7dao层使用了DbUtils这个框架,可以从网上下载,将下载的jar包放到lib文件夹下,dao类如下所示:

[java]  view plain copy print ?
  1. package com.qqhr.dao;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.util.List;  
  6.   
  7. import org.apache.commons.dbutils.DbUtils;  
  8. import org.apache.commons.dbutils.QueryRunner;  
  9. import org.apache.commons.dbutils.handlers.BeanListHandler;  
  10.   
  11. import com.qqhr.entity.Student;  
  12.   
  13. public class StudentDao  
  14. {  
  15.     public List<Student> getAllStudent()  
  16.     {  
  17.         Connection con = null;  
  18.         try  
  19.         {  
  20.             String url = "jdbc:mysql://localhost:3306/qqhr?useUnicode=true&characterEncoding=UTF-8";  
  21.             String driver = "com.mysql.jdbc.Driver";  
  22.             String user = "root";  
  23.             String pass = "123456";  
  24.             DbUtils.loadDriver(driver);  
  25.             con = DriverManager.getConnection(url,user,pass);  
  26.             String sql = "select * from Student";  
  27.             QueryRunner qr = new QueryRunner();  
  28.             List<Student> list = qr.query(con,sql,new BeanListHandler(Student.class));  
  29.             return list;  
  30.         }  
  31.         catch (Exception e)  
  32.         {  
  33.             e.printStackTrace();  
  34.         }  
  35.         return null;  
  36.     }  
  37. }  

8、实体类要和数据库的结构相对应,entity类如下所示:

[java]  view plain copy print ?
  1. package com.qqhr.entity;  
  2.   
  3. /** 
  4.  * 对应数据库的实体类 
  5.  * @author administrator 
  6.  * 
  7.  */  
  8. public class Student  
  9. {  
  10.     private Integer sId;  
  11.     private String sNo;  
  12.     private String sName;  
  13.     private String sSex;  
  14.     private String sAddress;  
  15.     private String sClass;  
  16.     public Integer getsId()  
  17.     {  
  18.         return sId;  
  19.     }  
  20.     public void setsId(Integer sId)  
  21.     {  
  22.         this.sId = sId;  
  23.     }  
  24.     public String getsNo()  
  25.     {  
  26.         return sNo;  
  27.     }  
  28.     public void setsNo(String sNo)  
  29.     {  
  30.         this.sNo = sNo;  
  31.     }  
  32.     public String getsName()  
  33.     {  
  34.         return sName;  
  35.     }  
  36.     public void setsName(String sName)  
  37.     {  
  38.         this.sName = sName;  
  39.     }  
  40.     public String getsSex()  
  41.     {  
  42.         return sSex;  
  43.     }  
  44.     public void setsSex(String sSex)  
  45.     {  
  46.         this.sSex = sSex;  
  47.     }  
  48.     public String getsAddress()  
  49.     {  
  50.         return sAddress;  
  51.     }  
  52.     public void setsAddress(String sAddress)  
  53.     {  
  54.         this.sAddress = sAddress;  
  55.     }  
  56.     public String getsClass()  
  57.     {  
  58.         return sClass;  
  59.     }  
  60.     public void setsClass(String sClass)  
  61.     {  
  62.         this.sClass = sClass;  
  63.     }  
  64.       
  65. }  

9、数据库如下所示:

10、系统首页面index.jsp如下所示:

[html]  view plain copy print ?
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  3. <html>  
  4.   <head>  
  5.     <title>My JSP 'index.jsp' starting page</title>  
  6.   </head>  
  7.   <body>  
  8.     <h1 align="center" style="color:red">  
  9.         本系统使用了Struts2+DisplayTag+DbUtils三个开源框架  
  10.     </h1>  
  11.     <h2><a href="<%=request.getContextPath()%>/studentAction.action" style="color:red">进入首页查询学生</a></h2>  
  12.   </body>  
  13. </html>  


11、在主页面中要使用displaytag需要引入标签库,d:table标签有个name属性,是action里查询的属性,由于action里的属性默认实在request作用域里的,所以这里写直接el表达式取出数据,注意要写上requestURI的属性,为分页时的请求路径,export 为是否导出,property的属性值要和数据库的里的一样,由于是使用了DbUtils的缘故,系统主页面main.jsp的代码如下所示:

[html]  view plain copy print ?
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="d" uri="http://displaytag.sf.net" %>  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>  
  6.     <title>本系统的首页面</title>  
  7.     <style type="text/css" media="all">  
  8.         @import url("css/maven-base.css");  
  9.         @import url("css/maven-theme.css");  
  10.         @import url("css/site.css");  
  11.         @import url("css/screen.css");  
  12.     </style>  
  13.     <link rel="stylesheet" type="text/css" href="./css/print.css" media="print">  
  14.   </head>  
  15.   <body>  
  16.     <h1 align="center" style="color:blue">本系统使用了Struts2+DisplayTag+DbUtils三个开源框架</h1>  
  17.     <d:table name="${list}"  pagesize="4" requestURI="studentAction.action" export="true">  
  18.         <d:caption style="color:green;font-size:24px;">导出Excel</d:caption>  
  19.         <d:column property="sId" title="学生的ID"/>  
  20.         <d:column property="sNo" title="学生的学号"/>  
  21.         <d:column property="sName" title="学生的姓名"/>  
  22.         <d:column property="sSex" title="学生的性别"/>  
  23.         <d:column property="sAddress" title="学生的地址"/>  
  24.         <d:column property="sClass" title="学生的班级"/>  
  25.     </d:table>  
  26.   </body>  
  27. </html>  

12、最终的效果如下所示:

感兴趣的可以上网找下资料,这个东西不错的。

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值