标签:
背景:Struts1是一个高度成熟的框架,运行效率高,但其致命缺陷在于与JSP/Servlet的耦合非常紧密,因而导致了一些严重问题。其次,Struts1与Servlet API的严重耦合,使应用难以测试;Struts1代码严重依赖Struts1 API,属于侵入式框架。由于其种种局限性,才有了Struts2的诞生。
Struts2与1差别巨大,Struts2以WebWork为核心,采用拦截器的机制处理用户请求,这样的设计使业务逻辑控制器与Servlet API完全脱离开。
Part 1 Struts2快速入门
1. 安装与配置
下载struts-2.3.15.1-all.zip,这里采用该版本,打开后有文件夹:apps 实例代码 ,docs 帮助文档,lib jar包,src 源代码文件;
2.开始写项目
1.添加jar包;(可直接复制实例项目,复制jar)
2.在web.xml中加入struts2的 filter ,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9",version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www/w3/org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <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> <welcome-file-list> <welcome-file>index.html<welcome-file> </welcome-file-list> </web-app>
从配置文件中,可以看出, Struts2 其实就是一个filter
3.在src文件夹下添加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> <package name="default" namespace="/" extends="struts-default"> <action name="index"> <result>/index.jsp</result> </action> </package> </struts>
4. 写jsp页面,或html页面;写java bean, action, dbutils(此实例为简明,省略了这些内容);
最简单的示例,在web文件夹下写 index.jsp
<%@page language="java" import="java.util.*" pageEncoding="UTF-8"> <% 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>My JSP ‘index.jsp‘ starting page</title> </head> <body> First One </body> </html>
测试:部署tomcat或直接使用preview server,http://localhost:port/项目名/index.adtion
注意, .action
Part 2 Struts2工作流程和核心概念
Struts2使用了WebWork的设计核心(XWork),在内部使用拦截器处理用户请求,从而允许用户业务逻辑控制器和ServletAPI分离。Struts2内部是一个MVC架构,Struts2 的核心控制器是FilterDispatcher,客户端发送请求,而经过核心控制器FilterDispatcher处理,根据页面发送的请求,从而确定请求的是哪个action,而action是MVC中的Model,最后确定返回哪个页面(html或jsp)
具体工作流程:
(1)浏览器发送请求;
(2)核心拦截器FilterDispatcher根据请求决定调用合适的action;
(3)拦截器自动对应运用通用功能;
(4)回调用action上的execute()方法;
(5)action的execute()方法处理信息结果输出到浏览器。
2)核心概念:当浏览器发送请求到Servlet容器时,会经历一系列Filter过滤器,这些过滤器包括ActionContextCleanUp,接着FilterDispatcher被调用,通过参考ActionMapper决定一个请求和一个Action关联。FilterDispatcher参考框架的配置文件管理,ActionProxy生成一个ActionInvocation,它负责执行命令,并负责查找适当的结果以和struts.xml中的action result相比较,调用一个在JSP或FreeMarker中绘制的模板。而Action是需要与struts.xml配置文件一起结合使用的,下面将详细讲述配置文件使用:
[1] struts.xml文件配置
先来个实例:
login.jsp
<%@page language="java" import="java.util.*" pageEncoding="utf-8"%> <% 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> <form action="login" method="post"> 用户名:<input type="text" name="uname"></br> 密码:<input type="password" name="pwd"></br> <input type="submit" value="登录"> </form> </body> </heml>
LoginAction类
public class LoginAction{ private String uname; private String pwd; public String getUname(){ return uname; } public void setUname(String uname){ this.uname=uname; } public String getPwd(){ return pwd; } public void setPwd(String pwd){ this.pwd=pwd; } public String excute(){ if("JokerJason".equals(uname)&&"12345".equals(pwd)){ return "success"; } return "fail"; } }
(正在更新)
标签:
原文地址:http://www.cnblogs.com/jokerjason/p/5770743.html