Struts2课堂学习总结.docx
- 文档编号:9555965
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:21
- 大小:23.14KB
Struts2课堂学习总结.docx
《Struts2课堂学习总结.docx》由会员分享,可在线阅读,更多相关《Struts2课堂学习总结.docx(21页珍藏版)》请在冰豆网上搜索。
Struts2课堂学习总结
1、Struts2_Struts2_HelloWorld_2
指定Tomcat的目录,指定JDK搭建开发环境(拷贝jar包,复制struts.xml文件 此文件不要放在WEB-INF下面,应该放到src下面
),在web.xml文件中:
其中
2、Struts2_Struts2_HelloWorld_3
(1)
--
常量的配置 -->
--name="struts.devMode" value="true":
当前是开发模式,改动配置文件会自动装载 默认是false-->
--命名空间 ---> action -->相应的处理类或页面 -->
/Hello.jsp
(2)struts.xml不自动提示的解决办法:
window--perferences-XML catalog---add---key Type="URI" key="*.dtd"
3、Struts2_Struts2_HelloWorld_7_2
struts2的执行流程:
当用户在浏览器中敲入要访问的地址的时候,浏览器会将这个请求发送给tomcat然后tomcat判断应该交给那个WebApplication
来处理,然后会读取它下面的web.xml配置发现有配置:
因为
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter处理执行调用doFilter()方法,然后再方法中会读
取struts-xml文件,根据用户请求的地址找到相应的package、 action、 result、然后将相应的页面返回给浏览器
4、Struts2_Struts2_Namespace_命名空间
(1)namespace决定了action的访问路径,默认为"",可以接收所有路径的action
namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action,
/xxx/index.action,或者/xxx/yyy/index.action
namespace最好也用模块来进行命名
5、Struts2_Struts2_Action
(1)struts1 与struts2的一个重要区别:
在struts1中进行多次访问的时候用到的是同一个Action对象。
而struts2则是每一次访
问都会创建一个Action对象,所以struts2不会有线程安全问题的发生
(2)
(3)
(4)实现struts的处理类的时候不要自己随便写类然后定义execute()方法,也不要实现Action类而要从ActionSupport类继承,可
以直接使用它为我们定义好的方法.
6、Struts2_Struts2_Path_路径问题
(1)struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
虽然可以用redirect方式解决,但redirect方式并非必要。
解决办法非常简单,统一使用绝对路径。
(在jsp中用request.getContextRoot方式来拿到webapp的路径)
或者使用myeclipse经常用的,指定basePath
(2)request.getContextPath()得到项目的名字,一般用来解决路径问题 如果项目为根目录,则得到一个"",即空的字条串。
request.getscheme()返回的协议名称.默认是http
request.getServerName()就是获取你的网站的域名,如果是在本地的话就是localhost
request.getServerPort()获取服务的端口号
7、Struts2_Struts2_ActionMethod_DMI_动态方法调用
Action执行的时候并不一定要执行execute方法
可以在配置文件中配置Action的时候用method=来指定执行哪个方法
也可以在url地址中动态指定(动态方法调用DMI)(推荐)
add">添加用户
前者会产生太多的action,所以不推荐使用
配置文件:
8、Struts2_Struts2_ActionWildcard_通配符配置
主要学习通配符的使用 通配符可以将配置量降到最低,不过一定要遵守"约定优于配置"的原则
-- 更简便的配置法 -->
说明:
(1){1}代表name="Student*"后面第一个'*',同理{2}代表第二个'*'
(2).如果action之间有重复配置,struts2会匹配最精确的action。
如果通配符配置之间有重复,则看前后配置顺序
9、 Struts2_Struts2_用Action的属性接收参数
在继承ActionSupport的类中定义要接受的参数,参数的名称与Action所传的名称无关在struts2内部调用的是属性的set方法
,所以setxxx()的名字一定要与Action后面所传的值是一样的。
10、用DomainModel接收参数
如果要接受的参数的个数很多,我们可以不用定义属性而是直接定义一个对象例如:
private User user (set get 方法)在调用Action传值的时候使用user!
add?
user.name=x&user.age=x的方式进行值得传递
。
(最常用的方式)
11、用ModelDriven接收参数
继承ActionSupport类的处理类必须同时实现ModelDriven
add?
name=bbb进入处理类的时候会调用getModel()方法返回User对象并且把传过来的值set到里面,注意:
此时private User user =
new User() 不能只定义,要同时实现这样getModel()才能拿到user对象。
12、truts2_Struts2_2.1.6版本的中文问题
在配置文件中加入:
会在下一个版本中修复 如何解决呢:
在web.xml中:
--
把过滤器的版本改成老版本的即可解决该问题!
13、Struts2_简单数据验证_1
使用addFieldError方法和s:
fieldError标签简单处理数据校验
public String add() {
if(name == null || !
name.equals("admin")) {
this.addFieldError("name", "name is error");
this.addFieldError("name", "name is too long");
return ERROR;
}
return SUCCESS;
}
在页面中显示错误信息:
-- 以固定的css样式取出错误信息,不方便我们进行相应的处理-->
fielderrorfieldName="name" theme="simple"/> -- 从存储错误信息的Map中拿数据 --> property value="errors.name[1]"/> -- 显示详细的栈信息--> debug> debug> 14、Struts2_访问Web元素_1 注意: web.xml中关于struts的配置一定要采用2.1的,2.0的会取不到这是一个bug (1)通过ActionContext对象取得Map类型的request, session, application HttpServletRequest, HttpSerletSessionServletContetext: public class LoginAction1 extends ActionSupport { private Map request; private Map session; private Map application; //访问此方法,取得相应的对象但是是Map类型 public LoginAction1() { request = (Map)ActionContext.getContext().get("request"); session = ActionContext.getContext().getSession(); application = ActionContext.getContext().getApplication(); } //在Map类型的对象中存入相应的值 public String execute() { request.put("r1", "r1"); session.put("s1", "s1"); application.put("a1", "a1"); return SUCCESS; } } //在页面中通过标签取得存入的数据 二种方法(通过标签, 通过原始方式): property value="#request.r1"/> | <%=request.getAttribute("r1") %> property value="#session.s1"/> | <%=session.getAttribute("s1") %> property value="#application.a1"/> | <%=application.getAttribute("a1") %> property value="#attr.a1"/> property value="#attr.s1"/> property value="#attr.r1"/> debug> debug> 我们存入Map中的数据居然可以在request,等对象中得到,那么在struts内部他是将Map中的数据全部复制到了request,session 等对象中的 #attr ,可以取得所有的属性,但是不推荐使用,为了防止同名的情况,造成无法区别。 (2)通过实现RequestAware,SessionAware, ApplicationAware 接口获取(最常用 和重要的一种) private Map private Map private Map //DI dependency injection //IoC inverse of control public String execute() { request.put("r1", "r1"); session.put("s1", "s1"); application.put("a1", "a1"); return SUCCESS; } @Override public void setRequest(Map this.request = request; } @Override public void setSession(Map this.session = session; } @Override public void setApplication(Map this.application = application; } (3)通过ServletActionContext()取得真实的相应的对象 privateHttpServletRequest request; privateHttpSession session; privateServletContext application; public LoginAction3() { request = ServletActionContext.getRequest(); session = request.getSession(); application = session.getServletContext(); } public String execute() { request.setAttribute("r1", "r1"); session.setAttribute("s1", "s1"); application.setAttribute("a1", "a1"); return SUCCESS; } (4)通过实现ServletRequestAware接口获得相应的对象 privateHttpServletRequest request; privateHttpSession session; privateServletContext application; public String execute() { request.setAttribute("r1", "r1"); session.setAttribute("s1", "s1"); application.setAttribute("a1", "a1"); return SUCCESS; } @Override public void setServletRequest(HttpServletRequest request) { this.request = request; this.session = request.getSession(); this.application = session.getServletContext(); } 15、Struts2_模块包含 可以将别的写好的配置文件直接包含到struts得配置文件中,方便多人开发避免不必要的配置文件冲突. login.xml xml version="1.0" encoding="UTF-8" ? > DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http: //struts.apache.org/dtds/struts-2.0.dtd"> 16、Struts2_默认Action -- 当配置文件中没有用户要访问的Aciton的时候,会调用 17、Struts2_结果类型_result_type_1 ResultType的最常用的几种配置: (四种配置分别代表了四种不同的跳转方式) --type不写默认的为dispatcher: 用服务器跳转跳转到结果页面--只能跳转到页面,不能跳转到Action --> --客户端跳转的方式跳转到结果页面 只能跳转到页面,不能跳转到Action --> --服务器跳转的方式跳转到Action --> --客户端跳转的方式跳转到Action --> --当要跳转的Action在别的包下的时候 应该这样写--> 18、Struts2_Global_Results_全局结果集 -- 配置全局的结果集: 当返回的result没有配置的时候会执行全局结果集的配置-->
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Struts2 课堂 学习 总结