1.struts.xml <package 作用:管理配置信息
*将不同模块的配置分包
*通过namespace属性解决了配置信息的同名冲突
*不同的模块封装在不同的package中,且每个package都定义独有的namespace
*namespace:action的访问前缀
*namespace默认值:""
<package name="c3535" extends="struts-default" namespace="/admin35">
<action name="c35"
<action name="c36"
<action name="c37"
</package>
http://localhost:8989/appname/admin35/c35
http://localhost:8989/appname/admin35/c36
http://localhost:8989/appname/admin35/c37
<package name="c3535" extends="struts-default" namespace="/employee35">
<action name="c35"
<action name="c36"
<action name="c37"
</package>
http://localhost:8989/appname/employee35/c35
http://localhost:8989/appname/employee35/c36
http://localhost:8989/appname/employee35/c37
补充:
namespace匹配:回溯原则
url:http://localhost:8989/struts2_day2/emp35/a/b/c/query
匹配过程:
1.查找namespace为/emp35/a/b/c的package,如果如此package则在其内部查找对应的action
如果没优此package,则转到2步
2.查找namespace为/emp35/a/b的package,如果如此package则在其内部查找对应的action
如果没优此package,则转到3步
3.查找namespace为/emp35/a的package,如果如此package则在其内部查找对应的action
如果没优此package,则转到4步
4.查找namespace为/emp35的package,如果如此package则在其内部查找对应的action
如果没优此package,则转到5步
5.查找namespace为/的package,如果如此package则在其内部查找对应的action
如果没优此package,则404
=====================================================================================
2.跳转:
class UserAction extends ActionSupport{
public String execute(){
......
return "c35ok";//跳转
}
}
2.1 Action --> JSP
*转发 type="dispatcher" 默认值
<result name="c35ok" type="dispatcher">/index.jsp</result>
*重定向 type="redirect"
<result name="c35ok" type="redirect">/index.jsp</result>
2.2 Action-->Action
【同包跳转】
*转发 type="chain"
<result name="c35ok" type="chain">要跳转到的Action的配置名</result>
*重定向 type="redirectAction"
<result name="c35ok" type="redirectAction">要跳转到的Action的配置名</result>
【跨包跳转】
*转发 type="chain"
<result name="c35ok" type="chain">
<param name="namespace">/xxx</param>
<param name="actionName">要跳转到的Action的配置名</param>
</result>
*重定向 type="redirectAction"
<result name="c35ok" type="redirectAction">
<param name="namespace">/xxx</param>
<param name="actionName">要跳转到的Action的配置名</param>
</result>
2.3 补充:
*重定向和转发的选取原则:
1>能转发则转发
2>如果可能会导致重复提交,则选择重定向:
在Action中完成了增删改功能之后建议使用重定向选择视图
在Action中完成了查询功能后可以选择使用转发来选择视图
*Action向Action的跳转时,对于重定向和转发的选择:chain redirectAction
1>每个Action都是一个可以独立完整处理完成一个功能的逻辑单元
2>一个请求不需要多个Action来共同完成
3>Action之间的跳转,属于功能之间的衔接
4>Action之间跳转建议使用redirectAction
* response.sendRedirect("/appname/abc.jsp?name=xxx&age=xxx");
等价
<result name="xxx" type="rediect">
<param name="location">/abc.jsp</param>
<param name="name">xxx</param>
<param name="age">xxx</param>
</result>
页面中取值:
${param.name}
${param.age}
=====================================================================================
3.Action中请求参数的接收:
3.1 零散接收参数
*在Action类中定义和请求参数同名的成员变量即可。
*set/get不可省略
3.2 以实体的形式整体接收
*page:
<form action="${pageContext.request.contextPath}/param/param" method="get">
<input type="text" name="user35.id"/>
<input type="text" name="user35.name"/>
<input type="text" name="user35.age"/>
<input type="submit" value="submit"/>
</form>
*Action:
*定义名为user35的成员变量,并添加set/get
*且user35的类型中含有属性:id,name,age.如:
private User user35;
且:
class User{
id;
name;
age;
set/get;
}
3.3 以数组形式整体接收
*page:
<form action="${pageContext.request.contextPath}/param/param" method="get">
爱好:<input type="checkbox" name="hobby" value="football"/>足球<br/>
<input type="checkbox" name="hobby" value="basketball"/>篮球<br/>
<input type="checkbox" name="hobby" value="valleyball"/>排球<br/>
<input type="submit" value="submit"/>
</form>
*Action:
*定义和请求参数同名的数组或List,并添加set/get
private List<String> hobby;
set/get;
3.4 以泛型为实体的List接收
*page:
<form action="${pageContext.request.contextPath}/param/param" method="get">
<input type="text" name="users[0].id"/>
<input type="text" name="users[0].name"/>
<input type="text" name="users[0].age"/><br/>
<input type="text" name="users[1].id"/>
<input type="text" name="users[1].name"/>
<input type="text" name="users[1].age"/><br/>
<input type="text" name="users[2].id"/>
<input type="text" name="users[2].name"/>
<input type="text" name="users[2].age"/><br/>
<input type="submit" value="submit"/>
</form>
*Action:
*定义和参数同名的成员变量 a,且a是一个以User为泛型的List
*为a添加set/get;
private List<User> users;
set/get;
====================================================================================
补充:action ajax交互
*ajax 请求servlet
*servlet 通过response.getWriter().print("xxxx");响应
*ajax 请求Action
*Action 响应ajax请求:
class AjaxAction35 extends ActionSupport{
public String execute(){
//接收ajax请求并处理最终获得业务结果数据data
//将data转成json
//ServletActionContext.getResponse.getWriter().print(json);
//ServletActionContext.getResponse.getWriter().close();
//return null;
}
}
*注意:最后return null;告知struts2我们已经自己处理的响应,则struts2不再处理
响应
======================================================================================
login jsp action service dao db
url param result 调用正确 param sql
query jsp action service dao db
update jsp action service dao db
delete jsp action service dao db
insert jsp action service dao db
1.排错
2.错误分析
3.debug
======================================================================================
<link href="/appname/..."
<script src="/appname/...">
<img src="/appname/..."
<form action="/appname"
<a href="/appname"
===================================================================================
[Java web]-- struts2(2)
最新推荐文章于 2022-12-21 17:25:47 发布