JavaWeb框架-Struts2-1-Hello Struts2!

本文介绍了Struts2框架的基本概念,包括环境搭建步骤、三种创建Action的方法及其配置,并详细讲解了三种接收参数的方式。

话说:

世界之所以缤纷多彩,就在于百花齐放!Web框架世界也是如此。Hibernate有它的魅力,Struts2也自有特点。来来,亲爱的读者朋友,我们一起来揭开Struts2的面纱吧。

目录:


一、整体架构

二、环境搭建
1、下载包
2、新建Maven项目(Web项目)
3、3种方式创建Action
4、配置struts.xml
5、配置web.xml

三、3中接收参数方式

四、总结


一、整体架构

开发环境:IDEA(2017.2.5)
最好新建Maven项目,Web项目也是可以的。
笔者经验,在MyEclipse、Eclipse中创建Maven项目都是一道坎,容易遇到各种报错,但是在IDEA中,It’s so Easy!

这里写图片描述

如果是web项目,把struts.xml放到src下即可,根据下载的包,把对应的包复制到lib下即可,其他跟Maven一模一样。

二、环境搭建

1、下载包

http://struts.apache.org/download.cgi#struts2513
下载那个-all的包。里面包含了所有。
作用是,方便在里面找到struts.xml配置文件,直接可以“拿来主义”。

这里写图片描述

2、新建Maven项目(Web项目)

此处省略100字……
如果读者对IDEA创建Maven项目有疑问,请参考笔者笔记:
http://note.youdao.com/noteshare?id=99b36d0e601fb56725fb7a7acece4aae&sub=D36A8FC839854BEE8C17FD6793E53BA3

3、3种方式创建Action

共3中方式创建Action,常用法一,简单嘛,什么也不用继承或者实现。Action作用类似我们的Servlet,主要实现业务逻辑、接收参数及页面跳转。


法一:普通Java类,编写public String execute() {}方法(要严格按照这个规矩来奥);

法二:实现Action接口,重写execute()方法;

法三:继承ActionSupport类,重写execute()方法。


package com.hmc.struts2.action;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

/**
 * User:Meice
 * 2017/10/29
 */
public class HelloAction extends ActionSupport{
   /* @Override
    public String execute() throws Exception {
        System.out.println("法三:继承ActionSupport,重写execute方法...");
        return "success";
    }*/
    //法二:实现Action接口,实现其中方法.注意导入的包:com.opensymphony.xwork2.Action;
    /*public String execute() throws Exception {
        System.out.println("法二:实现Action接口,实现execute方法...");
        return "success";
    }
*/

    //法一:自己写一个方法:这个方法按照以下格式,返回String类型,方法名:execute,不能自作主张奥!
    //默认方法名就叫做execute(),若要自定义,用method属性定义
    public String execute() {
        System.out.println("法一:自己写execute方法;execute Hello .....");
        return "success";
    }

}

4、配置struts.xml

<?xml version="1.0" encoding="UTF-8" ?>

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

<struts>

    <package name="test" extends="struts-default">
        <!--namespace默认:/ -->
       <action name="hello" class="com.hmc.struts2.action.HelloAction">
           <!--结果跳转,默认使用转发dispatcher-->
            <result name="success">/hello.jsp</result>

       </action>

        <!--Action接受参数法一:属性方法-->
        <action name="login" class="com.hmc.struts2.action.LoginAction" method="login">
            <result name="success">/login_success.jsp</result>
        </action>

        <!--Action接受参数法二:JavaBean-->
        <action name="login2" class="com.hmc.struts2.action.LoginAction2" method="login2">
            <result name="success">/login_success.jsp</result>
        </action>

        <!--Action接受参数法三:ModelDriven-->
        <action name="login3" class="com.hmc.struts2.action.LoginAction3" method="login3">
            <result name="success">/login_success.jsp</result>
        </action>

    </package>


</struts>

5、配置web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!--配置过滤器-->
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

这个类,是Struts2规定死的,我们不用死记,只需要记住类:StrutsPrepareAndExecuteFilter,然后写一个测试类,自动导入即可。

这个过滤器有什么用呢?以前我们配置Servlet的时候,直接在web.xml中配置,所以默认和页面请求建立了关系。但这里我们在struts.xml中配置,怎么和页面建立联系呢?就是这个过滤器在起作用。
后续测试也可以发现,内置已经处理了中文编码问题,帅气!

三、3中接收参数方式

struts2有3中方式接收参数,最好做个对比表。原谅在下比较懒惰,所以嘛,看代码喽。


法一:属性方式接收
法二:JavaBean方式接收
法三:ModelDriven方式


三种方式法二、法三用得多。

这里分别用:LoginAction、LoginAction2、LoginAction3来实现三种接收参数的方式,对应的页面是:login.jsp、login2.jsp、login3.jsp
struts.xml不在重复,请读者参考创建Action的struts.xml配置。3中方法都可以输出username、pwd、及age。

1、法一:属性方式接收

LoginAction

package com.hmc.struts2.action;

/**
 * User:Meice
 * 2017/10/29
 */
public class LoginAction {
    private String username;
    private String pwd;
    private int age;
    public String login() {
        System.out.println("登陆了...");
        System.out.println("用户名:"+username+"用户密码: "+pwd+"年龄:  "+age);
        return "success";
    }

