-
Action内置的五个系统属性
查看全部 -
@Struts2---处理结果类型
1.Structs2处理流程
用户请求Structs框架控制器(Action)Structs框架视图资源
返回String,提供代码复用性,有利于框架分离。2.Action中五种内置属性(com.opensymphony.xwork2.Action)
(1) SUCCESS Action正确的执行完成,返回相应的视图,success是name属性的默认值。
(2) NONE 表示Action正确的执行完成,但并不返回任何事视图。
(3) ERROR 表示Action执行失效,返回错误处理视图。
(4) LOGIN Action因为用户没有登录的原因没有正确执行,将返回该登录视图,要求用户进行登录验证
(5) INPUT Action的执行,需要从前端界面获取参数,INPUT就是代表这个参数输入界面,一般在应用中,会对这些 参数进行验证,如果验证没有通过,将自动返回该视图。查看全部 -
@Struts2---接收参数
接收参数
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---编写struts2后缀的三种方式
方式一:在struts.xml中设置
<constant name="struts.action.extension" value="do"></constant>
方式二:在struts.properties中设置
struts.action.extension=action,do
方式三:在web.xml中的struts2过滤器中初始化参数
<init-param> <param-name>struts.action.extension</param-name> <param-value>do</param-value> </init-param>
查看全部 -
@Struts2---默认Action
<default-action-ref name="index"></default-action-ref> <action name="index"> <result>/error.jsp</result> </action>
查看全部 -
@Struts2---指定多个配置文件
1.如果有很多个Action的配置文件,则需要在struts.xml中使用<include file="fileName.xml"/>来包含其他的配置文件
2.struts文件中添加<constant name="struts.i18n.encoding" value="UTF-8"></constant>以防乱码问题的出现
3.配置文件和struts.xml的格式如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> ... </struts>
查看全部 -
@Struts2---动态方法调用
动态方法调用是为了解决一个Action对应多个请求的处理,以免Action太多。三种方式
1:指定method属性<action name="addAction" method="add" class="com.action.HelloWorldAction"> http://localhost:8080/struts2/aaa/addAction.action
2:感叹号方式
<constant name="struts.enable.DynamicMethodInvocation" value="true"></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/struts2/aaa/helloworld!add.action
3:通配符方式(推荐)
<action name="*_*_*" method="{2}" class="com.{3}.{1}Action"> <result >/{2}.jsp</result> <result name="add">/{2}.jsp</result> <result name="update">/{2}.jsp</result> </action> http://localhost:8080/struts2/aaa/HelloWorld_add_action.action
查看全部 -
@Struts2---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覆盖掉查看全部 -
@Struts2---struts2访问Servlet API的三种方式
Servlet API
HttpServletRequest
HttpServletResponse
ServletContextStruts2没有Servlet API
Struts2访问Servlet API的三种方式
1>使用ActionContext访问Servlet API(推荐使用)ActionContext actionContext=ActionContext.getContext(); Map<String, Object> sessionMap=actionContext.getSession(); sessionMap.put("user", user);
2>使用IOC的方式访问Servlet ApI
实现****Aware接口,如实现SessionAware接口,重写setSession方法public void setSession(Map<String, Object> sessionMap) { this.sessionMap=sessionMap; } sessionMap.put("user",user);
3>耦合方式(ServletActionContext)访问Servlet API(不推荐使用)
ServletActionContext.getPageContext(); ServletActionContext.getRequest(); ServletActionContext.getResponse(); ServletActionContext.getServletContext();
查看全部 -
@Struts2---深入8个方面
1.访问Servlet API
2.Action搜索顺序
3.动态方法调用
4.指定多个配置文件
5.默认Action
6.Struts2后缀
7.接受参数
8.处理结果类型查看全部 -
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都会自动引用如果查看全部 -
@Struts2---struts.properties模板
#制定默认编码集,对于请求参数带有中文的情况应该设置成gbk.gb2312,默认值utf-8 struts.i18n.encoding=utf-8 #是否每次HTTP请求到达时,都重新加载国际化资源文件,默认为false struts.i18n.reload = true #但struts.xml改动后,是否重新加载该文件,在开发阶段建议设置成true,提高开发效率,默认为false struts.configuration.xml.reload=true #是否使用struts2的开发模式,可获得更多报错信息,便于调试,在开发阶段设置为true,默认为false struts.devMode =true #设置浏览器是否缓存静态页面,开发阶段设置为false,以获得服务器最新响应,默认为true struts.serve.static.browserCache=true #指定后缀为.action形式的请求可以被struts2处理,可配置多个请求后缀,比如.do,struts等,配置多个后缀名用逗号隔开 struts.action.extendsion=action,do,struts2, #配置服务器运行时的端口号,一般情况下该属性不用修改,如果端口号占用则重新分配端口号,默认为80 struts.url.http.port = 8080
查看全部 -
@Struts2---struts.xml模板
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <include file=""></include> <package name="" extends="" namespace="" abstract="" externalReferenceResolver=""> <interceptors> <interceptor name="" class=""></interceptor> <interceptor-stack name=""> <interceptor-ref name=""></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name=""></default-interceptor-ref> <global-results> <result name="">/xxx.jsp</result> </global-results> <action name="" class="" method="" converter=""> <interceptor-ref name=""></interceptor-ref> <result name="" type="">/xxx.jsp</result> <param name="">值</param> </action> </package> <constant name="" value=""></constant> </struts>
查看全部 -
@Struts2---工作原理图
查看全部 -
@Struts2---代码实现
1.要导入的包:(共9个)
commons-fileupload(上传下载包)
commons-io(输入输出包)
commons-lang 3-3.2(基础包)
commons-logging(日志包)
freemarker(模板引擎,通过模板生成文本输出的通用工具)
structs2-core(核心包)
xwork-core(一些类基于xwork)
ognl(表达式)
javassist-3.11.0.GA.jar(解析java类文件的一个包)2.配置web.xml文档
web项目在启动tomcat时第一个启动的文件就是web.xml
首先定义过滤器
<filter>
<filter-name>struct2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
这里写完后按住ctrl点击鼠标左键如果可以跳转则证明正确
</filter>
filter的映射
<filter-mapping>
<filter-name>struct2</filter-name>
<url-pattern>/*</url-pattern>
/*是所有的都需要过滤
</filter-mapping>
映射与文件的filter-name应该保持一致
3.在src中创建struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
</struts>
4.创建action包
创建action类让其继承ActionSupport
Struts2中有一个默认的方法不指定方法名的话有一个execute()方法
之后去配置struts.xml中的action文件5.注意点
编译环境问题,类名问题,导包问题查看全部
举报