3大框架用久了,有很多东西遗忘,而且变的只会用而不知所以然,所以这次复习一下最开始学习时的内容。主要记录生疏和遗忘的部分。
一、框架介绍
Java框架主要是配置,配置结合程序。
中央控制器(又叫前端控制器):Dispatcher;后端控制器(或称为业务控制器):Action。在Struts2中,Action被归到Model层,只有中央控制器才是Controller层
解析XML:DOM解析(速度慢,多用于小文件解析,容易学习),Sax解析(速度快效率高,多用于大文件解析,相比DOM要难些)
Action是线程安全的,每经过XML中的<action>节点一次,就相当于new了一次,所以Action是线程安全的。Servlet不是线程安全的。
二、下载
有Full Distribution,Example Applications,Essential Dependencies Only,Documentation,Source几种,其中Full Distribution是完全包,包括之后的几种。下载Full Distribution。
包的内容:
app中的例子是War包,把war包放到tomcat下的webapps下,启动tomcat的时候,会自动解压war包,并部署。
docs:WW下的index.html是离线版的Struts文档。和官网首页上点击“get Start”进入的页面一样
lib:根据使用的需要导入。其中的jar包有冲突的,所以不能一次完全导入。使用时基本的jar包有
三、使用
1.struts下载包中有很多jar包,其中9个最基本的要导入的jar包:commons-lang.jar,commons-io.jar,commons-fileupload.jar,commons-logging.jar,freemarker.jar,javassist.jar,struts2-core.jar,xwork-core.jar,ognl.jar
2.配置中央控制器(filter),过滤所有:/*(不仅是/*.action)
在项目下点击:Web App Libraries→点击struts2-core-2.3.1.2.jar→进入目录org.apache.struts2/dispatcher/ng/filter→其中strutsPrepareAndExecuteFilter.class文件就是要配置的中央控制器。双击它,出现如图页面:
点击"Attach Source"按钮,选择external folder选择jar包所在磁盘,打开Struts2下载包,选择src目录,即可查看文件(jar包的内容是只读的)。
框架的异常从下往上看,下面通常是问题的根本。
3.创建struts.xml(配置文件)
该文件名不能改。
XML文件的验证有两种:DTD和Schema
struts.xml的验证需要导入struts-2.3.dtd(在struts2-core.jar包下),写的是struts.xml的验证。
package要继承struts-default.xml(在struts2-core-2.3.1.2.jar中,是struts2运行的核心)中的package名称
default.properties中时struts2的各种配置,其中,
1 struts.action.extension=action,,
表示可以为action或没有后缀(另:struts1中常用的后缀是.do,struts2常用的后缀是.action)
修改default.properties配置有两种方法:①struts.properties(文件名不可改)②struts.xml中<constant>节点(两种都写的时候struts.properties文件有限起作用)
4.写Action
①Action中的execute方法每个Action中都有一个默认的execute方法,当我们把execute方法写出来的时候,就覆盖了默认的;不写出来的时候,就存在一个默认的execute方法;访问Action类同名的路径(去掉Action,类首字母小写的路径)会执行execute方法。
②当没有配置执行action的那个方法时(无论是XML配置还是注解),默认执行execute方法
③验证action是线程安全的方法:写构造函数,请求的时候看构造方法的执行遍数,如果每次请求都执行一次构造方法,则表明是线程安全;如果请求了多次,只执行了一次构造方法,则不是线程安全。
④部署项目:struts.xml中/表示WebRoot:/WEB-INF/.../xx.jsp或者直接index.jsp
⑤参数传递
除了变量通过set、get方法传递参数之外,还有以下几种情况:
(1)当result的跳转方式是redirectAction的时候,传递参数code(chain方式的可以跨域传值,所以不需要这样写)
<action name="userlogin" class="com.it.action.LoginAction" method="login"> <result name="success">/WEB-INF/views/welcome.jsp</result> <result name="error" type="redirectAction"> <param name="actionName">login</param> <param name="code">10001</param> </result> </action>
(2)JSP中对象的属性,name属性的写法
<input name="user.username" />
(3)在(1)中的代码中,如果code属性是从Action传过来的变量,写法:
…… <param>${code}</param> ……
类似于EL表达式,但不是EL,本质是调用Action中的getXXX方法
⑥ActionContext
⑦Action的设计:没有继承什么类,也没有涉及Http相关的东西,是独立的一个Class。这个设计也是为了之后的单元测试。Action类可以单独使用,单独测试,不涉及其他内容。
⑧ActionSupport类,查看源码:选择external folder选择jar包所在磁盘,打开Struts2下载包,选择struts→src→xwork-core选择即可
四、应用
①文件下载
<result type="stream"> </result>