    public String getUsername() {
        return username;
    }

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

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

login_success.jsp
三种方法共用此界面。

<%--
  User: Meice
  Date: 2017/10/29
  Time: 16:19
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登陆成功</title>
</head>
<body>
    恭喜?登陆成功!
</body>
</html>

login.jsp

<%--
  User: Meice
  Date: 2017/10/29
  Time: 16:19
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户登陆</title>
</head>
<body>
   <form action="login2" method="post">
       <table>
           <tr>
               <td>用户名</td>
               <td><input type="text" name="username"></td>
           </tr>
           <tr>
               <td>密码</td>
               <td><input type="password" name="pwd"></td>
           </tr>
           <tr>
               <td>年龄</td>
               <td><input type="text" name="age"></td>
           </tr>
           <tr>
               <td colspan="2"><input type="submit" value="确认"/></td>
           </tr>
       </table>
   </form>
</body>
</html>

2、法一:JavaBean方式接收

这个最主要的特点是,把页面参数封装到一个实体类中,页面通过对象.属性来建立联系。

LoginAction2

package com.hmc.struts2.action;

import com.hmc.struts2.model.User;

/**
 * User:Meice
 * 2017/10/29
 */
public class LoginAction2 {
    private User user;
    public String login2() {
        System.out.println(user);
        //User{username='小美', pwd='123', age=0}
        return "success";
    }

    public User getUser() {
        return user;
    }

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

配置struts.xml(见最上面)

login2.jsp

<%--
  User: Meice
  Date: 2017/10/29
  Time: 16:19
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户登陆</title>
</head>
<body>
   <form action="login2" method="post">
       <table>
           <tr>
               <td>用户名</td>
             <%--这里user要用action里面定义的形参--%>
               <td><input type="text" name="user.username"></td>
           </tr>
           <tr>
               <td>密码</td>
               <td><input type="password" name="user.pwd"></td>
           </tr>
           <tr>
               <td>年龄</td>
               <td><input type="text" name="user.age"></td>
           </tr>
           <tr>
               <td colspan="2"><input type="submit" value="确认"/></td>
           </tr>
       </table>
   </form>
</body>
</html>

注意,页面name=”user.username”

3、法三:ModelDriven方式

LoginAction3

package com.hmc.struts2.action;
import com.hmc.struts2.model.User;
import com.opensymphony.xwork2.ModelDriven;

/**
 * User:Meice
 * 2017/10/29
 */
public class LoginAction3 implements ModelDriven<User> {
    private User user;
    public User getModel() {

        if(user ==null) {
            user = new User();
        }
        return user;
    }

    public String login3() {
        System.out.println(user);
        return "success";
    }
}

配置struts.xml(见最上面)

login3.jsp

<%--
  User: Meice
  Date: 2017/10/29
  Time: 16:19
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户登陆</title>
</head>
<body>
   <form action="login3" method="post">
       <table>
           <tr>
               <td>用户名</td>
             <%--这里user要用action里面定义的形参--%>
               <td><input type="text" name="username"></td>
           </tr>
           <tr>
               <td>密码</td>
               <td><input type="password" name="pwd"></td>
           </tr>
           <tr>
               <td>年龄</td>
               <td><input type="text" name="age"></td>
           </tr>
           <tr>
               <td colspan="2"><input type="submit" value="确认"/></td>
           </tr>
       </table>
   </form>
</body>
</html>

这里页面属性可以恢复我们之前的习惯了。
使用ModelDriven,要news这个对象。

四、总结


1、Struts2给我们提供了获取参数的一个全新的视角:不用req.getParameter()等,页面跳转等都是不同于Servlet的全新方式;

2、web.xml中的过滤器,不用我们处理中文编码问题啦;

3、没有对比,就木有伤害。所以,博观而约取,项目中灵活运用即可。


好了,开饭喽!下期再会!

六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)内容概要:本文档围绕六自由度机械臂的ANN人工神经网络设计展开,详细介绍了正向与逆向运动学求解、正向动力学控制以及基于拉格朗日-欧拉法推导逆向动力学方程的理论与Matlab代码实现过程。文档还涵盖了PINN物理信息神经网络在微分方程求解、主动噪声控制、天线分析、电动汽车调度、储能优化等多个工程与科研领域的应用案例,并提供了丰富的Matlab/Simulink仿真资源和技术支持方向,体现了其在多学科交叉仿真与优化中的综合性价值。; 适合人群:具备一定Matlab编程基础,从事机器人控制、自动化、智能制造、电力系统或相关工程领域研究的科研人员、研究生及工程师。; 使用场景及目标:①掌握六自由度机械臂的运动学与动力学建模方法;②学习人工神经网络在复杂非线性系统控制中的应用;③借助Matlab实现动力学方程推导与仿真验证;④拓展至路径规划、优化调度、信号处理等相关课题的研究与复现。; 阅读建议:建议按目录顺序系统学习,重点关注机械臂建模与神经网络控制部分的代码实现,结合提供的网盘资源进行实践操作,并参考文中列举的优化算法与仿真方法拓展自身研究思路。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值