Struts2学习笔记—1

Struts2概述

MVC原理

MVC(Model-View-Controller)是一种程序设计理念。常用的MVC框架有Struts,JSF,Taperstry,Spring MVC等
Struts拥有Struts1.x与Struts2.x
Struts1的MVC架构

Struts1的MVC架构中,各层结构功能如下:

  • 控制器
    ActionServlet充当控制层,将请求分发配置在struts.cfg.xml中,当客户端发送HTTP请求时,由中央控制器对请求进行分发处理,处理之后,返回ActionForward将请求转发到请求指定的JSP页面,对客户端进行响应
  • 模型
    由ActionForm及业务Java Bean实现,ActionForm对表单数据进行封装,它能够与网页表单进行交互并传递数据,Java Bean处理真正的业务请求,由Action进行调用
  • 视图
    用户看到的并与之交互的界面,即Java Web应用的外观,Struts标签库对Jsp进行了增强,通过标签库与JSP实现视图

Struts2

Struts2是一种全新的框架,相较于Struts1,结构体系有很大的差别,Struts2是WebWork于Struts结合的产物。

Struts2的结构体系

Struts2是基于WebWork开发的Web框架。
Struts2通过过滤器拦截需要处理的请求,客户端发出HTTP请求时,需要经过一个过滤器链,包括ActionContextClearUp过滤器、Web应用过滤器以及StrutsPrepareAndExecuteFilter过滤器,StrutsPrepareAndExecuteFilter是必须配置的。
当StrutsPrepareAndExecuteFilter被调用时,Action映射器会查找要调用的Action对象,并返回Action对象的代理,代理会从配置管理器中读取Struts2的struts.xml,然后调用指定的Action对象,在调用Action对象之前,经过Struts2的一系列拦截器。
当处理Action请求后,会将结果返回View,最后经过拦截器将请求回应给浏览器
即__HTTP请求--->StrutsPrepareAndExecuteFileFilter--->Action代理--->配置管理器--->struts.xml-->拦截器--->Action--->View--->拦截器--->HTTP响应__

Struts2入门

Struts2的开发包可以在 http://struts.apache.org 下下载,当前最新稳定版是2.3.24
Struts2的核心jar包

  • struts2-core-*.jar struts的核心类库
  • xwork-core-*.jar Xword的核心类库
  • ognl-*.jar Ognl表达式类库
  • commons-logging-*.jar Log4j支持类库
  • freemaker-*.jar Freemarker支持库
  • commons-io-*.jar IO操作类库
  • commons-fileupload-*.jar 文件上传类库
  • commons-lang-*.jar Apache

第一个struts2程序

  1. 新建一个web项目,导入上述的几个核心jar包
  2. 在web.xml中声明Struts2的过滤器
<?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"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
    <display-name>struts2</display-name>
    
    <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
  
    <!-- 拦截器过滤器的名称必须与映射中过滤器名称相同,过滤器映射是访问url时的地址是否交由过滤器过滤,
        /*表示一切url都交给过滤器过滤 -->
    <!-- Struts2过滤器 -->
    <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>
</web-app>
  1. 在项目源码处创建struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 包声明 -->
<!-- 通过name属性指定包名,namespace属性可以控制不同的访问规则,extends属性指定此包继承于struts-default -->
    <package name="com.exercise.struts" namespace="/" extends="struts-default">
    <!-- 用于定义Action对象,name属性指定访问此action的URL -->
        <action name="HelloWorld">
            <result>/helloWorld.jsp</result>
        </action>
    </package>
<!-- struts.xml允许含有多个,include里可以定义	 -->
<!--     <include file="example.xml"/> -->
</struts>

struts2的Action配置需要放置在包空间中,与Java中包的概念类似,一般情况下,包需要继承struts-default
4. 处理index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html >
<html>
<head>
<title>index</title>
</head>
<body>
<!-- 该链接指向的时刚才在Struts.xml中配置的action,该action的name属性为helloworld -->
<a href="helloworld.action">To Say Hello</a>
</body>
</html>

5.新建名称为helloWorld的jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<a>Hello,World</a>
</body>
</html>
  1. 将项目部署到tomcat上,会发现项目报错,原因是少导入了一个jar包,javassist.ClassPool,这个包在struts2的lib中是没有的,此时可以在app/struts-blank/WEB-INF/lib找到该jar包,启动即可。
  2. 打开浏览器,进入到项目首页

  3. 首先当点击首页中的超链接,该请求会被拦截器拦截,然后交由Action代理去处理,Action代理调用配置管理器,去读取struts.xml文件,其中我们配置的action的名字为helloworld,在demo中,没有处理任何数据,直接返回result,故而会跳转到helloWorld.jsp,在页面上展示Helloworld。
posted @ 2015-05-17 23:42  丨落灬小莫  阅读(151)  评论(0)    收藏  举报