1、首先在在struts-2.2.1.1\apps\struts2-blank\WEB-INF\classes目录下拷贝struts.xml至src下粘贴。再拷贝struts-2.2.1.1\apps\struts2-blank\WEB-INF下web.xml里的filter到web.xml。2、一般url-pattern/*/url-pattern用写*号,虽然有时候用*.Action也可以。默认过滤所以请求。被org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter接收到。首先看namespace(struts.xml),这里namespace为”/”再去找里面有没有hello的action,如果有去找对应的result应用的项。3、Struts.xml里面packagename=defaultnamespace=/extends=struts-default中namespace=”/”中的”/”与我们在浏览器中访问的路径一一对应。Locahost:8080/my/最后面的一个”/”对应要访问下面action需要localhost:8080/my/hello.action就可以,不然会出错。4、在struts.xml里面复制constantname=struts.devModevalue=false/把value改为true,则表示,开发模式,重启tomcat服务器,就可以了。这样更改配置很会自动更新5、在struts.xml里面””提示。在struts2文件夹里面,随便找一个struts2-core的jar文件解压,struts.xml里的dtd文件,为,把struts-2.0.dtd加入到xml的catalog里面就可以了。”windows”--“Preferences”再”MyEclipse”--“FilesandEditors”—“XML”—“XMLcatalog”在XMLcatalogEntries里按add,keyType为上面的url,key的值为:,location为struts-2.0.dtd所在目录,点击ok就可以了。6、7、namespace决定了action的访问路径,默认为(意味着不写,不管在浏览器哪里敲action,都会查找下面的action,在其它namespace找不到的action都交给默认为””的namespace去处理),可以访问所有路径的action,namespac可以写成/,或/xxx或/xxx/yyy,/xxx/index.action,namespace最好也用模块来命名(package也一样尽量用模块来命名)。当需要访问namespace=/front时,需要在action前面带上/front/hello.action.,当没有找到对应的namespace时候会返回tomcat服务器,web.xml,welcome-file8、result默认名字为SUCCESS成功。9、当复制一个项目的时候,需要注意,名字虽然改成了“T”,部署到tomcat服务器,但是却访问不到路径,其实他还是原画的名字,能访问,所以我们要改”WebContext-root”改成与项目名字相同(T)就可以访问了,如:10、当访问action的时候,会找到对应的class类对象,每一次访问必定会new一个此类对象(struts1是服务器启动就自动new一个对象,这样会出现线程同步问题),自动执行execute()方法反回一个String值。当不配置class时,默认执行的是ActionSupport返回success11、定义自己的actiona)实现Action接口b)从ActionSupport继承。(常用)可以直接调用struts2封装好的方法c)直接publicStringexectue(){}12、路径问题:a)在jsp页面里面,如果是action映射成功的,那么在里面的ahref=”index.jsp”/a不会去表示jsp当前页面,而是action映射的路径。可以用jsp自动生成前面的:%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+://+request.getServerName()+:+request.getServerPort()+path+/;%12、actionname=indexmethod=在这里可以自己定义方法。只要返回的是一个String就可以了。有一种动态的调用dmi,能过user!add来指定类名和方法名,调用。13、可以使用通配符配置。actionname=indexclass=Action*method={1}”*”是第一个通配符,{2}代表第二个通配符,代表一个字符串,如ActionAdd时候就会自动找到Action*,ActionDelet的时候,也会自动找到Action*,{1}表示第一个*号,这里代表Add和Delete。在下面的result的时候,也可以用*代表这个字符串。首先匹配最精确的14、“约定优于配置!”15、在有些项目名称更改之后,无意断开,会导致web.xml文件破坏,需要重新复制filter进去。16、还有可能是编译1.5版本与jdk的版本不匹配。或者是tomcat中的jdk版本不匹配,具体中:a)b)17、Action传递参数:a)在自己的Action里定义属性,写好get,set方法,当new时会自动设置(传值)。url里面的参数的Action里的成员变量可以是一一对应的。变量名与url里也可以不相同,但是会自动调用setName()中set后面的方法名字,必须与url相同。b)方法二:可以直接使用user对象,传递参数,user.name=name;当model与的属性数量不相等时候,不能用域模型model,用do/dto/vo。另外定义一个dto类,只用来传递参数,交给model对应的参数和其它的参数值。(当父类与子类有相同的属性名时候,在url里面有相同赋值,则当前类(子类)优先)c)方法三:modelDrivenInput,实现ModelDriven模型驱动这个接口。这个时候user必须自己new,tomcat不会自动去new。1.publicclassTeacherAddextendsActionSupportimplementsModelDrivenUser{2.Useruser=newUser();3.Strings;4.publicStringgetS(){5.returns;6.}7.publicvoidsetS(Strings){8.this.s=s;9.}10.publicStringAdd()throwsException{11.System.out.println(ModelDrivenname:+user.getName());12.System.out.println(ModelDrivenage:+user.getAge());13.System.out.println(ModelDrivens:+s);14.returnSUCCESS;15.}16.@Override17.publicUsergetModel(){18.//TODOAuto-generatedmethodstub19.returnuser;20.}21.}22.//这样能接收多个参数,包括模型里面以外。d)总结,接收的参数往往是交给参数的模型去处理。18、有中文尽量不要用get提交数据,用post。19、中文乱码问题:a)Struts.xml里加上一句,constantname=struts.i18n.encodingvalue=GBK/constant实际上就已经解决了中文乱码问题。在1.1.7版本之后可用,在1.1.6之前这是一个bugb)有时候把web.xml里的过滤类org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter这是2.1改在2.0的:org.apache.struts2.dispatcher.FilterDispatcher有时候也可以解决乱码问题。20、Struts2学习在\struts-2.2.1.1\docs\WW文件里面home.html里guides.html打开。基本上所有的配置都在里面。21、在struts2里面this.addFieldError(“name”,”nameerrot”)添加属性错误信息(继承ActionSupport类this.addFieldError是从该类继承)。a)要把错误属性担出来需要用struts2标签。s:fielderrorfieldName=”name”theme=”simple”/theme可写可不写。不能更改展现。只能重写css的class,右击查看源码,修改对应的class。b)s:bug/s:dug查看所有bug,常用c)s:properytvalue=”error.name[0]/取属性展现出来,可以取s:bug/s:dug里的属性。Error是一个map,想取里面的内容用error.name[0](ognl表达式。)22、访问web元素,request,session,application,HttpServletRequest,HttpSession,ServletContext。a)取得request,session,application,利用ActionContext拿到Map值(一般有Context是封装环境),当我们利用些对象request.put身变量里复制时候,会全部复制到http的request对象里去,在前台就能访问了。都不是单例。Request.getAttru...(“name”)和获取值。b)(只用这种,除非特殊情况)实现接口ApplicationAware,RequestAware,SessionAware,(Aware得知,知道,获得)要求提供三个方法,setRequest,setSession,setApplication,当实现上面三个接口就应该知道对应的request,session,application的存在。(实现ioc(inverseofcontrol)或di(dependencyinjection)设计思想),依赖注入到request里面或本来由自己控制,现在由别人控制。最常用的。Request在类里面也很少拿。将http原始的request转换成map类型的request.%=request.getAttribute(name)%br用这种方法取值c)若想访问http里的request,session,application类型,定义为HttpServletRequest,HttpSession,ServletContext。实现接口ServletRequestAware,对应一个setServeltRequest方法,给变量赋值。23、Struts.xml里面配置可以包含其它xml文件,当成struts.xml里的一部分。24、DefaultAction默认Action的引用。default-action-refname=index/如果找不到对应的Action就去找它。但是找到后,不会去执行它的Action里的配置的类,只是单纯的跳转到指定的页面。。(注意这里面的这是一个bug,可以在web.xml的welcome-filedefaultAciton/welcome-fi