提要:最近写了一个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

 <package name="action" extends="struts-default" namespace="user">

 </package>

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

 <button class="btn btn-custom-primary btn-lg btn-block btn-auth"  onclick='login()'></button>

js(这里用的是JQuery)

 function login(){
if($("#username").val().length==0){
alert("用户名不能为空");
return;
}
if($("#password").val().length==0){
alert("密码不能为空");
return;
}
$.ajax({
type:'post',
url:'${pageContext.request.contextPath}/theme/login.action',
data:{
'username':$("#username").val(),
'password':$("#password").val(),
},
dataType:'json',
success:function(returnData){
if(returnData.success==true){
window.location.replace("${pageContext.request.contextPath}/theme/main.jsp");
} else {
alert("用户名或密码错误");
}
},
error:function(e) {
alert("登录失败");
}
});
}

再说Form表单:

 <form class="form-horizontal" role="form" action="${pageContext.request.contextPath}/theme/login.action">
<h4 class="modal-title" id="myModalLabel">账号:</h4>
<div class="form-group">
<label for="username" class="control-label sr-only">Username</label>
<div class="col-sm-12">
<div class="input-group">
<input type="text" name="username" id="username" class="form-control">
<span class="input-group-addon"><i class="fa fa-user"></i></span>
</div>
</div>
</div>
<h4 class="modal-title" id="myModalLabel">密码:</h4>
<label for="password" class="control-label sr-only">Password</label>
<div class="form-group">
<div class="col-sm-12">
<div class="input-group">
<input type="password" name="password" id="password" class="form-control">
<span class="input-group-addon"><i class="fa fa-lock"></i></span>
</div>
</div>
</div>
<div id="placeholder" style="width:10px;height:10px"></div>
<button type="submit" class="btn btn-custom-primary btn-lg btn-block btn-auth"><i class="fa fa-arrow-circle-o-right"></i> Login</button>
</form>

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

 public class LoginAction extends BaseAction{
public String username;
public String password; public String doLogin(){
User user = UserDao.getUser(username,password);
if(user != null) {
ActionContext.getContext().getSession().put(Constanst.USERNAME_OF_SESSION, username);
ActionContext.getContext().getSession().put(Constanst.PASSWORD_OF_SESSION, password);
flag = true;
} else {
msg = "用户名或密码错误";
}
String jsonStr = "{\"success\":" + flag + ", \"msg\":\"" + msg + "\"}";
try {
this.setInputStream(new ByteArrayInputStream(jsonStr.getBytes("utf-8")));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return SUCCESS;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} }

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

待续

3.连接数据库的问题

待续

4.先上图

源代码:http://pan.baidu.com/s/1hq6RZYs

Struct2-使用随笔的更多相关文章

  1. AI人工智能系列随笔

    初探 AI人工智能系列随笔:syntaxnet 初探(1)

  2. 【置顶】CoreCLR系列随笔

    CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ...

  3. C++随笔:.NET CoreCLR之GC探索(4)

    今天继续来 带大家讲解CoreCLR之GC,首先我们继续看这个GCSample,这篇文章是上一篇文章的继续,如果有不清楚的,还请翻到我写的上一篇随笔.下面我们继续: // Initialize fre ...

  4. C++随笔:从Hello World 探秘CoreCLR的内部(1)

    紧接着上次的问题,上次的问题其实很简单,就是HelloWorld.exe运行失败,而本文的目的,就是成功调试HelloWorld这个控制台应用程序. 通过我的寻找,其实是一个名为TryRun的文件出了 ...

  5. ASP.NET MVC 系列随笔汇总[未完待续……]

    ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...

  6. 使用Beautiful Soup编写一个爬虫 系列随笔汇总

    这几篇博文只是为了记录学习Beautiful Soup的过程,不仅方便自己以后查看,也许能帮到同样在学习这个技术的朋友.通过学习Beautiful Soup基础知识 完成了一个简单的爬虫服务:从all ...

  7. 利用Python进行数据分析 基础系列随笔汇总

    一共 15 篇随笔,主要是为了记录数据分析过程中的一些小 demo,分享给其他需要的网友,更为了方便以后自己查看,15 篇随笔,每篇内容基本都是以一句说明加一段代码的方式, 保持简单小巧,看起来也清晰 ...

  8. 《高性能javascript》 领悟随笔之-------DOM编程篇(二)

    <高性能javascript> 领悟随笔之-------DOM编程篇二 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...

  9. 《高性能javascript》 领悟随笔之-------DOM编程篇

    <高性能javascript> 领悟随笔之-------DOM编程篇一 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...

  10. css随笔1

    1.简单清除浏览器样式 *{        padding: 0px;        margin: 0px;    } 2.得到屏幕范围的div html,body{        width: 1 ...

随机推荐

  1. 可持久化01Trie树【p4735(bzoj3261)】最大异或和

    Description 给定一个非负整数序列\(\{a\}\),初始长度为\(N\). 有\(M\)个操作,有以下两种操作类型: A x:添加操作,表示在序列末尾添加一个数\(x\),序列的长度\(N ...

  2. 【Java NIO】一文了解NIO

    Java NIO 1 背景介绍 在上一篇文章中我们介绍了Java基本IO,也就是阻塞式IO(BIO),在JDK1.4版本后推出了新的IO系统(NIO),也可以理解为非阻塞IO(Non-Blocking ...

  3. 【UVA 11077】 Find the Permutations (置换+第一类斯特林数)

    Find the Permutations Sorting is one of the most used operations in real life, where Computer Scienc ...

  4. BZOJ 2527 [Poi2011]Meteors(整体二分)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2527 [题目大意] 有N个成员国.现在它发现了一颗新的星球, 这颗星球的轨道被分为M份 ...

  5. 【贪心】hdu6180 Schedule

    题意:给你n个任务的开始时间和结束时间,一个机器同时最多执行一个任务,问你最少要几个机器.保证机器最少的前提下,问你每个机器的开动时间(最后一次关闭-第一次开启)之和最少是多少. 把这些线段画在数轴上 ...

  6. C#反射读取和设置类的属性

    C#反射技术的简单操作(读取和设置类的属性) http://www.cnblogs.com/william-lin/archive/2013/06/05/3118233.html 泛型方法通过反射创建 ...

  7. SQL Server 2008数据库备份和还原(还原是必须有完整备份)

    转自lwccc, SQLserver2008数据库备份和还原问题(还原是必须有完整备份) 首先,我要说明的是你必须拥有完整的数据库备份,下面的还原教程,才算有用. 这个连接是某高手的异常恢复方法, 实 ...

  8. 【web.xml】报错java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

    今天搭建新的项目,虽然在web.xml中配置了ContextLoaderListener以及IntrospectorCleanupListener 如下: web.xml中部分代码: <!-- ...

  9. Spark学习视频整合

    1.<Scala深入浅出实战经典>http://pan.baidu.com/s/1pJnAUr5 2.<Spark纯实战公益大讲坛>http://pan.baidu.com/s ...

  10. 破解MyEclipse2015 stable3.0

    整个破解过程最好断网: 1.安装好MyEclipse2015 stable3后,打开设置好工作目录后,退出.2.将plugins文件夹中的文件拷贝到myeclipse安装目录的plugins文件夹下, ...