Struts的工作原理及实例说明 一.MVC引入 1.m即model,是模型层;v即view,是视图层;c即controller,是控制层。 2.mvc的工作原理 控制器:收集客户发送的请求并决定选择哪个模型来完成该请求。 模型层:完成客户请求所需的逻辑处理。 视图层:将模型层得到的数据以一定的格式呈现给用户。 3.mvc的优点 (1).低耦合:将各功能模块代码进行分离,降低了代码的耦合度,利于系统的维护。 (2).提高代码的复用:一个完成相应功能的模型可以重复利用,可以被多个视图使用,提高代码的复用。 二.Java mvc优秀代表 struts的引入 1.struts的工作原理
(1)客户端提交一个HttpServletRequest请求(.action或JSP页面) (2)请求被提交到一系列Filter过滤器。 (3)FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器 (4)请求发到FilterDispatcher后,FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个Request(一般根据URL后缀是否为.action来判断) (5)如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求交到ActioProxy,由其进行处理. (6)ActionProxy通过Configuration Manager(它会访问struts.xml)询问框架的配置文件,找到需要调用的Action类. (7)ActionProxy创建一个ActionInvocation实例,而ActionInvocation通过代理模式调用Action,(在调用之前会根据配置文件加载相关的所有Interceptor拦截器) (8)Action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Interceptor拦截器. (9) 最后ActionInvocation负责根据struts.xml中配置的result元素,找到与返回值对应的result,决定进行下一步输出. (10)将模型层经过逻辑运算得到的数据带到前端页面(.jsp,.html等) 2.web.Xml配置文件 struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepare AndExecuteFilter struts2 /* 3.struts.Xml配置文件解析 (1)Package:表示一个逻辑单元,或者模块名称。所以我们可以把同一个模块的action配置到一个package里面。 (2)action Name属性:请求的url路径。 Class属性必须写完整的包名+类名. method属性方法名。 (3)路径 绝对路径写法:/项目名称/namespace/actionname.action 相对路径写法:namespace/actionname.action 三.一个简单的struts项目的开发 1.导jar包 struts2-core-2.2.1.jar:Struts2框架的核心类库。 xwork-core-2.2.1.jar:Xwork核心类库,Struts2在其上构建。 ognl-3.0.jar:对象图导航语言(Object Graph Navigation Language), 它是一种功能强大的表达式语言(Expression Language,简称为 EL),通过它简单一致的表达式语法,可以存取对象的任意属性, 调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。 freemarker-2.3.16.jar:Struts 2的UI标签的模板使用FreeMarker编写。 commons-fileupload-1.2.1.jar:文件上传组件,2.1.6版本后必须加入此文件。 commons-io-1.3.2.jar:IO输入输出流组件,主要完成文件的读写功能。 javassist-3.7.ga.jar:Javassist是一个开源的分析、编辑和创建Java字节码的类库。(在struts-2.2.1\apps\struts2-blank-2.2.1.war下的lib中找) commons-logging-1.0.4.jar:ASF出品的日志包,Struts2框架使用这个日志包来支持Log4J和JDK 1.4版本之上的日志记录。 2.配置web.xml文件 配置过滤器,对用户的请求进行过滤, 3.action类 package action; publicclass LoginAction { private String username; private String password; publicString getUsername() { returnusername; } publicvoid setUsername(String username) { this.username = username; } public String getPassword() { returnpassword; } publicvoid setPassword(String password) { this.password = password; } /** * 登录 */ public String login(){ if(username.equals(“admin”)&&password.equals(“ok”)) { return”success”; } else{ return”fail”; } } }
4.创建struts.xml文件,注册Action类。
<?xmlversion="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> <packagename="user"namespace="/"extends="struts-default"> <actionname="login"class="action.LoginAction"method="login"> <resultname="success">/success.jsp</result> <resultname="fail">/fail.jsp</result> </action> </package> <!-- Add packages here --> </struts>5.创建JSP文件。
<!DOCTYPE html> <html> <head> <metacharset="UTF-8"> <title>Insert title here</title> </head> <body> <formaction="login.action"> 用户名:<inputtype="text"name="username"/><br> 密码:<inputtype="password"name="password"/><br> <inputtype="submit"value="登录"/> </form> </body> </html>