{LJ?Dragon}【注】Struts标签的三个好处
RELATED LINKS |
|||
0.UTF-8 有无BOM的区别 |
06. |
||
1.修改记事本编码默认 |
07.EasyUEFI简介 |
||
2.CAD安装问题 |
08. |
||
3.几款好用的播放器 |
09. |
||
4.win8 右下角水印问题 |
10.联想G40-30安装Win7 |
||
5.其它 |
................... |
LJ?Dragon |
1.<html:link>标签的三个好处:
使用<html:link action="/action"/>不用关心web应用程序的路径和ActionServlet的映射路径。
可以自动附加jsessionid参数进行url重写。
可以对参数信息进行url编码。 备注: <c:url>标准标签也有<html:link>标签的后两个作用。
实验步骤:
把ActionServlet的映射路径由*.do改为*.html,这时候需要修改前面案例中的jsp页面中的超链接,由这个错误引出<html:link>标签的讲解。
启动一个新浏览器访问第一个Action,查看<html:link>生成的超链接地址,刷新后再查看这个超链接地址,比较差异说明<html:link>标签的url重写功能。
在<html:link>的action属性值的路径后中直接加参数,但是不能对其中的中文字符进行url编码。
使用paramID和paramName等属性设置一个参数,可以完成中文参数的url编码。
使用name和property属性来设置多个参数。
演示完<html:link action="/action"/>标签后,记住把ActionServlet的映射路径改回为*.do,以后*.html与后面讲解的普通html页面打架。
为了体现<html:link>标签的url编码作用,可以用如下两段代码对比一下:
1.
- <a
href="${pageContext.request.contextPath}/RegUser.html?userid=LJDragon">注册</a><
2.
- <%
- //这个可以用<bean:define>标签替代
- request.setAttribute("xx","LJDragon");
- %>
链接
- <html:link
action="/RegUser"
paramId="username"
paramName="xx"
>注册</html:link>
通过读帮助文档来为<html:link>生成的超链接增加参数的另一种方式
- <%
- Date x = new Date();
- request.setAttribute("username",x);
- %>
(这里的脚本代码改成标签的方式来写,有哪些?好像只有<jsp:useBean>标准标签)
- <html:link
action="/regUser"
paramId="username"
paramName="username"
paramProperty="time">
2.全局forward与<logic:forward>标签
全局forward的配置与应用
增加一个全局forward配置,让其path属性指向index.jsp页面,说明action没有找到局部forward时,就会使用全局的forward,
只要将第一个action内部的forward名称改为这个全局的forward,就可以看到运行效果了。
在首页中使用<logic:forward>标签
在首页中使用<logic:redirect>标签
注意:由全局forward加在struts-config配置文件的最前面,引出了<struts-config>中的子元素是有顺序的附带讲解。
对于注册这个url地址,每次都要在浏览器中输入,很麻烦!
先在index.jsp页面中使用<logic:forward>标签转发过去,这时候需要配置全局forward,接着用<logic:redirect>标签重定向过去,
这时候不需要配置全局forward。
3.本阶段应注意的要点:
Action是单实例和线程不安全的,在Action最好不要有可读写的成员变量。(???structs2中Action是多线程多实例的)
struts-config.xml文件中的<action>元素的path属性中没有.do,原因是映射到struts的路径可以不是.do嘛!
struts-config.xml文件中的<action>元素的path属性必须以"/"开头,
forward中配置的jsp文件路径也必须以"/"开头,
总之,在web应用程序中记住路径总是以"/"开头,就错不了!
4.阶段目标与面试相关问题
(1)什么是MVC模式?
(2)说说你对struts的理解?
(3)独立用struts做一个注册程序(这一阶段只要做出基本骨架就行)
(4)怎样防止struts配置文件的膨胀?
(5)说说软件开发的流程
(6)说说你在struts项目中使用的是什么标签库?
(7)能区分ActionMapping与Action的区别吗?
(8)配置文件中的action元素中有哪几个属性必须设置
Struts框架查找出一个xx.do路径对应的Action.execute方法的线索。
答案:
第1题的答案:
MVC是module、view、controller的简写,module代表数据、view代表视图、controller代表控制器,
控制器接收和处理请求,产生数据,然后选择视图显示数据。
MVC的好处在于将处理业务的控制逻辑代码与显示视图的代码进行了分离,便于维护。
如果有可能,最后最好是再画一个图来描述下。
第2题的答案:
从actionservlet->到action开始讲,然后再是formbean,然后再是actionforward,最后是一些表现层的东东。
Struts是一个遵循MVC模式的WEB层框架, 说白了,它就是一个大大的Servlet.
这个Servlet 的名字叫ActionServlet.在web.xml 文件中把某一组请求映射给这个Servlet,通常使用(*.do的形式),也就是映射给了struts框架 .
当这个ActionServlet接收请求以后,它将把这个请求交给一个Action处理,不同的请求交给不同的Action处理,
一个请求路径到底对应哪个Action,这是在struts-config.xml中配置的.
struts-config.xml 的名称和路径可以在ActionServlet 的参数中进行配置,并且可以配置成多个文件,
以逗号分隔,这有很大好处,可以防止配置文件的膨胀。
ActionServlet把请求交给Action之前,会把请求参数封装成一个formbean,当formbean校验有问题时,就返回到错误提示的页面,
当没问题时,才传递给Action去处理。
Action处理后返回的结果视图用一个Actionforward对象表示,
actionforward对象通过struts-config.xml配置文件中的配置关联到某个jsp页面,
因为程序中使用的是在struts-config.xml配置文件为jsp页面设置的逻辑名,这样可以实现action程序代码与返回的jsp页面名称的解耦。
此外,Struts中提供了国际化支持和一些非常方便的标签,使得一些页面开发任务得到了简化。
第4题答案:
查看ActionServlet类的帮助文档,可以看到其配置文件可以是逗号分隔的多个文件。
看struts帮助文档中的controller component这一节,可以看到struts配置文件中可以使用*(wildcards)通配符。
第6题的答案:
主要用jstl标签,有时候也用一些struts自己的标签,为什么呢?
因为jstl是标准,更通用,形成了用jstl标签库的习惯,但struts标签是紧密与struts框架紧密绑定在一起的,它能充分利用struts的特性,
有时候可以为我们带来方便,例如,上面的程序不用<html:link>而是直接写或用jstl标签,
就感觉到这一点了。这样的标签在JSTL中没有相对应的标签可用。
第7题的部分答案:
一个ActionMapping对象对应struts-config.xml文件中的一个<action>元素的配置信息,
读ActionMapping类的API帮助文档,通过各个setter/getter方法,即可了解<action>元素的各个属性的意义。
例如,通过帮助文档即可知道<action>元素的unknown属性的作用,设置默认的Action。
查看ActionMapping的方法列表和配置属性的对应关系,并在程序中打印出相应的配置信息,从而透彻地了解ActionMapping的功能。
第9题:
xx.do--><action>元素的path属性-->action元素的type属性-->Action的Java类-->exectue方法。
Reference
【1】原文 zhchzh1000:http://blog.csdn.net/zhchzh1000/article/details/4602478