- 浏览: 310208 次
最新评论
-
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
hunanjun000:
《研磨struts2》第四章 Action 之 4.5 Action的其它重要知识
2.4 Struts2的HelloWorld
2.4.1 概述
在上一个小节中,使用Model2来实现了一个简单的登陆功能,在本节里面,使用Struts2来实现同样的功能。Model2和Struts2都实现了MVC,因此Struts2的实现和上面Model2的实现是类似的。
前面讲到Struts2是一个基于MVC的轻量级框架,那就以MVC为突破口来分析,看看Struts2的HelloWorld到底要怎么做。
(1)从MVC的运行顺序看,首先是由视图来用于人机交互并提出请求,对应到Struts2的HelloWorld上,那就是提供一个登录页面,在这个登录页面上,用户可以填入用户名和密码,然后提交登录的请求。这个登录页面在上面Model2的实现中已经有了。
(2)在MVC中,用户的请求是提交到控制器的,对应到Struts2的HelloWorld上,Struts2会提供一个控制器,就是FilterDispatcher,它会根据用户提交的URL来选择合适的模型(动作Action)来响应用户的登录请求。
(3)在MVC中,模型完成应用功能处理后会通知视图它已经改变,视图会从模型中获取新的数据并展示。对应到Struts2的HelloWorld上,模型在调用真正的逻辑功能处理之后,会根据运行的结果,选择下一个页面,也就是欢迎页面,然后转向欢迎页面,并将模型的数据展现给用户。
根据上面的描述,实现Struts2的HelloWorld大致需要做如下的工作:
- 模型部分需要做一个Action类,用来响应用户的提交和执行相应的逻辑处理,需要新做一个。
- 视图部分需要两个页面,登陆页面用来填入用户名和密码,欢迎页面用来显示模型的数据。已经有了,不需要再重新做了,稍作修改即可。
- 控制器部分不需要开发新的控制器类,直接使用Struts2提供的FilterDispatcher就可以。
又有一个新的问题了,控制器是如何知道模型和视图部分,并将它们对应起来呢?在struts2里面,是通过提供一个配置描述文件struts.xml,在里面配置视图请求和模型的对应关系,从而解决这个问题。
- 这也意味着,我们还需要配置struts.xml,在struts.xml中将视图请求的URL与模型,也就是Action映射起来。
还有一个问题,就是使用Struts2来开发的候,是不需要JavaBean的,那么页面的数据如何传递到Action呢?
在Struts2中,是通过OGNL表达式和拦截器组合使用,来实现把页面的数据映射到Action中,具体的后面再去详细讲述,这里只需要知道,按照示例的写法能把数据传递过去就可以了。
2.4.2 配置Struts2的运行环境
要使用struts2进行开发,先要配置Struts2的运行环境。
- 首先找到Struts2的空示例工程。在下载的all-in-one包里的app里面的struts2-blank-2.1.8.1.war(struts-2.1.8.1\apps\struts2-blank-2.1.8.1.war)。war包可以用winrar解压出来,里面就是一个完整的web应用。
- 把里面WEB-INF\src\java下的struts.xml,拷贝到工程的src下备用。
- 把里面WEB-INF/lib里的所有jar包拷贝到工程的WebContent/WEB-INF/lib下。
- 打开WEB-INF/web.xml,把其中关于struts2过滤器的配置拷入工程的web.xml中,以前Servlet的配置都去掉,此时的web.xml如下所示:
-
java代码:到此,Struts2的环境就准备好了,接下来看看HelloWorld具体的开发和运行。
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
- <filter>
- <filter-name>Struts2</filter-name>
- <filter-class>org.apache.struts2.
- dispatcher.FilterDispatcher</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>Struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- </web-app>
-
2.4.3 实现动作类(Action)
动作类Action里面有一个execute的方法,其实现方式完全类似于前面Servlet实现中的doPost实现,要完成的工作也是一样的,这里就不去赘述了。
虽然要完成的工作是一样的,但是优雅的Struts2帮我们做了许多事情。
- 接收用户请求中的数据的时候,不再需要引用HttpServletRequest了,直接通过属性来获取。
- 同样,向下一个页面传值的时候,也不用亲自操作HttpServletRequest了,在下一个页面,直接通过OGNL表达式就可以获取到需要的数据。
HelloWorld的动作类Action示例代码如下:
java代码:- package cn.javass.hello.struts2impl.action;
- import com.opensymphony.xwork2.Action;
- public class HelloWorldAction implements Action {
- private String account;
- private String password;
- private String submitFlag;
- public String execute() throws Exception {
- //1:收集参数,不用做了,数据会直接映射到上面的属性里面
- //2:组织参数,暂时不需要,先不做
- //3:调用模型的逻辑功能处理,这里不需要,只是简单的输出一下传入的参数
- System.out.println("用户输入的参数为==="+"account="+account+",password="+password+",submitFlag="+submitFlag);
- //4:根据逻辑处理的结果来选择下一个页面,这里直接选择转向欢迎页面
- return "toWelcome";
- }
- public String getAccount() {
- return account;
- }
- public void setAccount(String account) {
- this.account = account;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getSubmitFlag() {
- return submitFlag;
- }
- public void setSubmitFlag(String submitFlag) {
- this.submitFlag = submitFlag;
- }
- }
这个类实现了Action接口。注意,在import需要使用的类包的时候,有多个接口都叫Action,选用的一定是Xwork2中的Action(com.opensymphony.xwork2.Action)。
通过上例可以看出,这个类的execute方法,相当于Servlet的doPost/doGet方法。
2.4.4 配置struts.xml
将写好的Action配置到struts.xml中,示例如下:
java代码:- <?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.devMode" value="true" />
- <constant name="struts.locale" value="zh_CN"/>
- <constant name="struts.i18n.encoding" value="gb2312"/>
- <package name="helloworld" extends="struts-default">
- <action name="helloworldAction" class="cn.javass.hello.struts2impl.action.HelloWorldAction">
- <result name="toWelcome">/s2impl/welcome.jsp</result>
- </action>
- </package>
- </struts>
首先清除掉原来的struts.xml中的配置,当然需要保留xml的声明语句,以及DocType定义和根元素<struts>定义。然后,在根元素里面开始添加需要的配置。
- 首先,加入三个常量元素。
<constant name="struts.devMode" value="true" />设置了程序的运行模式。
<constant name="struts.locale" value="zh_CN"/>设置程序运行所使用的locale
<constant name="struts.i18n.encoding" value="gb2312"/>设置程序运行时用的编码方式
正确设置后面两个参数,就可以解决Struts2的中文问题了。
- 其次,加入package的配置:
<package name="helloworld" extends="struts-default">
这里的name属性是标识符,同一个应用中必须唯一。
extends="struts-default"说明了这个包继承自struts-default(struts-default包在哪儿非常重要,具体的以后再说)。
- 然后,在<package>元素中加入一个<action>子元素:
<action name="helloworldAction" class="cn.javass.hello.struts2impl.action.HelloWorldAction">
这里的name属性是这个action的名字,用于在这个包中唯一标识这个类,class属性是我们自己写的Action的全类名,就是包的路径再加上类的名称。
- 最后,在action中加入一个result子元素:
<result name="toWelcome">/s2impl/welcome.jsp</result>
这里的name属性的值对应着Action的execute方法的返回值toWelcome,这个元素里面的“/s2impl/welcome.jsp”,指明了这个Action运行完之后会跳转到这个指定的welcome.jsp。2.4.5 制作登录页面
配置完成后,该来制作登录页面了。登录页面跟Model2实现中的页面基本相同,但是也有一些变化。
首先在WebContent下面新建一个s2impl的文件夹,然后把Model2实现中的登录页面和欢迎页面拷贝过来,然后再进行修改,需要修改如下地方:
(1)使用Struts2来实现的时候,不需要JavaBean的东西了,应该从页面上把使用JavaBean的部分去掉
(2)在登录页面怎么访问这个Action呢?这也是登录页面要修改的地方,应该修改访问的URL成为如下:“/helloworld/helloworldAction.action”,这个URL分为:
- “/helloworld”是web上下文
- “helloworldAction”是这个包中的一个动作名(<action>的name属性值)。
- “.action”是struts2默认处理的后缀
示例代码如下:
java代码:- <%@ page language="java" contentType="text/html; charset=gb2312"
- pageEncoding="gb2312"%>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
- <title>Insert title here</title>
- </head>
- <body>
- <form action="/helloworld/helloworldAction.action" method="post">
- <input type="hidden" name="submitFlag" value="login"/>
- 账号:<input type="text" name="account"><br>
- 密码:<input type="password" name="password"><br>
- <input type="submit" value="提交">
- </form>
- </body>
- </html>
2.4.6 制作欢迎页面
欢迎页面也有一点改变,由于欢迎页面需要显示的数据被封装在Action里面,要显示这些数据,通常会使用Struts2的标签,先不用去管细节,大致看一下实现即可。示例代码如下:java代码:- <%@ page language="java" contentType="text/html; charset=gb2312"
- pageEncoding="gb2312"%>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
- <title>Insert title here</title>
- </head>
- <body>
- <%@ taglib prefix="s" uri="/struts-tags"%>
- 欢迎账号为<s:property value="account"/>的朋友来访
- </body>
- </html>
2.4.7 测试示例
都修改好了过后,该来运行一下示例了。运行Tomcat服务器,访问http://localhost:9080/helloworld/s2impl/login.jsp。
从界面上看,和Model2实现的登录页面没有什么区别,如图所示图2.20 Struts2的HelloWorld的登录页面
填写账号和密码,然后点击提交,后台Action会输出:
然后跳转到欢迎页面,显示如下:
图2.21 Struts2的HelloWorld的欢迎页面
很简单的就完成了Struts2的HelloWorld示例。
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4013.html】
欢迎访问http://sishuok.com获取更多内容
评论
<action name="helloworldAction" class="cn.javass.hello.struts2impl.action.HelloWorldAction">
<result name="toWelcome">/s2impl/welcome.jsp</result>
</action>
</package>
缺个 namespace="/helloworld"
发表评论
-
研磨struts2 目录贴
2012-08-24 12:12 163531.1 《研磨struts2》 第一章 Struts2 ... -
跟着cc学设计 之 研磨设计模式 视频教程 出炉了
2012-08-15 07:16 2研磨设计模式——跟着CC学设计系列精品课程,上线了! ... -
研磨struts2 目录
2012-07-30 21:15 2471.1 《研磨struts2》 第一章 Strut ... -
研磨struts2 目录
2012-07-30 16:54 361.1 《研磨struts2》 第一章 Stru ... -
《研磨struts2》A.2 struts.properties的配置 之 A.2.1 概述
2012-07-09 12:10 3071A.2.1 概述 如果我们希望覆盖在 ... -
《研磨struts2》附录A Struts2的配置 之 A.1 struts.xml的配置
2012-07-09 12:10 2718A.1 struts.xml的配置 A.1.1 ... -
《研磨struts2》第二十一章 零配置 之 21.3 通过注解来实现零配置
2012-07-06 08:07 292921.3 通过注解来实现零配置 21.3.1 ... -
《研磨struts2》第二十一章 零配置 之 21.2 约定大于配置
2012-07-05 10:44 247421.2 约定大于配置 21.2.1 约定 ... -
《研磨struts2》第二十一章 零配置 之 21.1 概述
2012-07-05 10:44 232621.1 概述 21.1.1 零配置概述 在 ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.3 整合Struts2与SiteMesh
2012-07-04 08:15 2089在Struts2中使用SiteMesh ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.2 单独使用SiteMesh
2012-07-03 08:00 210420.2 单独使用SiteMesh 20. ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.1 调整应用的风格
2012-07-03 07:59 187020.1 调整应用的风 ... -
《研磨struts2》19.2 使用execAndWait拦截器模拟进度条 之 19.2.1 模拟长时间运行的Action
2012-07-02 12:24 214919.2.1模拟长时间运行的Action ... -
《研磨struts2》第十九章 进度条 之 19.1 使用“进度条”告知用户进度
2012-07-02 12:23 215119.1 使用“进度条”告知用户进度 ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.3 Struts2结合JFreeChart
2012-06-28 12:12 201418.3 Struts2结合JFreeChart ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.2 Struts2插件概述
2012-06-28 12:11 2031Struts2并没有求大求全,企图把所有 ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.1 JFreeChart使用
2012-06-20 15:48 229618.1 JFreeChart使用 18.1.1概 ... -
研磨struts2(1-10章)电子书下载
2012-06-19 07:30 6078研磨struts2的博客文章 私塾在线学习网 《研 ... -
《研磨struts2》第十七章 防止重复提交 之 17.3 更强大的tokenSession拦截器
2012-06-18 13:46 208217.3 更强大的tokenSession拦截器 ... -
《研磨struts2》第十七章 防止重复提交 之 17.2 使用标签
2012-06-18 13:45 233917.2 使用<s:token/>标签 ...
相关推荐
jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+servlet+javaBean实现MVC源码 jsp+...
jsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_jspmvcjsp+servlet+javaBean实现MVC_...
jsp+servlet+javaBean实现MVC_jspmvc(毕业设计+课程设计)jsp+servlet+javaBean实现MVC_jspmvc(毕业设计+课程设计)jsp+servlet+javaBean实现MVC_jspmvc(毕业设计+课程设计)jsp+servlet+javaBean实现MVC_jspmvc...
[其他类别]jsp+servlet+javaBean实现MVC_jspmvc [其他类别]jsp+servlet+...[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc
jsp+servlet+javaBean实现MVC jsp+servlet+javaBean实现MVCjsp+servlet+javaBean实现MVCjsp+servlet+javaBean实现MVCjsp+servlet+javaBean实现MVCjsp+servlet+javaBean实现MVCjsp+servlet+javaBean实现MVCjsp+...
[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+javaBean实现MVC_jspmvc[其他类别]jsp+servlet+...
[其他类别]jsp+servlet+javaBean实现MVC_jspmvc.rar[其他类别]jsp+servlet+javaBean实现MVC_jspmvc.rar[其他类别]jsp+servlet+javaBean实现MVC_jspmvc.rar[其他类别]jsp+servlet+javaBean实现MVC_jspmvc.rar[其他...
在"jsp+servlet+javaBean实现MVC_jspmvc.zip"这个压缩包中,我们可以期待找到以下内容: - JSP文件:包含HTML结构和嵌入的Java代码或JSTL标签,用于展示用户界面。 - Servlet文件:实现了HTTP请求处理逻辑,通常包括...
Servlet+JSP+JavaBean(MVC)模式适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 Servlet+JSP、JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此...
Java编程项目实战:jsp+servlet+javaBean实现MVC; Java编程项目实战:jsp+servlet+javaBean实现MVC; Java编程项目实战:jsp+servlet+javaBean实现MVC; Java编程项目实战:jsp+servlet+javaBean实现MVC; Java编程项目...
编程项目实战Java-jsp:jsp+servlet+javaBean实现MVC; 编程项目实战Java-jsp:jsp+servlet+javaBean实现MVC; 编程项目实战Java-jsp:jsp+servlet+javaBean实现MVC; 编程项目实战Java-jsp:jsp+servlet+javaBean...
(基于MVC模式下web端的开发,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 Servlet+JSP+JavaBean模式程序各个模块之间层次清晰) 仅供初学者参考,内有文档注释,部分细节不懂者,留言即可
javaWEB项目:新生管理系统(Servlet+JSP+JavaBean) javaWEB项目:新生管理系统(Servlet+JSP+JavaBean) javaWEB项目:新生管理系统(Servlet+JSP+JavaBean) javaWEB项目:新生管理系统(Servlet+JSP+JavaBean) ...
Jsp+Servlet+JavaBean 实现MVC模式的留言本 声明:本留言本所有源代码开源,使用者可以自由修改和传播,但仅限于非商业用途。 作者:梁龙 博客:http://www.lianglong.net.cn 由于这是本人学习JAVA的第一个项目,...
登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+...
在本文中,我们将深入探讨如何使用JavaEE技术栈,包括JSP、Servlet和JavaBean,来构建一个简单的在线留言板系统。这个系统的核心功能是允许用户提交留言并展示其他用户的留言。我们将从整体架构、关键组件和技术原理...
MySQL分页JSP实现Servlet+JavaBean+JSP三级架构 本文档对MySQL分页技术进行了总结,讨论了在JSP实现中使用Servlet+JavaBean+JSP三级架构的分页技术的实现方式。文章首先讨论了分页技术的重要性,并且提出了一个基本...