Struts1的原理和实例讲解
来源:互联网 发布:git server windows 编辑:程序博客网 时间:2024/05/22 00:08
Action,ActionForm,ActionForward,这三个构成了Struts的核心。
Struts最核心的控制器是ActionServlet,Servlet主要是拦截用户的请求,然后转发到Struts的控制器中。
一、配置ActionServlet
ActionServlet是一个标准的Servlet,是在web.xml中进行配置,用户拦截所有的http的请求。并且需要把Servlet设置成自启动,通过load-on-startup属性。属性中配置的值越小,优先级越高。
在web.xml中配置servlet如下:
<servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>二、创建Struts1的配置文件struts-config.xml,如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts-config PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN""http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <form-beans> <form-bean name="user" type="form.User"></form-bean> </form-beans> <global-exceptions> </global-exceptions> <global-forwards> </global-forwards> <action-mappings> <action name="user" path="/user" type="action.UserAction" parameter="operate"> <forward name="error" path="/jsp/error.jsp"></forward> <forward name="success" path="/jsp/success.jsp"></forward> </action> </action-mappings> <message-resources parameter="MessageResources" /> </struts-config>
配置详解:
1.<form-beans>项用来定义所有用到的ActionForm类。
例如:
<form-beans>
<form-bean name="user" type="form.User" />
</form-beans>
所有用到的ActionForm都可以在中间定义,name属性是ActionForm的类名,type属性定义这个ActionForm类所在的位置。
2.<global-forwards>项中的<forward>子项定义了JSP页面中<html:link>标签所要连接的页面或者类。
例如:
JSP页面中有<html:link forward="login">
struts-config.xml配置文件中
<global-forwards>
<forward name="login" path="/login.do">
<forward name="logout" path="/logout.do">
</global-forwards>
注:这里的name属性值要和<html:link>标签中的forward属性值相一致。
path属性指定<action>项中定义的Action类的别名。
------如下
<action-mapping>由它定义ActionForm和Action类之间的关系。
<action path="/loninAction"
type="cn.login.LoginAction"
name="loginForm"
validate="true" //如果是true就需要在ActionForm也就是loginForm中进行表单验证,如果是false不需要进行验证
input="/login.jsp">
如:path属性定义这里用到的LoginAction的别名。其中login.jsp中的<html:form action="/loginAction" focus="username">
的action属性要和这里的path的值是一样的。
type属性是Action类的全名。
validate属性,struts默认validate属性值为false,如果需要ActionForm对表单进行验证那么就需要将这个值设置为true。
input属性:表示当bean发生输入错误的时候(也就是在loginForm类中有错误返回时)必须要返回的页面。这里出现错误时必须要返回login.jsp。
parameter属性:直接指定需要跳转的页面,这是type属性必须设置为org.apache.struts.actions.ForwardAction,也不需要指定ActionForm进行数据的封装。不进行任何业务处理,只进行页面转发。
<action>里面定义了一个页面转向<forward name="success" path="/index.jsp">定义一个页面转向:
name属性:和LoginAction中的mapping.findForward(success);这个语句中的success和上面的name 的值是一样的。
<message-resources parameter="cn,login.MessageResources">项定义了资源文件的位置。它对应cn.login包下的MessageResources文件。
三、a.创建action,只有execute方法,如下:
package action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import form.User; public class HelloAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { User user = (User) form; if (user.getUserName().equals("zhangjie") && user.getPassword().equals("zhangjie")) { return mapping.findForward("success"); } else { // 返回ActionForward对象,指定用哪个页面或是Action处理结果 return mapping.findForward("error"); } } }b.继承DispatchAction实现根据方法名跳转不同的方法中,如下:
package action import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.actions.DispatchAction; import form.User; public class UserAction extends DispatchAction { static List<User> userList = new ArrayList<User>(); static { userList.add(new User("admin", "123456")); userList.add(new User("123456", "123456")); userList.add(new User("111111", "111111")); } public ActionForward login(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { User user = (User) form; if (user.getUserName().equals("admin") && user.getPassword().equals("123456")) { return mapping.findForward("success"); } else { // 返回ActionForward对象,指定用哪个页面或是Action处理结果 return mapping.findForward("error"); } } }注:struts-config中的actionMapping中需要定义一个参数parameter在请求中传递方法名。
四、实现JavaBean继承ActionForm如下:
package form; import org.apache.struts.action.ActionForm; public class User extends ActionForm { private String userName; private String password; private String method; public User() { } public User(String userName, String password) { this.userName = userName; this.password = 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 getMethod() { return method; } public void setMethod(String method) { this.method = method; } }如有不明者,请下载源码研究 链接:http://pan.baidu.com/s/1nv3fZrN 密码:wepc
- Struts1的原理和实例讲解
- 【Struts1】Struts1的配置和原理详解
- Struts原理和struts1.x完整实例
- Struts1配置讲解及原理
- 断点续传的原理剖析与实例讲解
- 断点续传的原理剖析与实例讲解
- struts1的整体复习讲解
- Struts1 的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- struts1的国际化原理
- struts1的工作原理
- struts1的工作原理
- struts1的工作原理
- Mybatis逆向工程
- Linux系统文件的网络传输、打包tar、压缩zip、gzip、bzip2、xz、gz、bz2
- Windows切换JDK
- Android SmartRefreshLayout的使用
- 【信息融合】多传感器信息融合的四种基本结构
- Struts1的原理和实例讲解
- Windows环境下用Anaconda(2.7/3.6)安装GPU版TensorFlow
- Linux /proc 目录
- 一个数组实现两个栈
- 01-测试流程
- 日常改BUG-windows连接远程ubuntu(14.04)服务器的mysql数据库
- 2017-10-26开发总结
- 静态库与共享库的区别、进程、操作系统、内存
- 02-测试用例