您的位置:首页 > 编程语言 > Java开发

Struts2基本流程及基础知识问答

2017-01-05 16:44 435 查看
这是我在struts2学习过程中的一些思考和查阅所得答案:

我能看懂的是什么?

1、为什么要用接口和实现类。

增加项目的可扩展性,方便后期升级和维护。

2、项目的整体流程。

HTML页面(JQuery Ajax 提交action请求)——》控制类action类——》调用service处理业务逻辑——》调用Dao层存取数据

我不能看懂的是什么?

1、使用struts需要什么配置?

web.xml(Tomcat webapp ROOT下复制):配置struts2的核心控制器FilterDispatcher;为FilterDispatcher建立映射。

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


struts.xml:

<!--struts的配置都要在这个里面-->
<struts>
<!--增加包,以此避免action名重复-->
<package name="包名" extends="struts-default">
<action name="action的名称" class="该action的全限定名">
<result name="该action的可能返回值,例如success">success.jsp</result>
<result name="该action的可能返回值,例如fail">fail.jsp</result>
</action>
</package>
</struts>


2、Action类是什么角色,怎么获取浏览器提交的数据?

Action起控制器的角色,接收请求并分流请求,然后传递给service层处理业务逻辑。

获取数据的方法:

action类中定义了和表单(或提交数据)中完全同名的属性以及其getter和setter方法,这样,Struts2框架就会自动把提交的数据赋给相应的属性,都不用专门去接收了!(如果是servlet的话还要专门去接收)

3、如何在Action中往request、response或session中添加获取属性(换句话说就是怎么拿到request、response等对象)?

方式一:com.opensymphony.xwork2.ActionContext (implements java.io.Serializable)

ActionContext.getContext().getSession()

该方法返回Session的map,可以往里面添加属性,然后再页面获取。但是ActionContext不能获取HttpServletRequest和HttpServletResponse。

方式二: org.apache.struts2.ServletActionContext

class ServletActionContext :Web-specific information for actions(专为web开发设计的类)

ServletActionContext是ActionContext的子类

这样就可以获取request和response了。完美!

4、Action只是一个普通的java类吗?

一般action都会继承struts2提供的ActionSupport类,该类提供了一些比较规范的常量,如SUCCESS等,并且提供了validate方法进行表单验证。

5、struts.xml中包必须要继承struts-default包吗?

一般来说,用户在自己编写struts.xml是,都要使用extends继承struts-default.xml文件中定义的struts-default包,因为该包定义了一些struts2框架要使用到的资源,比如Bean、result类型、拦截器等。

6、怎么使用action类?

编写好action类后,只有在struts.xml文件中配置该action才能使用它处理请求。

7、Action类是控制器,那它的业务逻辑写在哪里?

首先,action类会继承struts2的ActionSupport类,然后就可以将业务逻辑重写进该类的execute方法,struts2框架会默认执行该方法里面的逻辑。

8、如果我只想请求User类中的regist方法该怎么办?execute方法不是只有一个吗?

这就要用到Action类方法的动态调用了:jsp页面中的form(或Ajax请求中的请求链接)通过“action=ActionName!MethodName.action”将请求提交给Action的特定方法去处理。

9、JSP+Servlet模式中视图层可以通过req获取需要装填的信息,那么作为一个更优秀的框架,struts2的视图层怎么获取Action的信息?

ONGL(Object Navigation Language)对象导航语言,是一种即简单又强大的表达式语言。它是struts2框架视图默认的表达式语言。通过使用OGNL,Struts2视图可以直接获取模型层的数据。

ONGL通常用“对象.属性”的形式来调用,如Person.name就表示person的那么属性。

如果要获取request、session等里面的信息的话,则实例如下
<s:property value="#request.msg" />
,具体实例在使用时再去查就好了。

10、如果我要在视图中显示一个集合,应该怎么做呢?

这就要用到struts2标签库了。使用struts2中的iterator标签就可以解决该问题,实例如下

<s:iterator value="myMap" status="st">
<s:property value="#st.getIndex()"/>
</s:iterator>


Struts2还有诸如if/else、append等等标签,使用的时候百度查就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: