Struts2学习第一天——struts2基本流程与配置
struts2框架
什么是框架,框架有什么用?
- 框架 是 实现部分功能的代码 (半成品),使用框架简化企业级软件开发 ,提高开发效率。
- 学习框架 ,清楚的知道框架能做什么? 还有哪些工作需要自己编码实现 ?
什么是struts2框架,它有什么用?
- Struts 2是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。
- 其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心
- struts2=struts1+webwork;
- struts2框架是apache产品。
- struts2是一个标准的mvc框架。
- javaweb中的model2模式就是一个mvc模式。 model2=servlet+jsp+javaBean
- struts2框架只能在
javaweb
开发中使用的。 - 使用struts2框架,可以简化我们的web开发,并且降低程序的耦合度。
XWork—它是webwork核心,提供了很多核心功能:
- 前端拦截机(interceptor)
- 运行时表单属性验证
- 类型转换
- 强大的表达式语言(OGNL – the Object Graph Navigation Language)
- IoC(Inversion of Control反转控制)容器等
类似于struts2框架的产品 :
- struts1 webwork jsf springmvc
- ssh—struts2 spring hibernate
- ssi—springmvc spring ibatis
Strust2 核心功能
- 允许POJO(Plain Old Java Objects)对象 作为Action
- Action的execute 方法不再与Servlet API耦合,更易测试
- 支持更多视图技术(JSP、FreeMarker、Velocity)
- 基于Spring AOP思想的拦截器机制,更易扩展
- 更强大、更易用输入校验功能
- 整合Ajax支持
struts2快速入门
- index.jsp——>HelloServlet——–>hello.jsp web开发流程.
index.jsp——>HelloAction———>hello.jsp struts2流程
Struts2的下载和安装
- http://struts.apache.org/download.cgi 下载Struts2 最新版
struts2的目录结构:
- apps: 该文件夹包含了基于struts2 的示例应用,这些示例应用对于学习者是非常有用的;例子程序
war
后缀表示web压缩文件 - docs : 该文件夹下包含了struts2 相关文档,包括struts2 快速入门、struts2的文档以及API文档等
- lib : 该文件夹下包含了Struts2框架和核心类库,以及struts2第三方插件类库
- 开发时没必要将lib目录下jar文件全部复制到项目中
- src : 该文件夹下包含了Struts2框架的全部源代码
- core 它是struts2的源代码
- xwork-core struts2底层使用了xwork,xwork的源代码
- apps: 该文件夹包含了基于struts2 的示例应用,这些示例应用对于学习者是非常有用的;例子程序
1.导入jar包
- 下载struts2的jar包 struts-2.3.15.1-all 版本.
- Struts运行必要jar包
- struts2-core-2.3.1.1.jar:Struts 2框架的核心类库
- xwork-core-2.3.1.1.jar:Command模式框架,WebWork和Struts2都基于xwork
- ognl-3.0.3.jar:对象图导航语言(Object Graph Navigation Language),struts2框架通过其读写对象的属性
- freemarker-2.3.18.jar:Struts 2的UI标签的模板使用FreeMarker编写
- commons-logging-1.1.x.jar:ASF出品的日志包,Struts 2框架使用这个日志,包来支持Log4J和JDK 1.4+的日志记录。
- commons-fileupload-1.2.2.jar: 文件上传组件,2.1.6版本后需要加入此文件
- commons-io-2.0.1.jar:传文件依赖的jar包
- commons-lang-2.5.jar:对java.lang包的增强
- asm-*.jar :类似javassits
- log4j-1.2.17:日志类库
- 开发中为了方便导入,可以使用app/struts2-blank.war 携带jar包
注意:在struts2开发,一般情况下最少导入的jar包,去
apps
下的struts2-blank
示例程序中copy。将war
后缀改为rar
后解压。2.创建index.jsp,hello.jsp页面
- 在index.jsp (发起请求页面)
<a href="${pageContext.request.contextPath}/hello">第一次使用struts2</a>
- hello.jsp (结果页面)
<h1>你好,Struts2<h1>
- 结果页面显示 struts2框架访问成功
- 在index.jsp (发起请求页面)
3.对struts2框架进行配置
- 1.web.xml文件中配置前端控制器(核心控制器)—–就是一个Filter
- 目的:是为了让struts2框架可以运行。
- 过滤器配置
/*
, 但是struts2 默认处理.action结尾请求,分发到相应Action类
- 1.web.xml文件中配置前端控制器(核心控制器)—–就是一个Filter
<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>* 2.创建一个struts.xml配置文件 ,这个是struts2框架配置文件。
* 目的:是为了struts2框架流程可以执行。
* 名称:struts.xml
* 位置:src下(classes下)自动配置 struts-2.3.30--->Apps--->struts2-blank---->tomcat--->webapps根目录下
启动tomcat将自动配置
webapps--->struts2-blank-->web
- 4.创建一个HelloAction类
- 要求,在HelloAction类中创建一个返回值是String类型的方法,注意,无参数。
public class HelloAction {
public String say(){
System.out.println("hello world");
return "good"; // 结果页面命名
}
}- 4.创建一个HelloAction类
struts2 的Action类似以前编写的Servlet程序,可以处理用户提交请求,但是Struts2的Action可以POJO对象
5.在struts.xml文件中配置HelloAction
<package name="default" namespace="/" extends="struts-default">
<action name="hello" class="cn.itcast.action.HelloAction"
method="say">
<result name="good">/hello.jsp</result>
</action>
</package>- 6.在index.jsp中添加连接,测试
<a href="${pageContext.request.contextPath}/hello">第一次使用struts2</a>
- 在地址栏中输入:http://localhost/struts2_day01/index.jsp 访问连接,就可以看到
- HelloAction类中的say方法执行了,也跳转到了hello.jsp.
Struts2 处理流程
- 对入门程序进行流程分析
方法的返回字符串和result结果对应关系:
Action类的result和方法中return结果对应,如果有一个返回结果,对应配置一个result标签,如果有两个返回结果,需要配置两个标签。result标签的name值要和方法中返回的字符串一致。
- 6.在index.jsp中添加连接,测试
Action接收用户上传参数的方式有三种
1.属性方式接收参数
2.JavaBean方式接收参数
3.ModelDriven方式接收参数
其中属性方式接收参数的方法是在Action中定义私有的成员变量来接受客户端上传的参数。注意上传页面参数名必须与Action中定义的属性名一致,且需为成员变量定义
getter和setter方法
1.属性方式接收
- 代码演示
- reg.jsp和 show.jsp
<form method="post" action="UserAction.action">
姓名:<input type="text" name="uname"/><br/>
密码:<input type="password" name="upwd"/><br/>
<select name="sex">
<option value="1">男</option>
<option value="0">女</option>
</select>
<input type="submit" value="登陆">
</form>
<h1>用户填写信息</h1>
<h4>用户名:${uname}</h4>
<h4>密码:${upwd}</h4>
<h4>性别:${sexName}</h4>
UserAction
public class UserAction implements Action {
//Action的属性,1.封装参数信息(属性名与参数名相同)
private String uname;
private String upwd;
private int sex; //2.保存业务执行的数据,Action的属性自动存储在request范围内
private String sexName; @Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println(uname+" "+upwd+" "+sex);
//调用业务逻辑
sexName=(sex==1?"男":"女");
//保存数据,业务数据保存到Action //返回结果字符串
return "show";
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpwd() {
return upwd;
}
public void setUpwd(String upwd) {
this.upwd = upwd;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public String getSexName() {
return sexName;
}
public void setSexName(String sexName) {
this.sexName = sexName;
}
2.JavaBean方式接收参数的Action代码
private User user; public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
提交参数的页面代码
<TD class=field>用 户 名:</TD>
<TD>
<INPUT id="user_name" class="text" type="text" name="user.uname"> </TD></TR>
<TR>
<TD class=field>密 码:</TD>
<TD><INPUT id="user_password" class="text" type="password" name="user.upwd"> </TD></TR>
这段代码中name="user.uname"代表文本框的内容由Action中user对象的uname属性接收。
在JSP页面中,可以使用<s:property value="user.uname"/>输出Action中user对象的uname属性的值,其他属性输出同理。
3.ModelDriven方式接收参数
在Action中实现ModelDriven接口来接收客户端上传的参数。这种方法仍然需要实体类User,它的运行过程是:Struts2调用ModelDriven接口中的getModel()方法,取得Action中的user对象,再把上传的用户名,密码存入user对象
public class UserAction implements ModelDriven{
private User user=new user();
@Override
public User getModel(){
return user;
}
public String execute(){
return "success";
}
}
UserAction类中的User对象user用来接收用户名、密码。getModel()是ModelDriven接口中定义的方法,它提供了类外部对user对象的访问。
提交参数的页面代码:
<form action="login" method="post">
用户名:<input type="text" name="userName"><br/>
密码:<input type="password" name="password"><br/>
<input type="submit" value="登陆">
</form>
ModelDriven方式接收参数的页面代码中。提交参数名不需要加对象名,如name="userName"。
ModelDriven方式接收参数使用不多,但它使用了一种先进的编程思想:控制反转(Inversion of Control,IoC)或依赖注入。在登陆的例子中UserAction的成员user是由其他类来初始化的,这种方式分离了初始化对象和使用对象的代码,使得类的职责更加单一明确,降低了耦合度。
Struts2学习第一天——struts2基本流程与配置的更多相关文章
- Struts2学习第一天--Struts2的概述、Struts2的入门、Struts2常见的配置、Struts2的Action的编写
action的name要与访问路径对应.hello.action. 加到tomcat启动 访问:http://localhost:8080/struts2-1/demo1/demo1.jsp 改为su ...
- 【Java EE 学习 34】【struts2学习第一天】
一.struts2简介 struts2是一个用来开发MVC应用程序的框架.它提供了Web应用程序开发过程中的一些常见问题的解决方案. 1.struts2的作用域范围:三层架构当中的第一层,相当于MVC ...
- [原创]java WEB学习笔记71:Struts2 学习之路-- struts2常见的内建验证程序及注意点,短路验证,非字段验证,错误消息的重用
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记70:Struts2 学习之路-- struts2拦截器源码分析,运行流程
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Struts2框架学习第一章——Struts2概述
本章要点 — Web应用的发展 — Model 1和Model 2 — MVC思想 — MVC模式的优势 — 常用MVC框架及其特征 — Struts 1的基本结构及其存在的问题 — We ...
- Struts2 学习第一步准备工作
第一步:安装下载MyEclispe10 对于MyEclispe的下载安装就不再详述了. 第二步:下载Struts-2.3.15 Struts-2.3.15下载地址: http://struts.apa ...
- Struts2学习笔记二:开发流程
一:创建项目,添加依赖包 二:在web.xml配置核心控制器 <filter> <filter-name>struts2</filter-name> <fil ...
- Struts2学习笔记一:工作流程与核心文件
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6807539.html 1:客户端发出请求到web服务器 2:请求经过一系列filter,最终到达Struts ...
- struts2学习第一天
Stuts2是基于MVC设计模式成熟的Web应用框架.不仅仅是Struts1的下一个版本,是一个全新的Struts架构.由WebWork社区跟Strut社区联手打造的.(教程来自W3Cschool) ...
随机推荐
- 外显率&显性上位
外显率(penetrance): 外显率是指条件下,群体中某一基因型(通常在杂合子状态下)个体表现出相应表型的百分率.外显率等于100%时称为完全外显(complete penetranc)低于100 ...
- CNTV视频回看下载地址
这其实不是新方法了,这个方法早在五六年前大家就在用,至今也没失效.但是五六年前那时候这个方法可以下载到过去三个月内CNTV直播过的视频,而现在只能下到一个星期的.之所以要下载回看版本,是因为比栏目版本 ...
- Mac 安装Rudy环境 pod安装前的准备工作
之前已经说过怎么使用pod 今天说一下安装pod之前的准备工作 首先呢就是Rudy 环境(前提是你已经安装了Xcode) 在终端输入一下命令 期间可能也许会要你输入密码 curl -L https:/ ...
- Swift3.0服务端开发(五) 记事本的开发(iOS端+服务端)
前边以及陆陆续续的介绍了使用Swift3.0开发的服务端应用程序的Perfect框架.本篇博客就做一个阶段性的总结,做一个完整的实例,其实这个实例在<Swift3.0服务端开发(一)>这篇 ...
- POJ1050(dp)
To the Max Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 46788 Accepted: 24774 Desc ...
- 2017qq红包雨最强攻略,
这个只支持苹果手机,而且要有苹果电脑,只有苹果手机是不行的. QQ红包规则:只要你到达指定的位置,就可以领取附近的红包,一般也就几毛,还有几分的,当然也不排除有更高的,只不过我是没遇到... 那么既然 ...
- JavaScript字符集编码与解码
一.字符集 1)字符与字节(Character) 字符是各种文字和符号的总称,包括乱码:一个字符对应1~n个字节,一字节对应8位,每位用0或1表示. 2)字符集(Character Set) 字符集是 ...
- Unity3d Hololens MR开发入门
一.Hololens概述 Hololens有以下特性 1.空间映射借助微软特殊定制的全息处理单元(HPU),HoloLens 实现了对周边环境的快速扫描和空间匹配.这保证了 HoloLens能够准确地 ...
- for语句输出图形
一.输出以下图形 ******************************** 用for...for...嵌套循环,内循环控制每一行的个数(即列数),外循环控制行数 class ForDraw { ...
- git 打卡的第一天
因为某种原因,所以不得不重新巩固下前端的基础知识,从最基本的学习还得额外的学习新知识,倍感压力之大. 昨天初略学习下git,算是自己学习的一个新知识.简单记录下,希望四海八荒的大神看过来,有错的请指导 ...