内容:struts框架的工作原理,如何搭建struts 2框架,以及struts 2框架与页面的传值。
一,框架搭建
1)下载9个所需的jar包
这里需要注意的就是我给出的包的版本是struts 2.3.20,如果下载的是最新版本的jar包,web.xml配置有些地方需要更改。所以还是下载我给出的这个版本最好。
2)配置web.xml文件
在你的web-app标签里面加入这个,这是一个过滤器。
<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>
3)在你的src文件夹下面添加一个struts.xml的配置文件,需要new一个。下面的图是配置文件对应的图。
<?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>
<constant name="struts.i18n.encoding" value="gb2312"/>
<package name="action" extends="struts-default">
<action name="login" class="action.LoginAction" >
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
4)配置文件标签解释,这个博客写的挺好的,不多赘述。具体的配置根据你自己写的action有关,这个只是一个例子。点击打开博客
5)action代码编写,这个class放在名为action的package里面
package action;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class LoginAction extends ActionSupport{
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute() throws Exception{
if("ywf".equals(getUsername())&&"123".equals(getPassword()))
{
return SUCCESS;
}
else
{
return ERROR;
}
}
}
二,框架原理(原理可以参考这个博客)点击打开博客
我说一下我的见解,如果有不对的希望大家给出意见一起进步。
我的见解:Servlet容器加载这个项目,肯定先找到这个项目的web.xml文件,由于我们已经配置过了这个web.xml文件,也就是之前的filter,它的意思是拦截所有的请求,交给org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter这个类处理。这里的这个过程可以简单的理解为,设置struts框架拦截请求属性(我记得之前写过servlet过滤器),道理差不多。这时项目在tomcat启动的时候已经加载完毕了。然后就等页面发送请求,struts拦截请求。这时寻找struts的配置文件。
也就是我们添加的struts.xml。那个文件决定了你的action结果返回哪个页面。这个文件起到了之前的servlet的作用,也就是逻辑控制。而具体的函数操作则是由你的action决定。action相当于前面的Dao。这个框架使用起来很麻烦,我也不打算具体去学,简单了解原理。我还是想学SpringMVC。
三,对于web开发很难解决的就是传值问题
1)view--->control的传值
在view页面使用struts框架的标签,像这样。而action接收则用getXXX函数接收,注意要自动生成get和set函数。
<s:form action="login.action" method="post">
<s:textfield name="username" label="姓名" ></s:textfield>
<s:password name="password" label="密码" ></s:password>
<s:submit value="登录"></s:submit>
</s:form>
2)control--->view(标签<s:property value="" />不能获取值,只能获取你前面表单提交的内容)
①struts.xml文件里面对应result的配置,比如下面这样,但是必须保证你的action里面有getError()函数。这种写法应该很好理解。view里面用request.getParameter()取值
②另一种实现
<result name="success">/error.jsp?error=${errorcode}</result>
<result name="success">
<param name="location">/success.jsp</param>
<param name="errorcode">${errorcode}</param>
</result>
③为了提高代码重用可以使用实体模型传值(具体怎么传值还不是很理解)