博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2框架学习之一:Hello World程序
阅读量:6576 次
发布时间:2019-06-24

本文共 4883 字,大约阅读时间需要 16 分钟。

前言

Struts2框架Apache基金组织下的一个开源框架,基于MVC模式设计的Web应用开发框架。Struts 2是一个用于开发Java EE网络应用程序的开源Web应用框架,它利用并扩展了Java Servlet API,鼓励开发者采用MVC架构。目前struts2的最高版本是2.5(测试版)。

快速入门

1、下载和安装

可以从官网直接下载最新的struts开发包,官网有多个版本,使用的时候下载full版本即可。下载之后,只需要进行解压就可以使用了

2、Hello World程序

以下是建立Struts2的HelloWorld程序的详细步骤:

  • 在myeclipse中创建web project
  • 从下载的struts解压文件中导入jar包

    说明:这里的jar包为了简洁,建议直接从app目录下的struts2_blank.war中的lib目录下的jar包拷贝过来。这样做的原因是比较省事,自己找jar包太麻烦。
    其jar如下:

  • 编写web.xml,添加如下配置:
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
  • 编写action类文件。在src目录下创建HelloWorld.java文件,如下:
package example;public class HelloWorld {    private String meg;    public String getMeg() {        return meg;    }    public void setMeg(String meg) {        this.meg = meg;    }    public String execute(){        meg = "Hello World";        return "success";    }}
  • 配置structs.xml
/index.jsp
  • 编写jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%> struts2
  • 启动服务器,在浏览器中就可以看到hello world了。至此,hello world程序建立成功。

Struts2项目开发小结

Struts2的开发步骤主要分为:

  1. 准备jar包,建议直接使用struts-blank.war项目中的jar包,这是该版本最精简的jar包了
  2. 在web.xml中添加struts2过滤器的相关配置(这个步骤在整个项目开发过程中只会编写一次)
  3. 开发Action,针对不同的功能开发不同的Action。就像在Servlet中开发不同的Servlet类似
  4. 在struts.xml配置文件中添加上一步骤开发的Action的相关配置
  5. 编写相关的结果页面

struts2表单处理

我们继续在现在的项目基础上创建一个表单,用以说明struts2中如何接受和设置参数。

  • 创建login.jsp页面如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>          login.jsp    
用户名:
密码:
  • 创建LoginAction
package action;import bean.User;public class LoginAction {
private User user; public String execute() { if ("admin".equals(user.getUsername()) && "123".equals(user.getPassword())) return "success"; return "error"; } public User getUser() { return user; } public void setUser(User user) { this.user = user; }}
  • 配置Action
/success.jsp
/error.jsp
  • 创建User类
package bean;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;    }}
  • 编写success.jsp和error.jsp文件

success.jsp(省略部分代码)

    

,登录成功

error.jsp(省略部分代码)

    登录失败,请重新登录    返回

注意在表单name属性的书写格式:user.username。但是我们在LoginAction中并未使用任何初始化的方法构造User对象,那么值是怎么传递过来的呢?在Struts2中使用了自动绑定的机制,当LoginAction中获取user.username属性的时候,实际上会执行以下过程:

action.getUser();//当Struts2发现获取的User对象是null的时候,调用以下的语句action.setUser(new User());//通过调用User类的默认构造方法,实例化User对象之后,就可以设置username的属性的值了action.getUser().setUserName();

除了以上的方式,还可以使用Action属性获取jsp页面表单的值,就是form表单的属性写在Action中,然后添加set和get方法,同样可以获取。不过个人感觉这种方式没有上一种简洁,所以就不贴代码了。

Struts2访问Request、Session和Application对象

在Struts2中有多种方式可以访问以上三个对象,但可以分为两类:与Servlet API解耦的访问方式(也是个人推荐使用的方式,一目了然,简单清晰)和与Servlet API耦合的访问方式。下面介绍与Servlet API解耦的方式。

通过访问com.opensymphony.xwork2.ActionContext类可获取以上三个对象,方式如下:

//获取以上三个对象            request = (Map) ActionContext.getContext().get("request");            session = ActionContext.getContext().getSession();            application = ActionContext.getContext().getApplication();            //在request中放值            request.put("hello", "欢迎访问");            //在session放值            session.put("user", user);            //在Application中放值            Integer counter = (Integer) application.get("counter");            if(counter == null){                counter = 1;            }else{                counter++;            }            application.put("counter", counter);

然后在success.jsp页面访问以上对象设置的值:

    

${requestScope.hello },${sessionScope.user.username },访问量是${applicationScope.counter }

你可能感兴趣的文章
iOS7隐藏状态栏 status Bar
查看>>
Android中View绘制流程以及invalidate()等相关方法分析
查看>>
安装ESXI 5.5卡在LSI_MR3.V00解决方案
查看>>
在SQL Server 2014里可更新的列存储索引 (Updateable Column Store Indexes)
查看>>
centos 7 卸载 mariadb 的正确命令
查看>>
NSString 的常用操作
查看>>
poj 1274The Perfect Stall
查看>>
[Jmeter系列]Jmeter源码编译步骤(转)
查看>>
关于Windows API、CRT和STL二三事
查看>>
WordPress建站 新手入门
查看>>
让nodeJS支持ES6的词法----babel的安装和使用
查看>>
深入理解java异常处理机制
查看>>
python【1】-基础知识
查看>>
org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER
查看>>
Android Canvas drawText实现中文垂直居中
查看>>
PHP多进程编程(2):管道通信
查看>>
【HTML5】Canvas和SVG的区别
查看>>
李洪强经典面试题8
查看>>
wireshark怎么抓包、wireshark抓包详细图文教程
查看>>
mysql 源码调试方法
查看>>