-
Struts2:处理结果是字符串。 注意:<result>/success.jsp</result> 有“/”:绝对路径,开始是整个项目的上下文路径 无“/”:相当于执行该action namespace指定的路径 【Structs2处理流程】 用户请求Structs框架控制器(Action)Structs框架视图资源 返回String,提供代码复用性,有利于框架分离。 【Action中五种内置属性(com.opensymphony.xwork2.Action)】 (1) SUCCESS Action正确的执行完成,返回相应的视图,success是name属性的默认值。 (2) NONE 表示Action正确的执行完成,但并不返回任何事视图。 (3) ERROR 表示Action执行失效,返回错误处理视图。 (4) LOGIN Action因为用户没有登录的原因没有正确执行,将返回该登录视图,要求用户进行登录验证 (5) INPUT Action的执行,需要从前端界面获取参数,INPUT就是代表这个参数输入界面,一般在应用中,会对这些 参数进行验证,如果验证没有通过,将自动返回该视图。查看全部
-
我来解释(逗逼)一下,方法1中struts框架的数据处理流程 1.用户在login.jsp提交表单数据后,提取<form>的属性action="name1.action" 2.用name1去匹配struts.xml中<action>的属性name,案例中是LoginAction 3.执行匹配成功的action对应的class对应的method,得到返回值 4.用返回值去匹配<result>的属性name返回对应jsp,name被省略了返回默认success.jsp 关键是步骤3中,Struts框架会先实例化class的一个对象,然后用set方法把表单数据注入到这个对象,所以必须先实现set方法查看全部
-
接收参数 1,使用Action的属性接受参数,在Action中定义需要接受的属性,并写它的set/get方法。 2,使用DomainModel接受参数,创建实体类定义需要接受的属性,并set/get方法,在Action中创建实体类名属性。并在界面进行指定。 3,使用ModelDriver接受参数,在Action中实现ModelDriver<实体类名>接口,并实现方法返回当前需要转换的对象,删除set/get方法,并对 对象 进行实例化,并取消指定。 4,request 5,获取List集合中的参数。获取多个参数。 第一种接收参数的方法:直接在action类中创建相应的属性和getter和setter,和前端的name名字相同。eg:前端的username,在action类中就要建立一个private String username; Struts会自动映射为这个属性赋值 第二种接受参数的方法:使用DomainModel,将username 和password两个属性封装为一个类User(必须是标准的JavaBean),在action中声明这个属性:private User user; 同时为user设置getter和setter;在前端中的name需要设置为user.name和user.password,才能映射成功 第三种接收参数的方法:使用ModelDriven<T>接口,这个action必须实现这个接口的public T getModel()方法。此时声明的属性必须实例化,eg: private User user = new User(); 同时不需要getter和setter。前端的name也只需要写username和password就可以,不需要再加域了。这种方法时最推荐的方法,因为可以减少前后端的耦合查看全部
-
struts2后缀: 三种方式: 1.struts.properties中:struts.action.extension=action,do,struts2 2.struts.xml中增加常量constant: <constant name="struts.action.extension" value="action,do,struts2"></constant> 3.在过滤器中配置intt-param参数: <init-param> <param-name>struts.action.extension</param-name> <param-value>do,action,strtus2</param-value> </init-param>查看全部
-
【找不到默认action的原因和解决方法】 <default-action-ref name="index"></default-action-ref><br> <br> <action name="index"><br> <result>/error.jsp</result><br> </action> <br> <br> <action name="log_*" method="{1}" class="com.wayne.action.LoginAction"><br> <result name="login">/login.jsp</result><br> <result name="logout">/logout.jsp</result><br> </action><br> <br> 通配符会覆盖掉默认action,所以不能有【*_*】这样子的action,要改成【log_*_*】这类型的命名,否则,【*_*】里面的第一个*就包括了所有的字符,直接进入了这个action进行处理,无法进入默认的action了。查看全部
-
指定多个配置文件,如果项目比较大,xml配置文件比较多,那么可以在struts.xml中使用include标签,将多个配置文件包括进来。 <include file="***.xml"> </include> <constant name="struts.i18n.encoding" value="UTF-8"> </constant> 注意: 1.被include的标签一定要符合struts的dtd规范。也就是说被include的xml文件的内部格式要符合struts的xml文件规范。 2.xml文件的编码格式要相同,如果是utf-8,那么都是utf-8。查看全部
-
常量 结果类型查看全部
-
在您提交的时候,struts会自动封装提交的参数到对应Action的属性中去,不用自己关联,只要保证属性名是一样的就好。查看全部
-
在不做关于后缀的配置时,访问时不加后缀也是可以访问的查看全部
-
动态方法调用的目的查看全部
-
三种访问API的方式查看全部
-
struts.xml struts的核心配置文件查看全部
-
动态方法调用: 动态方法调用是为了解决一个Action对应多个请求的处理,以免Action太多。 三种方式:指定method属性、感叹号方式(不推荐)、通配符方式 1:<action name="add" method="add" class="com.imooc.action.HelloWorldAction"> 2:<constant name="struts.enable.DynamicMethodInvocation" value="false"> </constant> <action name="helloWorld" class="com.Action.HelloWorldAction"> <result >/result.jsp</result> <result name="add">/add.jsp</result> <result name="update">/update.jsp</result> </action> http://localhost:8080/HelloWorld/HelloWorld!add(或update).action 3: 第一个*代替{1},第二个*代替{2},result里的name是Action的返回值,action的里method是Action里的方法名,调用某个方法时最后目标就输入 {1}_{2}.action;这样可以访问多个Action里的方法. <action name="*_*" method="{2}" class="com.imooc.action.{1}Action"> <result >/result.jsp</result> <result name="add">/{2}.jsp</result> <result name="update">/{2}.jsp</result> </action> http://localhost:8080/HelloWorld/HelloWorld_add.action查看全部
-
例子: http://localhost:8080/product_one/hellowworld.jsp可以进入result.jsp页面 http://localhost:8080/product_one/aaa/ddd/ccc/hellowworld.jsp也可以进入result.jsp页面 Action搜索顺序: http://localhost:8080/struts2/path1/path2/path3/student.action 第一步:判断package是否存在,如:path1/path2/path3/ 如果package存在 第二步:则判断该package中action是否存在,如果不存在则去默认namespace的package里面寻找action 第三步:如果没有,则报错 如果package不存在: 第二步:检查上一级路径的package是否存在(直到默认namespace),重复第一步 第三步:如果没有则报错 如果请求为/login.action,系统会根据根命名空间("/")中查找名为login的Action,如果在根命名空间中找到了名为login的Action,则该Action处理用户的请求;否则系统将转为在默认命名空间中寻找名为login的Action,如果默认的命名空间中有名为login的Action,则由该Action处理用户的请求。如果两个命名空间中都找不到名为login的Action,那么系统将出现错误。 注意:命名空间只有一个级别。如果请求的URL是/bookservice/search/get.action系统将先在/bookservice/search的命名空间下查找名为get的Action,如果在该系统命名空间内找到名为get的Action,则由该Action处理该用户的请求;如果在该命名空间中没有找到名为get的Action,系统将直接进入默认的命名空间中查找名为get的Action,而不会在bookservice的命名空间下查找名为get的Action。 可以多个包使用同一个命名空间,但是相同的命名空间相当于同一个模块,也就是同一个包。 一个包中可以有name值相同的action,但是后面的action会把前面同名的action覆盖掉查看全部
-
通配符设置动态方法调用查看全部
举报
0/150
提交
取消