[Java web]-- struts2(2)

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"
===================================================================================


   
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

往事随风ing

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值