网络小程序开发(小程序开发软件开发)
640
2022-09-02
【IDEA版】简单快速上手撸Struts框架
Struts2框架入门
写在开头:
传统的MVC开发模式中,处理业务层用到的是Servlet技术,但是Servlet存在一些问题,做表单传递参数时,会导致大量的数据参数冗余,不能自动类型转换;页面跳转时,路径被写死在类文件中,不利于后续维护。我们为每一个功能开发一个Servlet控制器,会导致Servlet控制器过多,也不利于维护。所以我们引入了Struts2框架的学习。 对于框架而言,它属于软件开发中的半成品,主要解决一些软件开发中的一些通用问题,提高开发效率。
文章目录
Struts2框架入门一、认识Struts2框架二、Struts2开发流程与Servlet开发流程对比三、Struts2环境的搭建
3.0、项目目录结构一览:3.1、创建项目3.2、引入 `Struts2`核心依赖
**3.3.1、核心类库链接:**
3.3、预先配置 `Web.xml`3.4、开发 `Action`类3.5、两个页面代码:**HelloWorld.jsp** 和 **index.jsp**两个页面3.6、配置Struts.xml3.7、访问
四、Struts2如何获取request和response对象
4.1、实例--登录跳转开发
五、Struts2同包跳转问题
5.1、Action--->jsp5.2、Action--->Action
六、namespace命名空间的使用七、Struts2中的跨包跳转八、Struts2框架前期总结整理九、Struts2中的标准开发方式十、Struts2中成员变量之参数的接收(零散和对象)
10.1、成员变量收集参数的使用好处10.2、使用方法10.3、使用Struts2成员变量接收零散型参数10.4、使用Struts2成员变量接收对象类型的参数10.5、Action获取表单提交的数据
十一、OGNL十二、值栈
12.1、栈对象存储位置12.2、获取值栈对象12.3、值栈内部结构12.4、向值栈存放数据的方式
十三、文件上传
13.1、如何上传文件
十四、文件的下载
14.1如何实现文件下载
十五、拦截器
15.1定义15.2作用15.3拦截器特点15.4开发拦截器15.5拦截器栈
一、认识Struts2框架
它是Apache公司提供的,典型的 MVC框架。Struts提供了一个 Action控制器 替换原有的 Servlet控制器,也是基于 MVC的软件开发模式。Struts通过官网下载之后可以得到其目录结构如下:
apps | Struts2提供的应用实例 | |
docs | Java doc注释 | 常用API接口 |
lib | Struts2核心库 | 三方依赖库 |
src | Struts2中的源代码 |
二、Struts2开发流程与Servlet开发流程对比
在这里首先将开发流程进行一次对比,有助于我们快速上手开发。Struts框架方便了很多,在做逻辑跳转的时候,可以选择直接配置Struts.xml
三、Struts2环境的搭建
3.0、项目目录结构一览:
3.1、创建项目
项目新建完成之后,将我们的jar包导入到一个新建的lib文件夹下,如图:
3.2、引入 Struts2核心依赖
3.3.1、核心类库链接:
链接:提取码:aavp
3.3、预先配置 Web.xml
配置Struts2的核心Filter用来拦截客户端的所有请求,将这些请求交给Struts2
因为以前 Web.xml是用来配置Servlet的,所有请求是交给对应 Servlet控制器来处理的,现在要改变这种处理方式了。
3.4、开发 Action类
开发 Action类,首先新建一个包:com.linghu.action 新建 TestAction类,这相当于一个控制器,当客户端发送请求的时候,我们的控制器会向后台象征性的打印一句“Hello Struts~~”,接下来我们就新建两个视图,分别是:HelloWorld.jsp 和 index.jsp两个页面。
package com.linghu.action;import javax.swing.*;import java.awt.event.ActionEvent;import java.beans.PropertyChangeListener;public class TestAction implements Action { public String execute() throws Exception{ System.out.println("Hello Struts~~"); return "OK"; } @Override public Object getValue(String s) { return null; } @Override public void putValue(String s, Object o) { } @Override public void setEnabled(boolean b) { } @Override public boolean isEnabled() { return false; } @Override public void addPropertyChangeListener(PropertyChangeListener propertyChangeListener) { } @Override public void removePropertyChangeListener(PropertyChangeListener propertyChangeListener) { } @Override public void actionPerformed(ActionEvent actionEvent) { }}
3.5、两个页面代码:HelloWorld.jsp 和 index.jsp两个页面
HelloWorld.jsp:
<%-- Created by IntelliJ IDEA. User: 编程小哥令狐 Date: 2020/10/21 Time: 16:55 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %>
index.jsp:
3.6、配置Struts.xml
3.7、访问
四、Struts2如何获取request和response对象
Struts2可以通过工具类ServletActionContext获取request对象,从而实现搜集数据的功能。通过工具类ServletActionContext获取request对象之后,我们提交的数据被保存在了这个对象里了,我们 用requset.getParameter()方法获取对象request中保存的参数,将它存在新变量username和password中
4.1、实例–登录跳转开发
过程略~
我的项目原码分享:
name="ok||error" type="redirect">login.jsp
5.2、Action—>Action
forward:
redirect:
六、namespace命名空间的使用
定义:它是struts.xml配置中package标签中的一个属性作用:Struts2将同一个模块一组action放在同一个包中,将不同模块action放在不同包中一旦package包中加入了namespace在访问包中action路径时必须先加入namespace的路径。
访问路径:
namespace。
七、Struts2中的跨包跳转
因为前面引入了命名空间的概念,所以很多action会被分包处理,那么这个时候想要跳转就会出现跨包跳转的现象。
八、Struts2框架前期总结整理
九、Struts2中的标准开发方式
在原有的Struts2开发中,我们写的类是继承的Action来写的,所以默认的处理方法为execute(),现在我们可以重新继承一个新类ActionSupport类,并自定义处理方法。
如何在配置文件里边配置访问调用方法的图示:
这里们用一个项目来说明这种新的开发方式:
首先 看项目结构:
UserAction:
package com.linghu.action;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport { //登录 public String login(){ //1、搜集数据 //2、调用登录业务对象 System.out.println("用户登录方法~~~~"); //3、流程跳转 return "OK"; } //注册 public String register(){ //1、搜集数据 //2、调用注册业务对象 System.out.println("用户注册方法~~~~"); //3、流程跳转 return "OK"; }}
Struts.xml:
访问前:
记得要带上自己的namespace属性名/action属性名
跳转后:
十、Struts2中成员变量之参数的接收(零散和对象)
首先回顾一下成员变量的接收方式:
request.getParameter("key");对现有request收集参数进行封装,推荐使用成员变量收集参数。
10.1、成员变量收集参数的使用好处
自动完成数据类型转换减少代码冗余
10.2、使用方法
10.3、使用Struts2成员变量接收零散型参数
10.4、使用Struts2成员变量接收对象类型的参数
10.5、Action获取表单提交的数据
在web阶段,我们是将表单数据提交到Servlet里面,在Servlet里面使用request对象里的方法getParameter来获取提交数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6o6duwl0-1603713837054)(request域对象进行存储。
12.1、栈对象存储位置
12.2、获取值栈对象
12.3、值栈内部结构
(1)第一部分:root,它的结构是 List 集合(2)第二部分:context,它的结构是 Map 集合
12.4、向值栈存放数据的方式
十三、文件上传
用户将本地文件上传到服务器的过程
13.1、如何上传文件
提供一个选择按钮
2.在页面中准备一个form表单,将文件的入口放在这个表单内,在表单中设计一个提交按钮
3.表单提交方式必须为post
package com.linghu.action;import com.opensymphony.xwork2.ActionSupport;import org.apache.struts2.ServletActionContext;import java.io.*;/** 测试文件的Action** */public class FileAction extends ActionSupport { private File aaa; public String upload() throws IOException { /* * 1.搜集数据 * 2.处理业务 * 3.流程跳转 * */ FileInputStream fileInputStream = new FileInputStream(aaa); //根据Upload文件夹的相对路径获取绝对路径 String realPath = ServletActionContext.getServletContext().getRealPath("/upload"); //获取文件输出流 FileOutputStream fileOutputStream = new FileOutputStream(new File(realPath + "1.jpg")); //文件拷贝 byte [] b=new byte[1024]; int lenth=0; while (true){ lenth=fileInputStream.read(b); if (lenth==-1) break; fileOutputStream.write(b,0,lenth); } //关流 fileInputStream.close(); fileOutputStream.close(); return "OK"; } public File getAaa() { return aaa; }}
十四、文件的下载
将服务器文件下载到本地计算机
14.1如何实现文件下载
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bRS3zU30-1603713837066)(aaa;}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。