Struts2学习笔记1
一项目构建
1.导入jar包
2.页面编写jsp文件,提交路径是xxx.action
3.在struts.xml中配置
<package name="zwz" namespace="/" extends="struts-default">
<action name="first.action" class="web.action.FirstAction">
<result name="success">/success.jsp</result>
</action>
</package>
其中<action name="xxx" class="action处理的全路径">
4.在类中编写方法原型
public String execute(){}
5.执行完后返回一个String
6.去配置中找action中的
<result name="返回的String" type="">页面路径</result>
type:默认是dispatcher(转发到页面)
chain:转发到action
redirect:重定向到页面
redirectAction:重定向到action
二在Action中接收页面的值有2种方式
实体对象类:
package pojo;
import java.io.Serializable;
public class User implements Serializable {
private String username;
private Integer userage;
public User() {
}
public User(String username, Integer userage) {
this.username = username;
this.userage = userage;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getUserage() {
return userage;
}
public void setUserage(Integer userage) {
this.userage = userage;
}
}
a:模型驱动
让Action实现ModerDriver接口,接口中返回一个实体对象
页面直接使用实体对象中的属性,要注意Action中的实体要new
jsp代码:
<form action="first.action" method="post">
姓名:<input type="text" name="username"/><br/>
年龄:<input type="text" name="userage"/><br/>
<input type="submit" value="注册"/>
</form>
action代码
package web.action;
import com.opensymphony.xwork2.ModelDriven;
import pojo.User;
public class FirstAction implements ModelDriven {
private User user=new User();
public String execute()
{
System.out.println(user.getUsername());
System.out.println(user.getUserage());
return "success";
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Object getModel() {
return user;
}
}
action配置:
<action name="first" class="web.action.FirstAction">
<result name="success">
/success.jsp
</result>
</action>
页面展示信息代码
<h1><s:property value="username"/></h1>
<h1><s:property value="userage"/></h1>
b:属性驱动(定义与页面一致名字的属性,加get与set
如果是一个对象,页面使用对象.属性)
页面代码:
<form action="second.action" method="post">
姓名:<input type="text" name="user.username"/><br/>
年龄:<input type="text" name="user.userage"/><br/>
<input type="submit" value="注册"/>
</form>
action配置
<action name="second" class="web.action.SecondAction">
<result name="success">
/success.jsp
</result>
</action>
action代码
package web.action;
import com.opensymphony.xwork2.ModelDriven;
import pojo.User;
/**
* @program: maven_test1
* @description:
* @author: ZhuWeiZhong
* @create: 2019-03-03 17:31
**/
public class SecondAction{
private User user;
public String execute()
{
System.out.println(user.getUsername());
System.out.println(user.getUserage());
return "success";
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
页面展示信息代码
<h1><s:property value="user.username"/></h1>
<h1><s:property value="user.userage"/></h1>
三配置拦截路径
为了安全性考虑,建议将配置的路径设置为/*
<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>
然后通过常量来改变需要拦截的后缀
struts.action.extension=action,do,html
四ValueStack
值栈的作用:当一个请求发送到Action时
被过滤器拦截,创建一个值栈,将所有信息
都存在值栈中,然后到达Action,接下来将实例化
的Action压在栈顶跳转到页面
五动态Action
a:使用action!方法名的明文方式访问不同的方法
b:使用通配符来控制action的方法与跳转路径
六.WEB对象的获取方式(依赖)
request,session,response,application
a:非IOC
one:直接使用ActionContext的get获得map
two:使用包装后的ServletActionContext获得标准web对象
three:使用最底层的ValueStack获得map
b:IOC(Inverse Of Control)
one:实现requestAware等接口获得map对象
two:实现ServletRequestAware获得标准web对象