1.1 jar
1.2 web.xml
1.3 struts.xml
struts.xml(核心配置文件)
目录结构:
Struts.xml
<include file="struts-default.xml"></include> <include file="struts-base.xml"></include> <include file="struts-sy.xml"></include> |
Struts.base.xml
<constant name="struts.i18n.encoding" value="UTF-8" /> <constant name="struts.devMode" value="true" /> <constant name="struts.configuration.xml.reload" value="true" /> <constant name="struts.i18n.reload" value="true" /> <constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="base" extends="struts-default" abstract="true"> <global-allowed-methods>regex:.*</global-allowed-methods> </package> |
Struts.sy.xml
<package name="sy" extends="base" namespace="/sy"> <action name="helloAction" class="com.javaxl.base.HelloAction"> <result name="hello">/hello.jsp</result> </action> </package> |
u 不需要指定父类(ActionSupport)
u 业务方法的定义
public String xxx();//execute
u Action是多例模式(注:在spring中的配置中一定要注意)
Action用来接收参数
u Action中定义属性,并提供get/set方法
userName, getUserName/setUserName
u ModelDriven
返回实体,不能为null,不需要提供get/set方法
u ModelDriven返回实体和Action中属性重名,ModelDriven中优先级更高
注:ognl,ActionContext学完就知道了
案例:
Action代码(user1不提供set、get方法):
private String uname; private User user1 = new User(); private User user2;
public String execute() { System.out.println("uname:"+uname); System.out.println("user1:"+user1); System.out.println("user2:"+user2); return "hello"; } |
浏览器输入:http://localhost:8080/Y2_struts_ognl/sy/helloAction?uname=zs
结果:
之后
说明modeldriven接口拦截了uname赋值
浏览器输入:http://localhost:8080/Y2_struts_ognl/sy/helloAction?user2.uname=zs
结果:
说明struts支持对象导航
u 非注入
耦合(ServletActionContext)
解耦(建立使用解耦模式(ActionContext)
u 注入
耦合(XxxAware)
解耦
u include 包含文件
file
u package 包
name 包名
extends 继承
namespace 虚拟路径
abstract 通常用来被继承
u action 子控制器
name:helloAction,helloAction_*
class 全限定名
method:execute,{1}
u result 结果码处理
Name 结果码配置
type:dispatcher|redirect
<!-- 动态方法调用 --> <action name="calAction_*" class="com.javaxl.base.CalAction" method="{1}"> <result name="rs">/rs.jsp</result> </action> |
注1:动态方法调用,新版本中已禁用,可自行开启或关闭
注2:子控制器的访问路径:名称空间+"/"+子控制器名字_xxx+".action"
相关html代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function doSubmit(num){
if(num == 1)
calForm.action = "${pageContext.request.contextPath}/sy/calAction_add.action";
else if(num == 2)
calForm.action = "${pageContext.request.contextPath}/sy/calAction_min.action";
else if(num == 3)
calForm.action = "${pageContext.request.contextPath}/sy/calAction_mul.action";
else if(num == 4)
calForm.action = "${pageContext.request.contextPath}/sy/calAction_div.action";
calForm.submit();
}
</script>
</head>
<body>
<h1>struts的入门execute方法调用</h1>
<a href="${pageContext.request.contextPath}/sy/helloAction.action">测试1</a>
<h1>动态调用</h1>
<form action="" id="calForm" name="calForm">
Num1:<input type="text" name="num1">
Num2:<input type="text" name="num2">
<button value="+" onclick="doSubmit(1)">+</button>
<button value="-" onclick="doSubmit(2)">-</button>
<button value="*" onclick="doSubmit(3)">*</button>
<button value="/" onclick="doSubmit(4)">/</button>
</form>
<h1>浏览器向后台传值的问题</h1>
<a href="${pageContext.request.contextPath}/sy/paramAction.action?uid=120&uname=15&user2.uid=220&user2.uname=25">测试2</a>
<h1>struts上下文的问题</h1>
<a href="${pageContext.request.contextPath}/sy/demo7Action.action">测试2</a>
<h1>讲解property标签(注意与c标签的区别)</h1>
<a href="${pageContext.request.contextPath}/sy/tagAction.action?result=zs">测试3</a>
<h1>讲解set标签(值并没有放到valuestack中)</h1>
<a href="${pageContext.request.contextPath}/sy/tagAction.action?user2.uname=zs&user2.uid=1">测试4</a>
<h1>讲解action标签(凡是jsp页面每出现一个action标签,那么页面会发一次请求)</h1>
<a href="${pageContext.request.contextPath}/sy/tagAction.action?user2.uname=zs&user2.uid=1">测试5</a>
<form action="${pageContext.request.contextPath}/sy/fileAction_upload.action" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit">
</form>
</body>
</html>
备案号:湘ICP备19000029号
Copyright © 2018-2019 javaxl晓码阁 版权所有