Struts2之Crud综合实例

本文是Struts2的综合实例,主要包含以下功能

  1. 添加,删除,修改,查询用户
  2. 上传,下载图片
  3. 拦截器实现登陆功能
  4. 验证器检查输入

下载图片功能以前没有实现过,步骤如下

  • 在类中增加两个属性
//文件下载private InputStream inputStream;private String imageFileName;
  • 下载方法实现
public String download(){path = ServletActionContext.getRequest().getParameter("path");filename = ServletActionContext.getRequest().getParameter("filename");String storePath = ServletActionContext.getServletContext().getRealPath("/files");try {inputStream = new FileInputStream(storePath+"\\"+path+"\\"+filename);} catch (FileNotFoundException e) {e.printStackTrace();}return SUCCESS;}

配置struts.xml

<action name="download" class="cn.itcast.domain.User" method="download"><interceptor-ref name="mydefaultstack"></interceptor-ref><result type="stream" name="success"><param name="contentType">application/octet-stream</param><param name="inputStream">inputStream</param><!-- 输入是对应的动作类中的那个字段 --><param name="contentDisposition">attachment;filename=${filename}</param><!-- 要下载的文件名 --></result><result name="login">/login.jsp</result></action>

JSP页面实现

<c:url value="/user/download" var="url"><c:param name="path" value="${user.path}"></c:param><c:param name="filename" value="${user.filename}"></c:param></c:url><a href="${url}">下载</a>

登陆验证功能

定义拦截器类

package cn.itcast.interceptor;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;public class PermissionInterceptor implements Interceptor {public void destroy() {}public void init() {}public String intercept(ActionInvocation invocation) throws Exception {HttpSession session = ServletActionContext.getRequest().getSession();Object obj = session.getAttribute("user");if(obj==null){return "login";}else{return invocation.invoke();}}}

struts.xml中的配置

<package name="mydefault" extends="struts-default"><interceptors><interceptor name="permissionInterceptor" class="cn.itcast.interceptor.PermissionInterceptor"></interceptor><interceptor-stack name="mydefaultstack"><interceptor-ref name="defaultStack"></interceptor-ref><interceptor-ref name="permissionInterceptor"></interceptor-ref></interceptor-stack></interceptors></package>

在其他Action中使用拦截

<interceptor-ref name="mydefaultstack"></interceptor-ref>

条件查询实现

JSP页面

<td><s:form action="user_queryCondition" namespace="/user"><s:textfield name="username" label="用户名"></s:textfield><s:select list="#{'0':'','1':''}" label="性别" name="sex" headerKey="" headerValue="请选择"></s:select><s:select label="学历" name="education" list="#{'研究生':'研究生','本科':'本科','专科':'专科','高中':'高中'}" headerKey="" headerValue="请选择"></s:select><s:submit value="查询"></s:submit></s:form></td>

javabean方法实现

