本篇博客通过一个简单的登陆小样例来入门,简单了解一下struts2是怎样工作的:

第一步引入Jar包:

commons-fileupload-1.2.1.jar,文件上传

commons-logging-1.0.4.jar,日志包

freemarker-2.3.15.jar,struts2的UI标签的模板使用freemarker编写

ognl-2.7.3.jar对象图导航语言,通过它来读写对象属性

struts2-core-2.1.8.1.jar。开发的核心类库

xwork-core-2.1.6.jar,xwork类库,struts2在其上进行构建

大部分时候,使用struts2的Web应用不须要利用struts2的所有特性,所以没有必要将所有的jar文件都拷贝到lib目录下。

第二步:配置web.xml配置文件里,配置StrutsPrepareAndExecuteFilter。Filter是Struts2的核心。负责初始化整个Struts框架而且处理全部的请求。

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

第三步。建立JSP页面(index.jsp,login.jsp,login_error.jsp,login_success.jsp)

Index.jsp

<a  href="login.jsp">登录</a>

login.jsp

<formaction="login.action">
用户:<inputtype="text" name="username"/><br/>
密码:<inputtype="password" name="password"/><br>
<input type="submit" value="登录"/>
</form>

第四步,创建Action,并通过getter,setter方法获取数据。也就是说Struts2是通过Action获取数据的。

