环境搭建:
1 …/ pom.xml的jar包配置
2.web.xml配置
3.struts.xml的配置
struts.xml(核心配置文件)
struts-base.xml的配置
配置web.xml文件
(注:Ctrl+Shift+t是查找jar包(查找类)的快捷键)
动态方法的调用
1.在子控制器写出需要的方法
配置struts-sy.xml
<!-- 相对MVC的差异性
package:用来将一类控制器进行分类
http://localhost:8080/struts/sy/user_list.action 中的"/sy"对应的是 namespace="/sy"
extends="base"表示包的继承
"/user_*"中的 * 就在该地址栏为 list -->
<package name="sy" extends="base" namespace="/sy">
<action name="/user_*" class="com.hsl.one.web.UserAction" method="{1}" >
<result name="success">/test.jsp</result>//对应显示的jsp页面
</action>
</package>
测试:网页地址栏
http://localhost:8080/struts/sy/user_list.action 查看所有的方法
http://localhost:8080/struts/sy/user_add.action 添加的方法
http://localhost:8080/struts/sy/user_delete.action 删除的方法
http://localhost:8080/struts/sy/user_edit.action 修改的方法
测试成功:
jsp传递参数到后台的三种方式:
1.set传参
2.实现modalDriven接口传参
3.类实例.属性传参
子控制器:
struts-sy.xml配置添加:
<action name="/dome_*" class="com.hsl.one.web.DomeAction" method="{1}" >
<result name="rs">/rs.jsp</result>
</action>
jsp页面传参:
//set传参
<a href="${pageContext.request.contextPath }/sy/dome_test1.action?sex=女">测试1</a>
// 实现modalDriven接口传参
<a href="${pageContext.request.contextPath }/sy/dome_test2.action?uname=qw&upwd=1234">测试2</a>
// 类实例.属性传参
<a href="${pageContext.request.contextPath }/sy/dome_test3.action?user2.uname=we&user2.upwd=12345">测试3</a>
结果显示:
附:User实体类:
public class User {
private String uname;
private String upwd;
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 User(String uname, String upwd) {
super();
this.uname = uname;
this.upwd = upwd;
}
public User() {
super();
}
@Override
public String toString() {
return "User [uname=" + uname + ", upwd=" + upwd + "]";
}
}
后台传值到jsp页面的方式(struts与tomcat容器的交互)
1.注入
耦合 (常用)
子控制器的方法:
public String dome() {
HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute("rs", "非注入式耦合方式");
return "rs";
}
解耦 (使用全路径名,不常用)
public String dome() {
ActionContext context=ActionContext.getContext();
HttpServletRequest request=(HttpServletRequest)context.get("request的全限定路径名");
request.setAttribute("rs", "注入式解耦方式");
return "rs";
}
2.非注入
耦合(常用)
需实现ServletRequestAware接口
添加一个属性:
private HttpServletRequest request;
重写setServletRequest方法:
public void setServletRequest(HttpServletRequest request) {
// TODO Auto-generated method stub
this.request=request;
}
测试方法:
public String dome() {
request.setAttribute("rs", "注入式耦合方式");
return "rs";
}
解耦 (使用全路径名,不常用)
需实现requestAware接口
重写setRequest方法:
public void setRequest(HttpServletRequest request) {
// TODO Auto-generated method stub
this.request=(HttpServletRequest)context.get("request的全限定路径名");
}
测试方法:
public String dome() {
request.setAttribute("rs", "非注入式解耦方式");
return "rs";
}
上面是为了获取到request对象
- 1、传参可以使用request对象进行传参
- 2、struts特有的传参方式,叫做值栈传参
换个说法就是,只要该action有get方法,那么它就能直接在结果集中获取参数值
struts-sy.xml配置:
<action name="/tomcat_*" class="com.hsl.one.web.TomcatAction" method="{1}" >
<result name="rs">/rs.jsp</result>
</action>
jsp页面效果测试:
<a href="${pageContext.request.contextPath }/sy/tomcat_dome.action?sex=男">测试1</a><br>
<a href="${pageContext.request.contextPath }/sy/tomcat_dome.action?uname=qw&upwd=1234">测试2</a><br>
<a href="${pageContext.request.contextPath }/sy/tomcat_dome.action?user2.uname=we&user2.upwd=12345">测试3</a>
测试结果显示:
逐一测试
此结果验证了
“只要该action有get方法,那么它就能直接在结果集中获取参数值“该方式