还是比较高兴的呀,呼呼。我觉得我就应该是这种学习的方式,前面的学习方式都不怎么样,一知半解,然后就照着书去敲代码,那样代码,思想终究不是自己,错了自己也是无法改正的。而如果是自己真的曾经想过,并且快乐的实现了,并且其中出了些许错误,在自己的一步步排除查找下,找到错误并改正,这样才能真正的了解其中的精髓。
这第一个struts2架构的web程序,我是一步步配置,一步步写出来的。具体的最开始的配置,前面的文章我写了,这次我说一说我对struts2的运行过程的个人见解,我只是个学生,肯定研究的不神,如果有错误,请及时告之改正。
首先,我又重新对web.xml这个文件的作用又重新认识了。我认为一个web网页的加载,应该是先分析的web.xml,然后将已经分析清楚的结构挂到tomcat,当然当整个web.xml中的东西都分析清楚之后,你这时候在更新就不能更新了,必须重新upload。而这时候,如果你用了struts2,并且来了个action。(当然你起初是加了filter的)这个时候系统根据以前分析的:“好,有人用struts2的filter了,并且和我action的name一样的action。好吧,我就调用那个action处理一下吧”,然后调用了action的类分析并且接受参数,然后处理后要返回一个String类型的返回值,来告诉struts2:“你处理的结果是什么呀?我下一步怎么弄呀,到底去哪一个界面呀?”好吧,找到了哪一个界面了,当然这期间你是可以传参数给下一个界面的。然后在下一个界面,分析action传过来的参数。多么和谐呀,多么美妙呀。
看我的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> <package name="struts2" extends="struts-default"> <action name="query" class="com.QueryAction"><!-- 看这里,是一个叫query的action,并且它对应的类是QueryAction --> <result name="success"> <!-- 当result是success是去下面的界面 --> /chapter7/success.jsp </result> <result name="notfound"><!-- 当result是notfound是去下面的界面 --> /chapter7/notfound.jsp </result> </action> </package> </struts>
然后看我的query.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% 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 'Query.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> <div> <form name="myform" action="query"> <!-- query是一个action的时候,不需要加什么路径,因为对于action来说,都是唯一确定的,并且在struts架构中,所以你不用告诉它:在哪里 --> <table id="mytable" > <tr> <td> book name:<input name="name" id="name" type="text"/> </td> </tr> <tr> <td> </td> </tr> <tr> <td> <input name="query" id="query" type="submit" value="query" /> </td> </tr> </table> </form> </div> </body> </html>
<s:form action="query"> <s:textfield label="the book`s name" name="name" ></s:textfield> <s:submit value="query"></s:submit> </s:form>