public classLoginAction {

//拿到表单上的数据
privateString username; private String password; publicString getUsername() {
returnusername;
} publicvoid setUsername(String username) {
this.username= username;
} publicString getPassword() {
returnpassword;
} publicvoid setPassword(String password) {
this.password= password;
} publicString execute() throws Exception{ if("admin".equals(username)&& "admin".equals(password)){
return"success";
}else{
return"error";
} }

能够实现Action接口,也能够不实现Action接口,主要是为了保证execute的正确定义,为了防止类似execute方法书写错误,Action接口里面定义了好几种字符串。防止字符串写错。Action接口代码例如以下:

public interface Action{ 

    //定义Action接口里包括的一些结果字符串
public static final String ERROR ="error";
public static final String INPUT ="input";
public static final String LOGIN ="login";
public static final String NONE ="none";
public static final String SUCCESS ="success"; //定义处理用户请求的execute()方法
public String execute() throwsException;
}

第五步。配置struts.xml文件。这个文件是框架的核心文件,在这个默认的配置文件中,我们依据须要能够再包含其它的配置文件。

<struts>
<!--须要继承struts-default包,这样就拥有了最主要的功能 -->
<packagename="struts2" extends="struts-default">
<actionname="login"class="com.bjpowernode.struts2.LoginAction">
<resultname="success">/login_success.jsp</result>
<resultname="error">/login_error.jsp</result>
</action>
</package>
</struts>

启动tomact,在浏览器中訪问就可以。

效果:

输入网址,首页登陆:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1dGVuZ3RlbmcxMzA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

跳转到登陆页,该页包括一个表单。用户输username和password,点击登陆,跳转到指定的Action里进行处理。username和password正确则跳转到成功页,否则跳转到登陆失败页:

跳转到登陆成功页:

Struts2的运行流程:

client在浏览器中输入一个url地址

通过url请求通过http协议发送给tomcat

tomcat依据url找到相应项目里面的web.xml文件

在web.xml里面会发现有sruts2的配置,依据配置找到struts.xml配置文件

依据url解析struts.xml配置文件找到对应的类

调用完class返回String。依据Struts2.xml配置返回到相应的jsp页面

总结:

通过这个样例也了解到struts2把数据放在Action里面,是通过xml文件的配置去调用。想要调用哪个类,哪个jsp就去配置就可以。

通过这个小样例先简单了解struts2的运行流程以及是如何调用的,再继续深入学习。

【跟我一步一步学Struts2】——登陆样例的更多相关文章

  1. 【Struts2】Struts2纯手工安装、配置以及Helloworld,以最新版struts 2.3.20 GA做样例

    很多网上的教程对Struts2的配置.安装弄得不明不白,非常多高手以为小白是什么都懂.很多细节上面的地方没有说明清楚,甚至还有在Maven上面解说的,要知道Struts2跟Maven没有半点的关系.全 ...

  2. 一步一步学ROP之linux_x64篇

    一步一步学ROP之linux_x64篇 一.序 **ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防 ...

  3. 一步一步学ROP之linux_x86篇

    一步一步学ROP之linux_x86篇 作者:蒸米@阿里聚安全 ​ 一.序 ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过 ...

  4. (转载)一步一步学Linq to sql系列文章

    现在Linq to sql的资料还不是很多,本人水平有限,如果有错或者误导请指出,谢谢. 一步一步学Linq to sql(一):预备知识 一步一步学Linq to sql(二):DataContex ...

  5. 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计

    本帖最后由 xinxincaijq 于 2013-1-9 10:27 编辑 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计 转自博客:http:// ...

  6. 一步一步学android控件(之十五) —— DegitalClock & AnalogClock

    原本计划DigitalClock和AnalogClock单独各一篇来写,但是想想,两个控件的作用都一样,就和在一起写一篇了. DegitalClock和AnalogClock控件主要用于显示当前时间信 ...

  7. 一步一步学Remoting系列文章

    转自:http://www.cnblogs.com/lovecherry/archive/2005/05/24/161437.html (原创)一步一步学Remoting之一:从简单开始(原创)一步一 ...

  8. 一步一步学android控件(之十六)—— CheckBox

    根据使用场景不同,有时候使用系统默认的CheckBox样式就可以了,但是有时候就需要自定义CheckBox的样式.今天主要学习如何自定义CheckBox样式.在CheckBox状态改变时有时需要做一些 ...

  9. 一步一步学Python(2) 连接多台主机执行脚本

    最近在客户现场,每日都需要巡检大量主机系统的备库信息.如果一台台执行,时间浪费的就太冤枉了. 参考同事之前写的一个python脚本,配合各主机上写好的shell检查脚本,实现一次操作得到所有巡检结果. ...

随机推荐

  1. XP禁用了U盘和移动硬盘方法

    会不会是你XP禁用了U盘和移动硬盘下面这些是任何禁用U盘的!你自己反着试下嘛!方法一,BIOS设置法(快刀斩乱麻法) 进入BIOS设置,选择“Integrated Peripherals”选项,展开后 ...

  2. python3+beautifulSoup4.6抓取某网站小说(三)网页分析,BeautifulSoup解析

    本章学习内容:将网站上的小说都爬下来,存储到本地. 目标网站:www.cuiweijuxs.com 分析页面,发现一共4步:从主页进入分版打开分页列表.打开分页下所有链接.打开作品页面.打开单章内容. ...

  3. 四种方案解决ScrollView嵌套ListView问题 [复制链接]

    以下文章转自@安卓泡面 在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全.我试过很多种方法,它们各有利弊. 在这里我将会从使用ScrollVie ...

  4. 通过反编译小程序来学习前端:wxappUnpacker

    小程序开发时,会有4种文件:.wxss  .json  .wxs  .wxml. 正式上传到腾讯时,目录会被打包,使用时再发放给客户端. 这个文件包后缀是 .wxapkg.只要手机用过这个小程序,文件 ...

  5. 理解javascript中的Array类型

    引子: 从事前端开发有段时间了,个人观点:想在前端开发这条路上走的更远,不仅要学好HTML&HTML5.CSS&CSS3,最重要的就是要学好javascript了.所以打好javasc ...

  6. HDU 4473

    题目大意: 给定一个long long 型的数 n,找到一共有多少对a,b,使比n小的某一个数的是a*b的倍数 这样我们可以理解为 存在a*b*c <= n,令 a <= b <= ...

  7. 【NOIP2016】蚯蚓(单调队列)

    题意: 思路: 我们发现,对于任意两次切割i和j,i<j,在进行完第j次切割后,第i次切割的u/v部分一定大于等于第j次切割的u/v部分,第i次的1-u/v部分也一定大于等于第j次的1-u/v部 ...

  8. 创建Django项目(四)——模型

    2013-08-06 22:24:06|           1.创建模型          (1) "mysite\blog\models.py"文件中的内容: # -*- co ...

  9. 洛谷 P1608 路径统计

    P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...

  10. 洛谷 P4379 [USACO18OPEN]Lemonade Line

    P4379 [USACO18OPEN]Lemonade Line 题目描述 这是农场上一个炎热的夏日,Farmer John要给他的 NN 头奶牛发柠檬汽水了!所有的 NN 头奶牛(方便起见,编号为  ...