zoukankan      html  css  js  c++  java
  • struts2环境搭建和第一个程序

    环境搭建

    项目目录

    clip_image001

    导入依赖jar包,如上图lib目录所示。

    不同的版本可能会不一样,没关系在tomcat启动时,如果报错java.lang.ClassNotFoundException,我们可以按照错误提示添加相应jar包。

    在web.xml中配置struts2过滤器

    将Struts2所带的过滤器org.apache.struts2.dispatcher.FilterDispatcher配置到工程的web.xml文件中,默认情况下,该过滤器拦截请求字符串中以.action结尾的请求,并将该请求委托给指定的Action进行处理。

    在web.xml加入下面代码

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

    注:可以在filter元素中加入<init-param>子元素来设定struts.xml配置文件的路径。若设置了<param-name>config</param-name>参数,那struts-default.xml等原来struts2默认加载的文件也要手动指定,否则不会自动加载。

    struts-default.xml的路径在struts2-core-2.x.x jar包底下

    编写一个struts小程序的步骤

    1.创建一个类来存储欢迎消息(模型)

    2.创建一个服务器页面呈现消息(视图)

    3.创建一个页面提交用户请求参数(表单)

    4.创建一个Action类来控制用户之间的互动,模型和视图(控制器)

    5.创建一个映射(struts.xml)来描述Action类和视图的关系。

    1.存储消息MessageStore.java

    package hello;
    
    public class MessageStore {
         private String message;
            public MessageStore() {
                 
                setMessage("Hello Struts User");
            }     
            public String getMessage() {
         
                return message;
            }     
            public void setMessage(String message) {
         
                this.message = message;
            }
            public String toString(){
                return message;
            }
    
    }

    2.呈现消息Hello.jsp

    在这里简单运用一些struts标签,取得action的属性值,简化信息的显示。在这之前,我们需要引入struts标签库

    <%@ taglib prefix="s" uri="/struts-tags" %> 

    struts2属性标记为<s:property>,主要有下面一些用法。

    1.显示Action中的属性值:<s:property value="属性名" />
    2.显示字符串,使用单引号:<s:property value="'字符串'" />
    3.显示默认值,Action中找不到指定的属性时,显示default属性的值:<s:property value="属性名" default="默认值" />
    4.解析HTML字符串,escape默认值为true,直接输出字符串,escape设为false时,解析HTML字符串:<s:property value="'<font color="red">Red</font>'" escape="false" />

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>Hello World!</title>
      </head>
      <body>
        <h2><s:property value="MessageStore" /> ${sessionScope.user}</p></h2>
        <p>Number of visit this site: <s:property value="helloCount" /> times!</p>
      </body>
    </html>

    3.提交请求index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Basic Struts 2 Application - Welcome</title>
    </head>
    <body>
    <h1>Welcome To Struts 2!</h1>
    <s:form action="hello">
        <s:textfield name="user" label="userName"/>
        <s:submit value="提交"></s:submit>
    </s:form>
    </body>
    </html>

    4.处理用户请求HelloAction.java

    HelloAction继承ActionSupport,充当控制器的角色,用于:

    1.接受用户的请求参数

    2.处理用户请求(或者调用逻辑处理)

    3.返回String类型的结果,告诉Struts要呈现什么的视图。

    接受请求参数

    在action中设置参数属性,添加getter和setter方法,让action自动填充,并做恰当的类型转化。

    处理请求

    我们可以在execute方法中处理用户的请求,直接进行处理请求参数或者调用service的方法。该方法有一个String类型的返回值,告诉Struts应该将什么视图返回给用户。

    package hello;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    
    public class HelloAction  extends ActionSupport  {
        
         private static final long serialVersionUID = 1L;
            private static int helloCount = 0;
            private MessageStore messageStore;
            private String user;
            public String execute() throws Exception {
                messageStore = new MessageStore() ;
                helloCount++;
                ActionContext.getContext().getSession().put("user", user);
                return SUCCESS;
            }
         
            public MessageStore getMessageStore() {
                return messageStore;
            }
         
            public void setMessageStore(MessageStore messageStore) {
                this.messageStore = messageStore;
            }
    
            public String getUser() {
                return user;
            }
    
            public void setUser(String user) {
                this.user = user;
            }
    
            public int getHelloCount() {
                return helloCount;
            }
    
            public void setHelloCount(int helloCount) {
                this.helloCount = helloCount;
            }
    }
    
    

    5.struts.xml配置

    我们将在struts.xml定义处理结果字符串和资源之间的映射关系,即定义action的execute方法返回的字符串所对应的视图。

    在工程类路径下创建struts.xml文件,这是Struts2的配置文件,在struts.xml文件中可以配置Action、Bean、Interceptor等组件。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    
    <struts>
        <constant name="struts.devMode" value="true" />
        <package name="basicstruts2" extends="struts-default">
            <action name="hello" class="hello.HelloAction" method="execute">
                <result name="success">/Hello.jsp</result>
            </action>
        </package>
    </struts>

    注:WEB应用程序的类路径是指WEB-INF/classes目录,在Eclipse中,创建在src目录下的文件最终发布后会自动复制到WEB-INF/classes目录下。

    代码清单3中涉及到很多标签,以下是简单的解释:

    标签名称

    说明

    include

    包含其他xml文件,在示例中,这意味着struts.xml可以访问定义在struts-default.xml文件中的组件。

    该元素可以使得Struts2定义多个配置文件,“分而治之”。

    要注意的是,任何一个struts2配置文件都应该和struts.xml有相同的格式,包括doctype,并且可以放在类路径下的任何地方。

    package

    Action或截拦器分组。

    name:名称,必填项,名称自定义,但不能相同。方便别的package引用。

    extendspackage能继承其他的package,即通过该属性实现,值为另一个packagename

    在示例中,extends =”struts-default”是从struts-default.xml中继承的。

    action

    定义Actionname属性为访问时用到的名称,class属性是Action的类名。

    result

    根据Action的返回值定义页面导航。

    Action的预定义的返回值有:

    String SUCCESS = "success";

    String NONE    = "none";

    String ERROR   = "error";

    String INPUT   = "input";

    String LOGIN   = "login";

    比如,当Action返回SUCCESS时希望转到ok.jsp页面,则可以这样写:

    <result name="success">ok.jsp</result>

        其中,name的缺省为success

    源码下载

    我已经将工程代码打包(lib下没有导入jar包)

    struts2 HelloWorld

  • 相关阅读:
    电梯设计需求调研报告
    返回一个整数数组中最大子数组的和。
    返回一个整数数组中最大子数组的和
    四则运算2程序及运行结果
    四则运算2
    上半学期读软件工程方面著作的读书计划
    写输出30道小学生四则运算程序的解题思路及未在规定时间内完成程序的原因
    《人月神话》读后感
    阅读《软件工程—理论方法与实践》第十一章心得体会
    java常见排序方法
  • 原文地址:https://www.cnblogs.com/klguang/p/4892958.html
Copyright © 2011-2022 走看看