码迷,mamicode.com
首页 > 其他好文 > 详细

Struts2 技术全总结 (正在更新)

时间:2016-08-14 19:08:53      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

背景: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";
  }
}           

(正在更新)

Struts2 技术全总结 (正在更新)

标签:

原文地址:http://www.cnblogs.com/jokerjason/p/5770743.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!