在编写这个程序前,我觉得盲目地去跟着视频来敲代码或者看完视频后就去练习并不是个好办法。我的做法是:一、去把Struts框架的原理搞清楚,也可以去struts的官方网站 http://struts.apache.org 查阅,它的原理图如下:
简单介绍一下这个原理图的大致意思:
(1)、客户端发送请求后提交到一系列的过滤器,主要有三层,并且有一定顺序,先是ActionContextCleanUp过滤器,然后再到其他过滤器(SiteMesh等),再到FilterDispatcher过滤器。
(2)、FilterDispatcher过滤器会询求ActionMap该调用哪个action,如果ActionMap决定调用哪个action便把结果传给ActionProxy,ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类.
(3)、ActionProxy创建一个ActionInvocation的实例,同时ActionInvocation通过代理模式调用Action。但在调用之前ActionInvocation会根据配置加载Action相关的所有Interceptor。(Interceptor是struts2另一个核心级的概念)
(4)、最终通过action里的result来找到相应的可视界面(jsp等)并把它传到客户端界面。
我认为如果能够在原始网站看懂它的原理和它的文档,那么你几乎成功了一半了,因为原理你懂了,再者既然你能读懂它的文档那么相信你的英语水平不错,学习能力强,后面的框架学习你都可以自学了。但是如果你看不懂文档,你可以去找度娘问问,我认为如果真是要学好学精一项技术最好是去源网站看最原始的代码,养成良好的查阅资料的习惯,这对于日后的工作是有益无害。我们不能一味地依赖于别人从原始网站翻译过来的东西,我们更应该主动去学习。
二、下载struts2压缩包,解压后把它的目录看一遍方便日后去查阅资料,同时把这些jar包加到lib文件夹下,以下是我做的时候加进来的包(注:我用的MyEclipse软件):
三、接下来就是开始写HelloWorld程序
先把 解压盘符:\struts-2.3.24\apps\WEB-INF\web.xml考到自己项目下的webroot的WEB-INF文件夹下
再把struts压缩包里的struts文件复制过来,放在src文件夹下,修改成以下:
<?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> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/actions" extends="struts-default"> <action name="hello"> <result> /Hello.jsp </result> </action> </package> </struts>
对于namespace可以设置成“/”这样访问Hello.jsp就可以直接写http://localhost:8080/HelloWorld/hello就可以访问了,如果像我上面这种写法就得这样写:http://localhost:8080/HelloWorld/actions/hello才可以看到结果否则会报找不到文件的错误。
最后写个Hello.jsp程序如下所示:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP ‘index.jsp‘ starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> HelloWorld! <br> </body> </html>
最后右键点击项目名运行项目,在浏览器地址上输入http://localhost:8080/HelloWorld/actions/hello,就可以看到效果,如下: