Struts2框架学习之一:Hello World程序

简介:

前言

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过滤器 -->
    <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>
  • 编写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
<?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.enable.DynamicMethodInvocation" value="false" />
    <!-- 这项配置表示是否启用开发者模式,开发者模式的好处可以自动部署代码的修改,方便调试 -->
    <constant name="struts.devMode" value="true" />

        <!-- name属性指定在浏览器中的访问地址,class属性指定该action对应的类的全限定名 -->
        <action name="hello" class="example.HelloWorld">
            <!-- result指定该action跳转的路径,其name属性的默认值就是success,所以当name属性是success的时候可以不写name属性 -->
            <result name="success">/index.jsp</result>
        </action>
    </package>
    <!-- Add packages here -->

</struts>
  • 编写jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!-- 添加这项配置表示使用struts2的标签库,就像使用jstl时一样 -->
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
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>struts2</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
  </head>

  <body>
      <!-- 这是struts2自带的标签,value属性表示获取meg属性的值 -->
    <s:property value="meg"/>
  </body>
</html>
  • 启动服务器,在浏览器中就可以看到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+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>login.jsp</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
  </head>

  <body>
    <form action="login" method="post">
        <table>
            <tr>
                <td>用户名:</td>
                <td><input name="user.username"></td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input type="password" name="user.password"></td>
            </tr>
            <tr>
                <td colspan="2">
                    <input type="submit">
                </td>
            </tr>
        </table>
    </form>
  </body>
</html>
  • 创建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
<!-- 登录Action -->
        <action name="login" class="action.LoginAction">
            <result>/success.jsp</result>
            <result name="error">/error.jsp</result>
        </action>
  • 创建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(省略部分代码)

<body>
    <h3>
        <s:property value="user.username"/>,登录成功
    </h3>
  </body>

error.jsp(省略部分代码)

<body>
    登录失败,请重新登录
    <a href="login.jsp">返回</a>
</body>

注意在表单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页面访问以上对象设置的值:

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

    </h3>
  </body>
目录
相关文章
|
2月前
|
前端开发 Java Spring
Java Web ——MVC基础框架讲解及代码演示(下)
Java Web ——MVC基础框架讲解及代码演示
34 1
|
2月前
|
前端开发 JavaScript Java
七个步骤, 编写一个 Servlet 的 HelloWorld 程序
七个步骤, 编写一个 Servlet 的 HelloWorld 程序
14 0
|
2月前
|
设计模式 前端开发 网络协议
Java Web ——MVC基础框架讲解及代码演示(上)
Java Web ——MVC基础框架讲解及代码演示
21 0
|
存储 设计模式 前端开发
用 Python 撸一个 Web 服务器-第3章:使用 MVC 构建程序
用 Python 撸一个 Web 服务器-第3章:使用 MVC 构建程序
|
Web App开发 移动开发 网络协议
用 Python 撸一个 Web 服务器-第2章:Hello World
用 Python 撸一个 Web 服务器-第2章:Hello World
|
存储 Java 数据库
Java Web之Filter过滤器原理简介与功能演示
Filter被称作过滤器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet 进行响应处理前后实现一些特殊功能。
304 0
Java Web之Filter过滤器原理简介与功能演示
|
安全 JavaScript 前端开发
Java Web入门之JSP的基本语法解析及实战(超详细 附源码)
Java Web入门之JSP的基本语法解析及实战(超详细 附源码)
269 0
Java Web入门之JSP的基本语法解析及实战(超详细 附源码)
|
存储 XML 开发框架
Java Web——JSP的概念理解与应用举例
Java Web——JSP的概念理解与应用举例
Java Web——JSP的概念理解与应用举例
|
前端开发 Java Spring
springMVC 入门程序 helloworld!
springMVC 入门程序 helloworld!
108 0
|
存储 前端开发 Java
Java Web(十四) 编写MyBookStore项目的总结
这几天一直没有发博文,因为一直在忙公司成立的事,作为web学习的最后沉淀,接下来就要到框架的学习了。项目最后会分享源码链接。有需要的同学可以拿到自己玩一玩
138 0