博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struct2-使用随笔
阅读量:6594 次
发布时间:2019-06-24

本文共 5808 字,大约阅读时间需要 19 分钟。

提要:最近写了一个2-3各页面的使用Struts2的Demo,在这里做下总结,都已经3年多没做J2EE了,有些感觉都快找不到了。

目录

1.必备开发工具

2.必备jar包

3.了解知识点

4.遇到的问题

一、必备开发工具

1.MyEclipse

2.Tomcat

3.JDK

4.MySQL

二、必备jar包

1.commons-collections-3.2.jar

2.commons-dbcp-1.2.2.jar

3.commons-io-1.4.jar

4.commons-lang-2.3.jar

5.commons-pool.jar

6.freemarker-2.3.15.jar

7.mysql-connector-java-5.1.6-bin.jar

8.ognl-2.7.3.jar

9.struts2-core-2.1.8.jar

10.xwork-core-2.1.6.jar

三、了解知识点

1.Struts2简介

Struts2与Struts1没有太多直接联系,是基于WebWork2发展而来.

2.Struts2框架的体系结构

C控制器 : FilterDispatcher(2.1.8之前版本使用),StrutsPrepareAndExecuteFilter(2.1.8及后续版本使用)
V视图 : Result组件(JSP,freemarker,json等各种视图响应),Struts2标签+OGNL
M模型 : Action组件,拦截器组件
3.Struts2主要组件介绍
FilterDispatcher:主要是负责请求和处理的转发,调用拦截器,Action,Result组件处理.
Action:主要是负责接收请求参数,执行业务处理.
Result:主要负责视图响应,比如完成JSP的跳转,将对象转成json字符并输出等
Interceptor : 主要负责封装共通处理逻辑.比如将请求信息填充到Action对象(内置),权限检查等共通处理(自定义)

4.Struts2配置文件介绍

struts.xml : 开发者定义,定义程序的Action,拦截器,Result等组件
struts.properties : 开发者定义,定义框架的一些属性参数
struts-default.xml : 框架内置,定义框架内置的拦截器,Result和Action等组件
default.properties : 框架内置,定义框架的一些默认参数值
struts-plugin.xml : 插件内置,定义整合新技术的拦截器和Result组件
5.Struts2核心处理流程
(1)服务器启动时,控制器解析struts.xml,struts-default.xml,default.properties,struts.properties,struts-plugin.xml配置文件
(2)客户所有请求发动到控制器,控制根据配置判断是否执行Struts2处理.(默认处理*.action或者*)
(3)如果属于Struts2请求,创建Action,拦截器等对象执行处理
a.执行拦截器前期处理
b.执行Action对象
c.执行Result生成响应信息
d.执行拦截器后期处理

6.入门实例

(1)引入开发包
struts2-core-2.1.8.jar
xwork-core-2.1.6.jar
freemarker-2.3.15.jar
ognl-2.7.3.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
javassist.jar(2.2版本需要)
(2)配置控制器
<filter>
<filter-name>Struts2Filter</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts2Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(3)添加主配置文件
在src下创建struts.xml主配置文件,dtd格式参考struts-default.xml
(4)添加视图,Action,及Action配置

7.Action相关配置

(1) namesapce属性:命名空间,用于限定Action请求名
示例1. namesapce属性为/user

1 
2 3

http://localhost:8080/struts2.1/user/index.action

示例2. namespace属性为/
http://localhost:8080/struts2.1/login.action
(2) 统配符*的使用
<action>元素的name属性可以使用若干个通配符*,
可以在其他属性中使用{1},{2}格式引用通配符代表的字符串
(3)动态方法调用的请求格式
/命名空间/请求名!业务方法名.action
(4)<param>元素的作用
可以为Action,拦截器,Result组件对象属性指定初始值.
8.如何使用request,session等对象
a. 从ActionContext获取Map封装类型
Map<String,Object> request = (Map<String,Object>)ActionContext.getContext().get("request");
Map<String,Object> session = ActionContext.getContext().getSession();
Map<String,Object> application = ActionContext.getContext().getSession();
b. 从ServletActionContext获取
ServletActionContext.getPageContext();
ServletActionContext.getRequest();
ServletActionContext.getServletContext();
ServletActionContext.getResponse();

四.遇到的问题

1.关于表单提交和Ajax提交

先说下Ajax提交:

html

1 

js(这里用的是JQuery)

1 function login(){ 2      if($("#username").val().length==0){ 3        alert("用户名不能为空"); 4        return; 5      } 6      if($("#password").val().length==0){ 7         alert("密码不能为空"); 8         return; 9      }10      $.ajax({11         type:'post',12         url:'${pageContext.request.contextPath}/theme/login.action',13         data:{14            'username':$("#username").val(),15            'password':$("#password").val(),16         },17         dataType:'json',18         success:function(returnData){19            if(returnData.success==true){20              window.location.replace("${pageContext.request.contextPath}/theme/main.jsp");21            } else {22                 alert("用户名或密码错误");23            }24         },25         error:function(e) {26              alert("登录失败");27         }28      });29   }

再说Form表单:

1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

在该请求过程中会带2个参数到后台,参数名1:username,参数名2:password

1 public class LoginAction extends BaseAction{ 2     public String username; 3     public String password; 4      5     public String doLogin(){ 6         User user = UserDao.getUser(username,password); 7         if(user != null) { 8             ActionContext.getContext().getSession().put(Constanst.USERNAME_OF_SESSION, username); 9             ActionContext.getContext().getSession().put(Constanst.PASSWORD_OF_SESSION, password);10             flag = true;11         }  else {12             msg = "用户名或密码错误";13         }14         String jsonStr = "{\"success\":" + flag + ", \"msg\":\"" + msg + "\"}";15         try {16             this.setInputStream(new ByteArrayInputStream(jsonStr.getBytes("utf-8")));17         } catch (UnsupportedEncodingException e) {18             e.printStackTrace();19         }20         return SUCCESS;21     }22     23     public String getUsername() {24         return username;25     }26 27     public void setUsername(String username) {28         this.username = username;29     }30 31     public String getPassword() {32         return password;33     }34 35     public void setPassword(String password) {36         this.password = password;37     }38 39 }

2.请求返回json和html的写法

待续

3.连接数据库的问题

待续

4.先上图

源代码:

 

转载于:https://www.cnblogs.com/royi123/p/4975720.html

你可能感兴趣的文章
46、android studio第一次使用时卡在gradle下载怎么解决?
查看>>
C# 字符大小转换及 remove,substring,replace
查看>>
CentOS 6.7安装Docker
查看>>
UML类图与类的关系详解
查看>>
05构建之法阅读笔记之五
查看>>
POJ3189 Steady Cow Assignment ——二分答案+二分图多重匹配——Pku3189
查看>>
浅谈算法——莫比乌斯函数,莫比乌斯反演和杜教筛
查看>>
Failed at the bitcore-node@3.1.3 preinstall script './scripts/download' 设置linux proxy (代理)的方式...
查看>>
javascript深入理解js闭包
查看>>
条件修饰词
查看>>
CSS3圆角详解
查看>>
可变对象与不可变对象
查看>>
第四次作业
查看>>
lucas定理
查看>>
poj2975 Nim 胜利的方案数
查看>>
Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别
查看>>
asp.net中chart中如何插入table实现混合显示
查看>>
显示隐藏文件的批处理!
查看>>
makemigrations 和 migrate工作原理分别是什么
查看>>
数据库事务
查看>>