Struts 2框架:基础

Struts 2是一种MVC框架。html

Struts 2框架中的处理大概分为如下几个步骤:java

  1. 客户端初始化一个指向Servlet容器的请求;web

  2. 这个请求通过一系列的过滤器(Filter)后,核心控制器FilterDispatcher根据请求询问ActionMapper来决定这个请求是否须要调用某个Action。若是ActionMapper决定须要调用某个ActionFilterDispatcher把请求的处理交给ActionProxyActionProxy经过Configuration Manager询问框架的配置文件,找到须要调用的Action类。数据库

  3. ActionProxy建立一个ActionInvocation的实例。ActionInvocation实例使用命令模式调用,回调Actionexecute方法,该方法先获取用户请求参数,而后执行某种数据库操做,既能够是将数据保存到数据库,也能够从数据库中检索信息。由于Action只是一个控制器,它会调用业务逻辑组件来处理用户的请求。在调用Action的过程先后,将涉及到相关拦截器的调用。apache

  4. Action执行完毕后,ActionInvocation会根据 struts.xml 中的配置找到对应的返回结果并将其输出到浏览器中,能够是HTML页面、图像,也能够是文档。此时支持的视图技术很是多。segmentfault

实现一个Struts 2应用,只须要配置 struts.xml 文件,编写Action代码和相关视图资源文件。浏览器

请输入图片描述


struts 2配置文件:

配置文件是用户视图(View)和业务逻辑模块(Model)Action之间的桥梁。app

  • 配置Action的 struts.xml 文件,
  • 配置Struts 2全局属性的 struts.properties 文件

一个实例:

配置好开发环境,安装好Struts(将所须要的jar包放入相应位置)。框架

web.xml文件

<?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_2_5.xsd" id="WebApp_ID" version="2.5">

  <display-name>struts 2.0 应用项目</display-name>

  <filter>
    <filter-name>struts2</filter-name>
    <!-- filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class-->
    <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.jsp</welcome-file>
  </welcome-file-list>
</web-app>

设计动做控制类

package com.struts2.app;

public class UserLoginAction {
    //下面是Action用于封装用户请求参数的两个属性
    private String name;
    private String pass;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String password) {
        this.pass = password;
    }

    //处理用户请求的execute方法
    public String execute() throws Exception {
        if("admin".equals(getName()) && "12345".equals(getPass())) {
            return "success";
        }
        else if(getName()==null || getPass()==null) {
            return "input";
        }
        else return "error";
    }
}

配置Action类: Struts.xml

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

<!--include file="struts-default.xml" /-->

    <!-- Struts 2 的Action必须放在指定的包空间下定义 -->
    <package name="struts" extends="struts-default">

        <action name="UserLogin" class="com.struts2.app.UserLoginAction">
            <result name="error">/error.jsp</result>
            <result name="success">/welcome.jsp</result>
            <result name="input">/index.jsp</result>
        </action>

    </package>

</struts>

设计视图:JSP视图

  • index.jsp
<%@page language="java" import="java.util.*" pageEncoding="GBK" %>

<html>
<head>
    <title>Struts 2 Demo</title>
</head>
<body>
    <form action="UserLogin.action" method="post">
        <table align="center">
            <caption><h4>用户登陆信息</h4></caption>
            <tr>
                <td>用户名:<input type="text" name="name" /></td>
            </tr>
            <tr>
                <td>密 码:<input type="password" name="pass" /></td>
            </tr>
            <tr align="center">
                <td colspan="2"><input type="submit" value="登 录" /><input type="reset" value="清 除" /></td>
            </tr>
        </table>
    </form>
</body>
</html>

  • welcome.jsp
<%@page language="java" import="java.util.*" pageEncoding="GBK" %>
<%@taglib prefix="s" uri="/struts-tags"%>

<html>
<head>
    <title>登陆成功页面</title>
</head>
<body>
    您已成功登陆本系统!
    <li><a href="<s:url action="UserLogin" />">从新登陆</a></li>
    <br>
</body>
</html>

  • error.jsp
<%@page language="java" import="java.util.*" pageEncoding="GBK" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<% String path=request.getContextPath(); String basePath=request.getScheme()+"://"+request.getServerName()+
    ":"+request.getServerPort()+path+"/"; %>

<html>
<head>
    <base href="<%=basePath%>">
</head>
<body>
    您输入的用户名或密码错误,请从新输入
    <br><li><a href="<s:url action="UserLogin" />">Sign on</a></li>
</body>
</html>

实例过程总结

login.jsp (页面内跳转地址,struts拦截) ===> struts.xml (指定并调用Action类,以及不一样结果下返回的视图界面)===>UserLoginAction.java (execute方法,返回值)===>struts.xml (得到返回值,调用视图)jsp

能够看出,整个过程和servlet十分类似。只不过servlet使用web.xml映射java文件和路径,这里是用struts.xml(固然前提是在web.xml中有struts配置)。另外,servlet是直接用java文件返回其视图的;而这里经过三个jsp视图文件处理不一样状况下的视图。这样,即将视图层与控制层分开。

相关文章
相关标签/搜索