-
【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.访问Servlet API 1.Struts2中Action的execute方法 2.Action搜索顺序 3.动态方法调用 4.指定多个配置文件 5.默认Action 6.Struts2后缀 7.处理结果类型查看全部
-
接收参数 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.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。查看全部
-
动态方法调用 动态方法调用是为了解决一个Action对应多个请求的处理,以免Action太多。 三种方式:指定method属性、感叹号方式、通配符方式 1. <action name="addAction" method="add" class="com.imooc.action.HelloWorldAction"> http://localhost:8080/HelloWorld/addAction.action 2. <constant name="struts.enable.DynamicMethodInvocation" value="true"> </constant> <action name="helloworld" class="com.imooc.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.action 3. <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_update.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覆盖掉查看全部
-
Servlet API: httpRequest、httpResponse、servletContext 3个API对应jsp面向对象:request、response、application Servlet中可以直接调用Servlet API struts2 struts2 Action中execute没有任何参数,也就是不存在Servlet API struts2 提供了3种方式访问Servlet API: 1.ActionContext类 2.实现***Aware接口 3.ServletActionCotext类查看全部
-
处理结果类型——type属性 (1)在result里面最重要的属性是type类型,type的默认值为dispatcher(转发),这个类型支持JSP视图技术。 (2)Struts2支持多种视图技术,例如JSP、Valocity(模板引擎)、FreeMaker(模板引擎)等。 (3)常用三个:chain,redirect,plaintext。 1、chain:将action和另外一个action链接起来。 2、redirect:重定向(会丢失请求参数)。 3、plaintext:返回网页源代码。 4、stream:返回inputstream用于文件下载查看全部
-
结果类型类型 全局结果——将<result/>作为<global-result/>元素的子元素配置。 必须在<package>标签下使用 局部结果——将<result/>作为<action/>元素的子元素配置。 子标签<param>还有param标签: 1.location:该属性定义了该视图对应的实际视图资源 2.parse:该参数指定是否可以再实际视图名字中使用OGNL表达式,【默认值为TRUE】,支持OGNL(Object-Graph Navigation Language)表达式查看全部
-
结果类型input的效果 关于用户名输入的判断,在action中 if(user.getUsername()==null || "".equals(user.getUsername())){ this.addFieldError("username","用户名为空"); return INPUT; } 在JSP页面的对应位置,需要引入Struts的标签库, <%@ taglib prefix="s" uri="/struts-tags" %> 然后 <s:fielderror name="username" ></s:fielderror> 方法二: public void validate(){ if(user.getUsername()==null || "".equals(user.getUsername())){ this.addFieldError("username","用户名为空"); } }查看全部
-
Structs2处理流程: 用户请求 -> Structs框架 -> 控制器(Action) -> Structs框架 -> 视图资源 返回String,提供代码复用性,有利于框架分离。 Action中5中内置属性 (1) SUCCESS :Action正确的执行完成,返回相应的视图,success是name属性的默认值。 (2) NONE :表示Action正确的执行完成,但并不返回任何事视图。 (3) ERROR : 表示Action执行失效,返回错误处理视图。 (4) LOGIN :Action因为用户没有登录的原因没有正确执行,将返回该登录视图,要求用户进行登录验证 (5) INPUT :Action的执行,需要从前端界面获取参数,INPUT就是代表这个参数输入界面,一般在应用中,会对这些参数进行验证,如果验证没有通过,将自动返回该视图。查看全部
-
1.使用Action的属性接受参数 在action类中创建相应的属性(与前端的name名字相同)和getter和setter; eg: 前端的username,在action类中就要建立一个private String username; Struts会自动映射为此属性并赋值。 2.使用DomainModel接受参数 将属性封装为的JavaBean;在Action中声明JavaBean属性,并写它们的setter/getter方法;在前端界面指定action类的JavaBean属性名称 eg: 将username和password两个属性封装为一个类User(必须是标准的JavaBean),在action中声明这个属性:private User user; 同时为user设置getter和setter;在前端中的name需要设置为user.name和user.password,才能映射成功 3,使用ModelDriver接受参数 在Action中实现ModelDriver<实体类名>接口,并实现方法返回当前需要转换的对象,将 对象进行实例化,并取消setter/getter方法和前端的指定。(推荐) eg: private User user = new User(); 同时不需要getter和setter。前端的name也只需要写username和password就可以,不需要再加域了。这种方法时最推荐的方法,因为可以减少前后端的耦合查看全部
-
web.xml 任何MVC框架都需要与Web应用整合,这就不得不借用于web.xml文件,只有配置web.xml文件中Servlet才会被应用加载 Model2:JSP+JavaBean+Servlet 通常,所有MVC框架都需要Web应用加载一个核心控制器,对于Struts2框架而言,需要加载StrutsPerpareAndExecuteFilter,只负责Web应用加载StrutsPerpareAndExecuteFilter,StrutsPerpareAndExecuteFilter将会加载Struts2框架。 遇到.acton文件就会拦截并进行处理 struts.xml struts2的核心配置文件,在开发过程中利用率最高。 该文件主要负责管理Action的映射,以及该Action包含的Result定义等。 struts.xml中包含的内容: 1、全局属性 2、用户请求和相应Action之间的对应关系 3、Action可能会用到的参数和返回结果 4、各种拦截器的配置 struts.properties struts2框架的全局属性文件,自动加载 和strusts.xml在一个路径 该文件包含很多key-value键值对。 这个文件可以不要,可以在structs.xml中进行配置,使用constant元素可以替换 .dtd就是约束struts.xml中可以有哪些标签不能有哪些标签 可以通过 <include file=“”>包含其他文件 可以把每个功能模块独立到一个xml配置文件中,然后用Include节点引用 <package> package提供了将多个Action组织成为一个模块的方式 package的名字必须是唯一的,可以在这个包上加一些拓展的包 <package name="包名" extends="继承的父类的名称" abstract设置package的属性为抽象,抽象的package不能定义action的值, ture或false namespace 包的命名空间> <interceptors>为拦截器 可以为拦截器定义name(名称)和class(类路径) <interceptor-stack>拦截器栈 <default-interceptor-ref name="">定义默认的拦截器,每个Action都会自动引用如果查看全部
举报
0/150
提交
取消