Struts2的经文入门

二:Struts2与其优势

Struts 2是三个MVC框架,以WebWork框架的安插性思想为着力,吸收了Struts 1的有些优点

Struts 2拥有越发广泛的前景,本人功用强大,还对别的框架下开发的次第提供很好的包容性

 

Struts官网

 

http://struts.apache.org/

下载下来后的包:

 

 

apps目录:Struts2示例应用程序

 

docs目录:Struts2指南、向导、API文档

 

lib目录:Struts 2的发行李包裹及其重视包

 

src目录:Struts 2项目源代码

四:第一个Struts2程序

 
已我们无限熟习的报到为例

1.新建叁个web项目

2.引入所需jar包

3.在web.xml配置文件中安插我们的过滤器(使用Struts2的主导,不可忘却,在后边会详解)

PHP 1PHP 2

<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
    <display-name></display-name>
    <!--  -->
    <filter>
        <filter-name>struts2</filter-name>
        <!-- 使用Struts2的核心类库 -->
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <!-- 拦截所有的action -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>
</web-app>

View Code

4.预备大家须要的实体类(用户)

PHP 3PHP 4

package cn.work.entity;

//用户实体类
public class User {
    private String username;// 用户名

    private String password;// 密码

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

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

View Code

在Struts第22中学,能够一贯运用Action类的脾气来接受用户的输入,即当表单提交时,Struts2活动对请求参数进行转移,并对负有同等名字的Action属性举办赋值(通过setter方法)

在Struts第22中学,系统不会识别哪些属性用于吸收接纳请求参数,哪些属性用于出口处理结果。只要对质量设置了
setter和getter方法,该属性就能够被机关处理。

其它,Action类中还足以选择复杂的质量,如用户自定义的类,数组,集合对象等。

5.在src下创办名称为struts.xml的安排文件

 

PHP 5PHP 6

<?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>

    <constant name="struts.ui.theme" value="simple" />
    <constant name="struts.devMode" value="true" />
    <!-- package元素用于定义Struts2处理请求的逻辑单元 -->
    <package name="default" namespace="/" extends="struts-default">
        <action name="login" class="cn.work.action.LoginAction2">
            <result name="success">
                success.jsp
            </result>
            <result name="login">
                login.jsp
            </result>
            <result name="input">login.jsp</result>
        </action>
    </package>


</struts>

View Code

 

1.package元素用于定义Struts2拍卖请求的逻辑单元,name属性为供给的同时唯一,用来内定包的称号(被别的包引用),extends属性类似java的extends关键字,用于钦定要推而广之的包。

2.action成分用以配置Struts2框架的“工作单元”Action类。action元素将二个呼吁的U大切诺基I(action的名字)对应到二个Action类。name属性是少不了的,用来代表action的名字,class属性可选,用于设定Action类的全限定名。

3.result成分用来设定Action类处理完结后,系统下一步将要做什么样。name属性表示result的逻辑视图名称,必需与Action类重返的字符串进行匹配,而result成分的值表示与逻辑视图名称对应的大体财富之间的照射,用来钦命这几个结果对应的实在财富的地方。

注:在struts.xml文件中,每三个result属性的name名称都要与Action中回到的逻辑名称保持一致,否则,程序在运维时将不能够正确运维。

6.成立3个后续了Action接口的LoginAction类

PHP 7PHP 8

package cn.work.action;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;


import cn.work.entity.User;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;


public class LoginAction extends ActionSupport implements Action {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private User user;


    private List<String> list;

    public List<String> getList() {
        return list;
    }
    public void setList(List<String> list) {
        this.list = list;
    }
    public String execute() throws Exception {
        if (user.getUsername().equals("张总")&&user.getPassword().equals("521")) {

            /**
             * 1.Struts2访问ServletAPI对象
             * 方式一:
             **/
            //获取session
            Map<String, Object> session = ActionContext.getContext().getSession();            
            //将值存入session
            session.put("username",user.getUsername());

            return SUCCESS;
        }else {

            return LOGIN;
        }        
    }

    public User getUser() {
        return user;
    }


    public void setUser(User user) {
        this.user = user;
    }

