1.在之前,我介绍过第一个struts2的小程序:struts2搭建环境和第一个小程序,接下来我将介绍Action配置的各项默认值。
2.首先,我们可以copy一个已经配置好struts2环境的web项目Struts2Test,然后复制,输入复制的项目名称,出现下图:
点击OK按钮:
此时,该项目是不能被部署到服务器上的,应该选中项目,右键鼠标,选择Properties属性,或者直接按快捷键alt+enter,出现下图:
此时我们打开MyEclipse那个选项,如下图所示:
我们要做如下图的修改,把Web Context-root改为当前项目名称,即/ActionTest,点击OK即可:
点击finish即可,以后要copy项目就做上面的事情,就不用每次手动搭建struts2的环境了。
3.copy这个项目之后,我们把不需要的东西删掉,其中web.xml文件不需要改它,因为copy的项目是环境已经搭建好的了,我们可以修改一下struts.xml配置文件,接下来附上struts2.xml的代码:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="xg" namespace="/test" extends="struts-default">
<action name="login">
<result>/login.jsp</result>
</action>
</package>
</struts>
接下来在WebRoot目录下新建一个login.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 'login.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>
<center>
<form action="/xxx" method="post">
用户名:<input type="text" name="username"/><br>
密码:<input type="password" name="password"/><br>
<input type="submit" value="提交"/>
</form>
</center>
</body>
</html>
项目结构如下图:
如果对搭建环境还不知道的,可以百度一下,或者看我写的那篇文章:http://blog.csdn.net/u012561176/article/details/43852931
4.接下来我们部署此项目,开启Tomcat服务器,输入网址:http://localhost:8083/ActionTest/test/login ,出现下图,action转发了login.jsp这个页面:
这是因为Action配置有各项默认的值。
5.Action配置中的各项默认值:
(1).如果没有为action指定class属性,默认的Action类是ActionSupport类。
(2).如果没有为action指定method属性,默认执行action中的execute()方法。
(3).如果没有指定result的name属性,默认为success。
6.其中这个ActionSupport类位于Web App Libraries这里面,如下图所示:
这时我们打开这个ActionSupport.class类,如下图所示:
、
没有所谓的Java代码,都是些字节码,怎么样才可以让我们看到熟悉的Java代码呢?
我们可以这样做,必须找到E:\struts-2.3.20\struts-2.3.20\src\xwork-core\src\main\java个路径,我们选中xwork-core-2.3.20.jar包,单击鼠标右键选择Properties,出现下图:
点击红色箭头指向处,即在文件夹里面选择,然后找到E:\struts-2.3.20\struts-2.3.20\src\xwork-core\src\main\java这个路径:
点击确定按钮,返回下图界面:
点击Apply应用,再点击OK按钮即可,此时我们发现ActionSupport.class类变成了我们熟悉的Java代码了,如下图所示:
7.经过上面第6点的ActionSupport.class类变成了Java代码,其中这个类实现了Action,Validateable等等的接口,然后我们就可以来研究源代码了:
上面第5步讲了Action配置的各项默认值,其中action下的class属性就是这个ActionSupport类,action下的method执行方法是不是在这个ActionSupport.class类里面呢?答案是肯定的。
这说明了当用户在请求一个action的时候,首先会交给ActionSupport.class类处理,如果在action中没有指定method属性,默认就是执行execute()方法,看上图在执行execute()方法时返回了SUCCESS常量,而这个常量到底在哪里定义了呢,答案是在Action.class类里面定义了:
而这个常量指向的值就是为一个字符串success,在struts.xml文件下,我们没有指定result下的name属性,默认值为success字符串,所以它会找到login.jsp页面,完成用户的请求,转发到login.jsp这个视图。
8.以上内容仅供大家学习参考,写得不好,请见谅,如有错误请指出,谢谢!