- 浏览: 285666 次
- 性别:
- 来自: 哈尔滨
文章分类
最新评论
-
netfengxia:
这个是Mybatis哦. 是一个ORM框架, 这里展示的是My ...
mybatis merge 语句使用 -
MILLETS:
好像没有效果
jsp页面打印、预览、设置实现方案 -
evic520:
mysql有merge into的用法?是不是标题错了 楼主? ...
mybatis merge 语句使用 -
winner_king:
解决问题
pager-taglib分页中文乱码问题 -
Renee涟漪:
...
SVN搭建
Struts2
1.1 Struts2概述
Struts 2是Struts的下一代产品。是在 struts 和WebWork的技术基础上进行了合并,全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。因为Struts 2和Struts 1有着太大的变化,但是相对于WebWork,Struts 2只有很小的变化。
1.2 Struts2体系结构
Struts2的体系与Struts1体系的差别非常大,因为Struts2使用了WebWork的设计核心,而不是Struts1的设计核心。Struts2中大量使用拦截器来处理用户的请求,从而允许用户的业务逻辑控制器与Servlet API分离。图一是Struts2的体系结构简图。
Struts2框架的大概处理流程如下:
1. 加载类(FilterDispatcher)
2. 读取配置(struts配置文件中的Action)
3. 派发请求(客户端发送请求)
4. 调用Action(FilterDispatcher从struts配置文件中读取与之相对应的Action )
5. 启用拦截器(WebWork拦截器链自动对请求应用通用功能,如验证)
6. 处理业务(回调Action的execute()方法)
7. 返回响应(通过execute方法将信息返回到FilterDispatcher)
8. 查找响应(FilterDispatcher根据配置查找响应的是什么信息如:SUCCESS、ERROER,将跳转到哪个jsp页面)
9. 响应用户(jsp--->客户浏览器端显示)
1.3 Struts2和Struts1的对比
通过上面对Struts2体系结构的了解,我们发现Struts2对Struts1进行了巨大的改进。主要表现在如下几个方面:
1. 在Action的实现方面:Struts1要求必须统一扩展自Action类,而Struts2中可以是一个普通的POJO。
2. 线程模型方面:Struts1的Action工作在单例模式,一个Action的实例处理所有的请求。Struts2的Action是一个请求对应一个实例。没有线程安全方面的问题。
3. Servlet依赖方面:Struts1的Action依赖于Servlet API,比如Action的execute方法的参数就包括request和response对象。这使程序难于测试。Struts2中的Action不再依赖于Servlet API,有利于测试,并且实现TDD。
4. 封装请求参数:Struts1中强制使用ActionForm对象封装请求的参数。Struts2可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。
5. 表达式语言方面:Struts1中整合了EL,但是EL对集合和索引的支持不强,Struts2整合了OGNL(Object Graph NavigationLanguage)。
6. 绑定值到视图技术:Struts1使用标准的JSP,Struts2使用“ValueStack”技术。
7. 类型转换:Struts1中的ActionForm基本使用String类型的属性。Struts2中使用OGNL进行转换,可以更方便的使用。
8. 数据校验:Struts1中支持覆盖validate方法或者使用Validator框架。Struts2支持重写validate方法或者使用XWork的验证框架。
9. Action执行控制的对比:Struts1支持每一个模块对应一个请求处理,但是模块中的所有Action必须共享相同的生命周期。Struts2支持通过拦截器堆栈为每一个Action创建不同的生命周期。
1.4 WebWork和Struts2的对比
Struts和Webwork同为服务于Web的一种MVC框架,从某种程度上看,Struts2是从WebWork2上升级得到的。甚至Apache的官方文档也讲:WebWork2到Struts2是平滑的过渡。我们甚至也可以说Struts2就是WebWork2.3而已。在很多方面Struts仅仅是改变了WebWork下的名称。Struts2对应的有自己的标签,并且功能强大。Webwork也有自己的标签。在2005年12月,WebWork与Struts Ti决定合拼, 再此同时, Struts Ti 改名为 Struts Action Framework 2.0,成为Struts真正的下一代。
1.5 Struts2 五种默认返回类型名
ActionSupport基类中定义了五个标准的返回值 ,当然我们可以自己随意定义返回的名字
String SUCCESS = "success"; //默认是 SUCCESS 类型
String NONE = "none";
String ERROR = "error";
String INPUT = "input";
String LOGIN = "login";
1.6 Struts2实例
实例基于Strtus2.2.1版本。
1. 第一步创建web应用程序
点击Finish按钮,完成web应用程序创建。 接下来我们测试一下web应用程序是否创建成功。 OK web应用程序创建成功。 1. 第二步 导入Struts2.2.1所需包 将所有包复制到web项目的lib目录下面: 接下来我们在web应用项目中添加struts2配置,web.xml增加代码如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <!-- 如果是2.1.3之前的版本,用org.apache.struts2.dispatcher.FilterDispatcher, 否则,用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilte --> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
接下来我们在web应用项目src下建立struts.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="hello" extends="struts-default">
<action name="helloAction" class="net.hello.action.HelloAction" method="hello">
<result name="success">/jsp/hello/result.jsp</result>
<result name="error">/jsp/system/error.jsp</result>
</action>
</package>
</struts>
建立hello.jsp页,内容如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
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>你好</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>
<s:form action="helloAction" >
<s:textfield name="strTemp" label="输入内容"/>
<s:submit name="helloSubmit" value="提交" />
</s:form>
</body>
</html>
建立result.jsp页,内容如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<%
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>结果</title>
</head>
<body>
<s:property value="strTemp" default="未知错误" />
</body>
</html>
建立HelloAction.java页,内容如下:
package net.hello.action;
import com.opensymphony.xwork2.ActionSupport;
/**
* @项目名:struts2.1.1
* @包名:net.hello.action
* @文件名:Hello.java
* @日期:Jun 14, 2011 4:22:02 PM
* @备注:
* @作者:apple
*/
public class HelloAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private String strTemp;
private String strMsg;
private String strUrl;
public String hello()
{
String reString="error";
if(this.strTemp!=null&&!this.strTemp.equals(""))
{
reString="success";
}
else
{
this.strMsg="输入的内容为空";
this.strUrl="jsp/hello/hello.jsp";
}
return reString;
}
public String getStrTemp() {
return strTemp;
}
public void setStrTemp(String strTemp) {
this.strTemp = strTemp;
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
public String getStrMsg() {
return strMsg;
}
public void setStrMsg(String strMsg) {
this.strMsg = strMsg;
}
public String getStrUrl() {
return strUrl;
}
public void setStrUrl(String strUrl) {
this.strUrl = strUrl;
}
}
接下来我们发布项目来看下效果:
发表评论
-
struts2从2.2.3升级到2.3.15.1步骤
2014-05-19 10:41 10921. 删除以下jar包 asm-3.1.jar asm- ... -
mybatis merge 语句使用
2014-03-26 10:26 17819<update id="saveRechou ... -
多个SSH2 项目部署在Tomcat下,解决Tomcat启动失败问题
2013-04-24 09:30 2196我在tomcat下同时部署多个SSH2项目时,Tomcat启 ... -
WEB容器启动的时候,加载常用数据到内存
2012-04-26 09:00 1272项目中,有很多数据是基本上不变的,同时用到的频率还比较高,如果 ... -
给spring jdbctemplate加上一层“华丽外衣”-动态SQL&&SQL语句以文件存放
2012-04-26 08:58 1386用hibernate用得多了,忽然怀念起自己直接写sql 的轻 ... -
struts2文件下载
2012-04-01 09:19 1010public String download(){ ... -
spring JdbcTemplate文件写数据库,读取
2012-03-31 15:09 1742/** * 插入文件表数据 * @param tb ... -
用RowMapper封装查询结果自定义类(转)
2012-03-15 14:00 1610package object; import java. ... -
struts2标签详解与实例
2012-02-23 16:30 870见附件 -
java数据类型验证工具类
2012-02-23 16:29 4817package net.hlj.common.util; ... -
解决struts2get请求乱码问题
2012-02-13 11:02 10371、建立CharFilter.java package cn ... -
防跨域
2012-02-10 14:34 10381、建立CrossDomainFilter.java pac ... -
struts2中struts.xml非默认路径的配置
2012-01-31 14:33 10581) my-struts.xml置于WEB-INF/cla ... -
泛域名解析
2012-01-30 11:15 1198web.xml配置 <!-- webSite d ... -
(转)log4j详解与实战
2011-07-26 08:57 883log4j是一个非常强大的log记录软件,下面我们就来看看在项 ... -
模拟spring功能
2011-06-22 17:14 10411、建立User.java,内容如下: package ne ... -
spring配置文件获取方式
2010-12-24 11:33 11341、在src下(class): Applicatio ... -
配置Spring+hibernate使用ehcache作为second-level cache
2010-12-02 16:39 1027大量数据流动是web应用性能问题常见的原因,而缓存被广泛的 ...
相关推荐
apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tarapache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tarapache-hive-2.1.1-bin.tar apache-hive-2.1.1-...
02、hive-exec-2.1.1-cdh6.3.1.jar 03、hive-jdbc-2.1.1-cdh6.3.1.jar 04、hive-jdbc-2.1.1-cdh6.3.1-standalone.jar 05、hive-metastore-2.1.1-cdh6.3.1.jar 06、hive-service-2.1.1-cdh6.3.1.jar 07、libfb303-...
phantomjs-2.1.1-windowsphantomjs-2.1.1-windowsphantomjs-2.1.1-windowsphantomjs-2.1.1-windowsphantomjs-2.1.1-windowsphantomjs-2.1.1-windowsphantomjs-2.1.1-windowsphantomjs-2.1.1-windowsphantomjs-2.1.1-...
hive-jdbc-2.1.1-cdh6.2.0(ieda等jdbc链接hive2.1.1);cdh6.2.0安装的hive2.1.1
这个特定的压缩包"spark-2.1.1-bin-hadoop2.7.tgz.7z"是为Linux系统设计的,它包含了Spark 2.1.1版本,并且已经与Hadoop 2.7.2版本进行了预编译集成,这意味着它可以无缝地与Hadoop生态系统交互。 Hadoop 2.7.2是一...
这个压缩包文件“hive2.1.1-cdh6.3.2”包含了与CDH6.3.2兼容的Hive JDBC驱动程序和其他相关组件,这对于远程连接和操作Hive数据库至关重要。 首先,我们来看看包含的四个文件: 1. **hive-jdbc-2.1.1-cdh6.3.2-...
无界面浏览器。 phantomjs-2.1.1.-windows.rar
这使得它在需要大量浏览器实例的情况下特别高效,如负载测试或并行处理多个网页。 2. **JavaScript API**:PhantomJS提供了一个全面的JavaScript API,允许开发者通过JavaScript控制浏览器行为,比如导航、填写表单...
hive连接驱动
jeecg-framework_v2.1.1-20130130.zipjeecg-framework_v2.1.1-20130130.zipjeecg-framework_v2.1.1-20130130.zipjeecg-framework_v2.1.1-20130130.zipjeecg-framework_v2.1.1-20130130.zipjeecg-framework_v2.1.1-...
Hive 2.1.1 的 JDBC 连接驱动,CDH-6.3.1 版本。
hive JDBC jar包。由于项目使用,此jar包从国外下载费了好大劲,现分享给大家。 hive JDBC jar包。由于项目使用,此jar包从国外下载费了好大劲,现分享给大家。 hive JDBC jar包。由于项目使用,此jar包从国外下载费...
[2.1.1]--Lesson1Four-StepTranslationProce.srt
标题 "sdo-2.1.1-edr-spec.zipsdo-2.1.1-edr-spec.zip" 暗示我们关注的是一个名为 "sdo-2.1.1-edr-spec" 的版本,这可能是一个软件开发相关的规范或标准文档。"EDR" 可能代表 "Enterprise Data Representation" 或 ...
[2.1.1]--201)什么是算法分析.srt
[2.1.1]--201)什么是算法分析.mp4
本压缩包"spark-2.1.1-bin-hadoop2.7.tar.gz"是Spark 2.1.1与Hadoop 2.7兼容的二进制发行版,适用于那些已经部署或打算使用Hadoop 2.7环境的用户。 首先,我们来了解一下Spark的核心特性。Spark主要以Resilient ...
php_xdebug-2.1.1-5.2-vc6-ntsphp_xdebug-2.1.1-5.2-vc6-ntsphp_xdebug-2.1.1-5.2-vc6-ntsphp_xdebug-2.1.1-5.2-vc6-ntsphp_xdebug-2.1.1-5.2-vc6-ntsphp_xdebug-2.1.1-5.2-vc6-ntsphp_xdebug-2.1.1-5.2-vc6-nts
spark-2.1.1-bin-hadoop2.7.tar.bz2 亲测可用,自己入门学习使用的spark包
该资源为numpy-2.1.1-cp312-cp312-win_amd64.whl,欢迎下载使用哦!