Struts2简介
Struts是一个JavaWeb框架, Struts2并不是在Struts1基础上改进的一个框架,而是基于 WebWork的全新框架。Struts2是基于MVC开发模型的一个框架, 基于表现层框架.
Struts2的安装与配置
- 下载 Struts2 的发行包 http://struts.apache.org
- 构建路径的顶端, 创建配置文件:struts.xml
- 配置控制器映射: 框架提供配置过滤器 StrutsPrepareAndExecuteFilter
- 部署查看:struts2-core-*.jar —struts2的核心包
struts2的执行原理及流程
jsp:
<a href="${pageContext.request.contextPath}/hello.action">
点这里</a>
struts.xml:
<struts>
<package name="p1" extends="struts-default">
<action name="helloworld" class="com.lanou.action.helloworld.He
lloAction" method="sayHello">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
action:
public class HelloAction {
public String sayHello(){
System.out.println("动作执行了");
return "success";
}
struts2的配置文件
配置文件的加载顺序
- default.properties
- struts-default.xml
- struts-plugin.xml
- struts.xml : 在应用的构建路径顶端。自己定义的Struts配置文件(推荐)
- struts.properties : 在应用的构建路径顶端。程序员可以编写(不推荐)
- web.xml: 配置过滤器时,指定参数。程序员可以编写(不推荐)
代码验证配置文件
Struts2的默认请求路径是XXX.action,改成 *.do,此处的默认配置在default.properties中
struts.xml:
<constant name="struts.action.extension" value="do,,"/>
struts.properties
struts.action.extension=doo
web.xml
<init-param>
<param-name>struts.action.extension</param-name>
<param-value>dooo</param-value>
</init-param>
配置文件中常用标签
constant:
- 指定处理请求后缀
<constant name="struts.action.extension" value="do,,"></constant>
- 开发者模式
<constant name="struts.devMode" value="true"></constant>
- 指定默认编码集
<constant name="struts.i18n.encoding" value="utf-8"></constant>
- 上传文件大小限制
<constant name="struts.multipart.maxSize" value="10701096"></constant>
package:
- name:给当前包取一个名字,必须要有的,配置文件中要唯一.
- extends:不是必须的,会把父包中的配置内容继承下来,通常继承struts系统自带的struts-default,这个package的配置参见struts-default.xml中的定义.
- abstract:是否是抽象包.
- namespace:在访问地址时要加的包名.
- 如果不写,默认认为是”“空字符串,即localhost:8080/动作名
- “/user”,则访问某个动作地址变为:localhost:8080/user/动作名
action:
- name:给当前动作取一个名称,用于对外提供访问的名称.
- class:指向对应的动作类.不些话默认是com.opensymph ony.xwork2.ActionSupport.
- method:该动作对应方法名,如果调用的是ActionSurport类的excute方法,则可以省略此属性的设置,即method属性不指定默认调用的是excute方法.
result:
- name:指定配置逻辑视图名,对应着动作方法的返回值.默认值是:success
- success:指向一个处理正确的结果视图
- error:指向一个处理错误的结果视图
- input:验证失败时需要回到原来的输入界面
- login:登录失败时会进入的结果视图
- null:什么都不做,留在当前页面
- 自定义:自定义返回值
- type:到达目标的形式.默认值:dispatcher转发
- chain:转发到一个动作
- redirect:重定向到一个jsp页面
- redirectAction:重定向到一个动作
- stream:指向一个输入流
- dispatcher:转发到一个jsp页面,默认方式
局部结果视图:
全局结果视图:
即在action中没有找到某个返回结果的局部结果视图,则自动去全局结果视图中查找
<global-results>
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</global-results>
动作类
继承ActionSupport:[推荐使用]
功能强大,已经实现了Action,还有验证,国际化文本等都可以使用.
动作类中的动作方法编写要求:
public String XXX(){}
动态参数封装
属性驱动
action:
public class UserAction extends ActionSupport {
private String username;
private String password;
public String login(){
System.out.println("u: " +username+ " ,p: " +password);
return null;
}
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;
}
}
jsp:
<form action="${pageContext.request.contextPath}/login1.action">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value=" "> </form>
模型驱动
action:
public class CustomerAction extends ActionSupport implements ModelDrive
n<Customer> {
private Customer customer = new Customer();
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
public String login(){
System.out.println(customer);
return null;
}
@Override
public Customer getModel() {
return customer;
}
}
jsp:
<form action="${pageContext.request.contextPath}/login3.action">
用户名: <input type="text" name="username"><br>
密码: <input type="password" name="password"><br>
<input type="submit" value="登录"> </form>