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数据可视化。 有问题的…

熟悉 ASP.NET MVC 类

System.Web.Mvc 命名空间 System.Web.Mvc 命名空间包含一些类和接口&#xff0c;它们支持用于创建 Web 应用程序的 ASP.NET 模型视图控制器 (MVC) 框架。该命名空间包含表示控制器、控制器工厂、操作结果、视图、分部视图以及模型联编程序等的类。 System.Web.Mvc.Ajax 命名空间…

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;与其他行业的结合也成为…

nginx php-fpm 下的php.ini在哪里

phpinfo(); 看下里面有路径&#xff0c;如果路径下没有&#xff0c;就在编译包里面有 php.ini-development / php.ini-production cp到路径下。 php.ini-development 适合开发程式使用&#xff08;测试用&#xff09; php.ini-production 拥有较高的安全性设定&#xff0c;则适…

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

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

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

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

Hibernate之性能优化

本文主要包括以下内容 性能优化的方法 发出的sql语句越少&#xff0c;性能越高 方法&#xff1a; 1、懒加载 2、抓取策略 3、缓存策略 4、HQL语句 懒加载 类的懒加载 1、利用session.load方法可以产生代理对象 2、在session.load方法执行的时候并不发出sql语句 3、…

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

Android学习总结00之废话

前几天终于将《Android开发从零开始》共43个视频看完&#xff0c;在此简单的做一下总结。本来起了个题目叫《Android开发从零开始》学习后记&#xff0c;后来感觉太长了&#xff0c;起个短一点的名字《Android学习总结》&#xff0c;既然不叫《Android开发从零开始》学习后记的…

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

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

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

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

C#反射的特性

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

Spring基础知识

本文主要包括以下内容 注解 注解 1、注解就是为了说明java中的某一个部分的作用(Type) 2、注解都可以用于哪个部门是Target注解起的作用 3、注解可以标注在ElementType枚举类所指定的位置上 4、 Documented //该注解是否出现在帮助文档中 Retention(Retenti…

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

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

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

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