public String queryCondition(){List<User> users =s.findUserByCondition(this);ActionContext.getContext().put("users", users);// #usersreturn SUCCESS;}

service层方法实现

public List<User> findUserByCondition(User user) {boolean ok1 = true;boolean ok2 = true;boolean ok3 = true;StringBuffer sb = new StringBuffer("where 1=1 ");if(user.getUsername()!=null&&!user.getUsername().equals("")){ok1 = false;sb.append(" and username like '%"+user.getUsername()+"%' ");}if(user.getSex()!=null&&!user.getSex().equals("")){ok2 = false;sb.append(" and sex='"+user.getSex()+"'");}if(user.getEducation()!=null&&!user.getEducation().equals("")){ok3 = false;sb.append(" and education='"+user.getEducation()+"'");}boolean conditionOk = ok1&&ok2&&ok3;//如果为false,说明至少有一个查询条件if(conditionOk){
//          System.out.println("没有查询条件");
//          return null;return dao.findUsersByCondition(null);}else{
//          System.out.println("有查询条件");
//          System.out.println(sb.toString());
//          return null;return dao.findUsersByCondition(sb.toString());}}

其他增删改查详细实例参见github源码

ssh/Struts2Crud at master · whuhan2013/ssh

效果如下

这里写图片描述

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

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

相关文章

教你用python爬英雄联盟官网:①掌握爬虫技术;②Python数据可视化

大家好&#xff0c;我是明月十四桥&#xff01;&#xff01; 擅长领域&#xff1a;python黑科技、大数据后端研发、数据仓库 今日重点&#xff1a; ① 掌握爬虫技术&#xff0c;体会python爬虫流程&#xff0c;可见即可爬&#xff1b; ② 学会使用python数据可视化。 有问题的…

7套干货,Python常用技术学习知识图谱!!(史上最全,建议收藏)

大家好&#xff0c;我是明月十四桥&#xff01; 你要偷偷努力&#xff0c;然后惊艳所有人~ 给大家推荐 7 个宝藏级教程&#xff0c;视频课是永久有效的&#xff0c;可以随时学习&#xff0c;有几门课程还有CSDN官方学习答疑群&#xff0c;课程右边扫码入群&#xff0c;讲师在群…

权威发布 |《科学美国人》:2018全球十大新兴技术

来源&#xff1a;世界经济论坛摘要&#xff1a;尽管这些技术仍处于发展早期&#xff0c;但它们吸引了众多研究团队的关注&#xff0c;并且广受投资者青睐。在未来3~5年间&#xff0c;它们可能会对社会与经济产生重要影响。9月19日&#xff0c;《科学美国人》与世界经济论坛&…

23篇大数据系列(一)java基础知识全集(2万字干货,建议收藏)

大数据系列爽文&#xff0c;从技术能力、业务基础、分析思维三大板块来呈现&#xff0c;你将收获&#xff1a; ❖ 提升自信心&#xff0c;自如应对面试&#xff0c;顺利拿到实习岗位或offer&#xff1b; ❖ 掌握大数据的基础知识&#xff0c;与其他同事沟通无障碍&#xff1b; …

Hibernate基础知识

本文主要包括以下内容 对象的状态 一对多的单向关联一对多的双向关联多对多关联 一对一关联 对象状态的变化 对象的状态 临时状态 new 持久化状态 get,save,update脱管状态 clear close evict 一对多单向操作&#xff0c;以班级表与学生表为例 Classes.java package …

从概念到应用,腾讯视角深入“解剖”AI平台和语音技术

来源&#xff1a;AI科技大本营摘要&#xff1a;9 月 15 日&#xff0c;以“破局人工智能&#xff1a;AI平台及智能语音应用解析”为题的沙龙在上海举办&#xff0c;本次活动由 CSDN、腾讯云联合主办。近年来&#xff0c;人工智能技术快速发展&#xff0c;与其他行业的结合也成为…

23篇大数据系列(二)scala基础知识全集(史上最全,建议收藏)

作者简介&#xff1a; 蓝桥签约作者、大数据&Python领域优质创作者。管理多个大数据技术群&#xff0c;帮助大学生就业和初级程序员解决工作难题。 我的使命与愿景&#xff1a;持续稳定输出&#xff0c;赋能中国技术社区蓬勃发展&#xff01; 大数据系列文章&#xff0c;…

为什么 AI 芯片时代必然到来——从TPU开始的几十倍性能之旅

作者&#xff1a;刘肉酱摩尔定律的终结将使服务于特定领域的架构成为计算的未来。一个开创性的例子就是谷歌在 2015 年推出的张量处理单元&#xff08;TPU&#xff09;&#xff0c;目前已经在为超过十亿人提供服务。TPU 使深度神经网络&#xff08;DNN&#xff09;的计算速度提…

java学习笔记之数组

数组是一种效率最高的存储和随机访问对象引用序列的方式,一旦初始化完成&#xff0c;数组长度将不能变&#xff0c;但可以改变其引用&#xff0c;如&#xff1a; int a[]{1,2}; int b[]{1,2,3,4,5}; ab; 如果输出&#xff0c;将得到&#xff1a; b.length5;a.length5; java数组…

《爬虫写得好,铁窗关到老》教你把握爬虫的法律边界!㊫

作者简介 蓝桥签约作者、大数据&Python领域优质创作者。维护多个大数据技术群&#xff0c;帮助大学生就业和初级程序员解决工作难题。 我的使命与愿景&#xff1a;持续稳定输出&#xff0c;赋能中国技术社区蓬勃发展&#xff01; 最近的IT公司违法案件越来越多&#xff0c;…

23篇大数据系列(三)sql基础知识(史上最全,建议收藏)

作者简介 蓝桥签约作者、大数据&Python领域优质创作者。维护多个大数据技术群&#xff0c;帮助大学生就业和初级程序员解决工作难题。 我的使命与愿景&#xff1a;持续稳定输出&#xff0c;赋能中国技术社区蓬勃发展&#xff01; 大数据系列文章&#xff0c;从技术能力、…

脑机交互研究及标准化实践

来源&#xff1a; 人机与认知实验室摘要&#xff1a;本文介绍脑机交互的概念及标准化的必要性&#xff0c;讨论近年来脑机交互的发展状况&#xff0c;重点阐述国内外植入式脑机接口的研究历程&#xff0c;并从脑机交互系统角度提出了脑机交互标准化的思考&#xff0c;同时介绍在…

C#反射的特性

如果您现在对反射还不太了解的话&#xff0c;那么可以先看看这篇博文&#xff0c;来粗略的了解一下反射吧。什么是反射 反射特性&#xff08;Attribute&#xff09;  1. C#内置特性介绍  特性是一个对象&#xff0c;它可以加载到程序集及程序集的对象中&#xff0c;这些对象…

拥抱人工智能报告:中国未来就业的挑战与应对

来源&#xff1a; 199IT互联网数据中心近日&#xff0c;中国发展研究基金会联合红杉资本中国基金&#xff0c;对外发布了一份名为《投资人力资本&#xff0c;拥抱人工智能&#xff1a;中国未来就业的挑战与应对》的研究报告。在这篇报告中&#xff0c;研究课题组对比中外、调研…

《Python 快速入门》C站最全Python标准库总结

点赞 ➕ 评论 ➕ 收藏 养成三连好习惯 &#x1f345; 联系作者&#xff1a; 不吃西红柿 &#x1f345; 作者简介&#xff1a;CSDN 博客专家丨全站 Top 10&#x1f3c6;、HDZ 核心组成员、信息技术智库公号号主 &#x1f345; 简历模板、PPT 模板、学习资料、技术互助。关注…

工业4.0进行时:未来协作方式的变革

来源&#xff1a;资本实验室协作是将人类智力发挥至极致的方式&#xff0c;也是推动人类社会进步的重要手段。随着各种新技术的发展与应用&#xff0c;人类之间的协作方式也在随着技术的进步而进步。从面对面交流&#xff0c;到电话与传真、电子邮件与OA系统&#xff0c;再到在…

java之代理设计模式

代理模式是常用的java设计模式&#xff0c;他的特征是代理类与委托类有同样的接口&#xff0c;代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类&#xff0c;以及事后处理消息等。代理类与委托类之间通常会存在关联关系&#xff0c;一个代理类的对象与一个委托…

lisp中的*,**,***

在lisp中“*”除了乘法的作用外&#xff0c;还被用来保存REPL&#xff08;read-eval-print-loop&#xff09;中的返回值。其中 * -> 保存最后一次返回值。 ** -> *的上一次值。 *** -> **的上一次值。 例子如下&#xff1a; 而且  * (car /) ** …

为了帮粉丝完成毕业设计,我发现了一款私活神器

一、缘起 不日前&#xff0c;有粉丝找到我&#xff0c;让我帮着做个&#xff1a; 教师管理系统 由于种种借口&#xff0c;我当时把问题交给群友去解决了..... 思来想去&#xff0c;越想越内疚&#xff0c;于是就请教了经常做私活的小伙伴。 必须分享给更多的小伙伴~ 二、揭开面…

狗脸识别APP整合

本文主要包括以下内容 android studio中导入so文件 通过URI获得Bitmap android studio中导入so文件 在main文件夹下建立jniLibs目录&#xff0c;并将so文件拷贝进去即可。 注意 声明的native方法与so文件中定义的方法的包名必须相同 通过URI获得Bitmap private Bitmap …