    //数据校验
    public void validate(){
        if (this.user.getUsername().length()==0) {
            addFieldError("name2", "用户名不能为空");            
        }
        if (this.user.getPassword().length()==0) {
            addFieldError("pwd2", "密码不能为空");
        }
    }



}

View Code

7.用以登录的login.jsp页面

PHP 9PHP 10

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>登录页面</title>
</head>

<body>
    <div>
        <h1>用户登录</h1>
        <!-- 用于输出验证信息 -->
        <s:fielderror />
        <!-- 表单的提交 -->        
        <s:form action="login.action" method="post">
            用户名:<s:textfield name="user.username" type="text" /> 
            密码:<s:textfield  name="user.password"type="password" /> 
            <s:submit type="submit" value="登录"/>
        </s:form>
    </div>
</body>
</html>

View Code

8.成功的success.jsp页面

PHP 11PHP 12

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>成功页面</title>
</head>
<body>
    <h1>登录成功</h1>
    <div>欢迎您,${session.username}</div>
    <s:property value="user.username" />
    <s:property value="user.password" />
</body>
</html>

View Code

 

 

先这么呢!这便是Struts2的入门,未来再持续深究Struts2的奥秘。。。

 

一:Struts2的来源与背景

在询问Struts2此前大家先来聊聊Struts1,大家都知晓在相当长的一段时间内,全部的MVC框架中,Struts1他是居于一个一流大腕的地点,无论是从市镇角度和采纳的用户的数量这么些角度而言,Struts1它占用相对地位,对于其余的MVC框架都不能够和她比美,不过Struts1当作一款不错的MVC框架他能够很好的兑现将控制与作业逻辑相分离,但她自己也设有一定的后天不足。

  1.表现层匡助单一:

 
 Struts1框架只扶助JSP作为其突显层使用,而众多的Java应用,在展现层技术采纳时并不一定值使用JSP一种技术,恐怕会用到FreeMarker,PHP之类的技巧等。

 2.对Servlet API的依赖:

   Struts1框架是基于Model II
方式开发而成的,因而他在支付中会运用到大方的Servlet
API,而且我们都通晓Servlet API
是要依靠于WEB容器实行早先化的,从而他尤其对WEB容器实行重视。

 3.不便宜代码重用:

 
 在Struts1费用的代码中除了本人自定义的类外,还必须运用Struts第11中学的有些类,那样会带来众多的流弊,与Struts1的类耦合在共同的代码很难再其余系统中开始展览一次重用。

   
所以依据以上Struts框架在筹划上的弱点,Struts2以WebWork的统一筹划思想为骨干,WebWork固然并未Struts1名气大而是在设计上他防止了S投入他说的坏处,它更强调连串里头的松耦合,使用拦截
      器来落到实处控制,由于不在注重Web容器,从而消除了框架对Servlet
API紧密耦合。所以Strut2是收到了Struts1的局地优点,建立了叁个匹配Struts1和WebWork的MVC框架。

三:Struts2的初体验

1.在类型中引入Struts2

 

非得引入的包

 

struts2-core.jar——Struts2的主题包

 

xwork-core.jar——Command方式框架,WebWork和Struts2都依照xwork

 

commons-logging.jar——Java日志工具类包

 

freemarker.jar——模板引擎,四个依照模板生成文本输出的通用工具

 

ognl.jar——Object-Graph Navigation
Language,表明式语言,用来博取和安装Java对象属性

 

 

 

可选包

 

antlr.jar——语法分析器

 

aopalliance.jar——AOP缔盟标准接口

 

classworlds.jar——class对象管理

 

commons-beanutils.jar——Bean处理工科具类包

 

commons-chain.jar——流程链处理模型,Struts2甩卖HTTP请求处理的基本功机制

 

commons-collections.jar——Commons项目组中的1个各类集合类和聚集工具类的包裹

 

commons-digester.jar——解析xml转换成Java对象

 

commons-fileupload.jar——文件上传

 

commons-io.jar——IO工具类封装

 

PHP,commons-lang.jar——康芒斯项目中用来处理Java基本对象方法的工具类包

 

commons-logging-api.jar——Java常用日志工具调用,如通过API调用Log4J

 

commons-validator.jar——Java对象验证框架

 

json-lib.jar——用来映射JSON(JavaScript Object
Notiation是一种文本格式)到Java Bean的Java类库

 

oro.jar——文本处理工科具

 

sslext.jar——Struts框架的3个恢弘能够让开发者配置Web应用程序在http与https协议时期开始展览机动转换(需安插)

 

 

插件包

 

struts2-embeddedjsp-plugin.jar——嵌入式JSP插件,能够让您从类路径或然Jar包里面调用JSP页面(官网翻译差不多是以此意思)

 

struts2-convention-plugin.jar——用来贯彻Struts2零布局的插件包,能够组成那东西实现项目REST风格应用。

 

struts2-json-plugin.jar——Apache提供的JSON插件包

 

相关文章