【IDEA版】简单快速上手撸Struts框架

网友投稿 640 2022-09-02 07:00:16

【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.xml​​​​3.7、访问​​

​​四、Struts2如何获取request和response对象​​

​​4.1、实例--登录跳转开发​​

​​五、Struts2同包跳转问题​​

​​5.1、Action--->jsp​​​​5.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​​控制器来处理的,现在要改变这种处理方式了。

Struts_day1 org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter Struts_day1 /*

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" %> Title

HelloWorld

index.jsp:

3.6、配置Struts.xml

index.jsp

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​​​:​​a【要跳转的Action标签name的属性名】​​

​​redirect​​​:​​a【要跳转的Action标签的name属性名】​​

index.jsp OK.jsp login.jsp b a

六、namespace命名空间的使用

定义:它是struts.xml配置中package标签中的一个属性作用:Struts2将同一个模块一组action放在同一个包中,将不同模块action放在不同包中一旦​​package​​包中加入了​​namespace​​在访问包中​​action​​路径时必须先加入​​namespace​​的路径。

访问路径:

​​​​namespace​​。

七、Struts2中的跨包跳转

因为前面引入了命名空间的概念,所以很多​​action​​会被分包处理,那么这个时候想要跳转就会出现跨包跳转的现象。

namespace之间的跳转跨越 /student /findAll OK.jsp login.jsp b a

八、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:

/index.jsp /index.jsp

访问前:

记得要带上自己的​​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小时内删除侵权内容。

上一篇:如何在Linux下,快速搭建php开发环境(ubuntu搭建php环境)
下一篇:一文带你彻底理解Linux的各种终端类型及概念(linux常用终端命令)
相关文章