【Struts】Struts框架配置详解
1.首先将所必须的Jar包放到项目的WebRoot/WEB-INF/lib目录下。
如果你没有这些Jar文件,你可以到Struts官网上下载:http://struts.apache.org/。因为经常会用到这些Jar包,因此我将Struts所需的Jar包进行了整理,你可以点击这里下载。
Struts所需Jar包下载:http://pan.baidu.com/s/1c0pdqTy
密码:jb2m
如果你想了解更多关于以上列出的Jar包的信息,你可以阅读我的另一篇文章:(MARK)
2.在web.xml中加入如下的Struts配置信息
<!-- Struts框架的配置 开始 -->
<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>
<!-- Struts框架的配置 结束 -->
3.在src目录下创建struts.xml文件
<?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>
<package name="default" namespace="/" extends="struts-default">
<action name="AS_sayHello" class="com.basestruts.action.AS_SayHelloAction"
method="execute">
<result name="success">/result.jsp</result>
<result name="input">/index.jsp</result>
</action> <action name="MD_sayHello" class="com.basestruts.action.MD_SayHelloAction"
method="execute">
<result name="success">/result.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
主要属性说明:<package> --name:用于区别不同的package;必须是唯一的、可用的变量名;
<package> --namespace:空间名,不同功能的代码放在不同的空间里,使得配置文件层次更加清晰。空间名是调用action时输入路径的组成部分;
<package> --extends:继承其他的package,使得代码更加简洁。每个配置action的package都必须直接或间接继承struts-default这个系统默认的package
<action> --name:用于在一个package里区别不同的action;必须是唯一的、可用的变量名;是调用action时输入路径的组成部分;
<action> --class:action所在的路径(包名+类名);
<action> --method:action所调用的方法名;
调用action的路径为:namespace + action名。例如当我把struts.xml文件改成:
<?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>
<package name="default" namespace="/message" extends="struts-default">
<action name="AS_sayHello" class="com.basestruts.action.AS_SayHelloAction"
method="execute">
<result name="success">/result.jsp</result>
<result name="input">/index.jsp</result>
</action> <action name="MD_sayHello" class="com.basestruts.action.MD_SayHelloAction"
method="execute">
<result name="success">/result.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
这时,如果我要调用名字为:AS_sayHello的action,那么我必须输入:message/AS_sayHello 才能正确访问到这个Action。
注意,这里不要写成"/message/AS_sayHello",最前面不用加左斜杠。
在写result视图的时候,有这样两种写法:/WEB-INF/Hello.jsp和WEB-INF/Hello.jsp。这两种的区别你知道吗?/WEB-INF/Hello.jsp它会不计较你的namespace直接就去访问这个地方了。
但是如果是:WEB-INF/Hello.jsp,而你的命名空间又是/test.这样的话,它访问的就是:/test/WEB-INF/Hello.jsp,如果说不存在test,那么直接报错。由此可见,左斜杠的作用就是告诉Struts我要从根目录(WebRoot)开始算起。
4.编写Action处理类
编写的Action类最基本的应该继承ActionSupport类。如果要结合POJO使用,则应该实现ModelDriven接口。
但实际上你也不集成ActionSupport,但这样以来你的工作量便会直线上升,因为ActionSupport帮你做了很多通用的工作。(补充最基本的不继承任何类的Action例子)
所以一般情况下还是建议至少继承ActionSupport类。
下面用一个继承了ActionSupport的Action处理类作为例子:
package com.basestruts.action; import com.opensymphony.xwork2.ActionSupport;
/**
* 通过直接在Action中声明参数进行参数传递
* @author chenyr
*
*/ public class AS_SayHelloAction extends ActionSupport { /** 名字 **/
private String name; /** 消息 **/
private String message; /** 传递到前台的消息(必须提供SET/GET方法) **/
private String sayHelloStr = ""; public String execute()
{
sayHelloStr = "读取不到前台消息!"; if(name != null && message != null)
{
sayHelloStr = name + "," + message;
} System.out.println(sayHelloStr); return SUCCESS;
} /* 省略name, message, sayHelloStr三个属性的SET/GET方法*/
}
前台页面用表单传递name, message参数。
<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=utf-8" %> <!-- 省略了其他代码 -->
<body>
<%-- 通过Struts传递参数,数据传递方式必须选择post,否则编码错误! --%>
<form action="message/MD_sayHello" method="post" >
<b>名字:</b><input type="text" id="name" name="name" /></br>
<b>消息:</b><input type="text" id="message" name="message"/></br>
<input type="submit" name="submit" value="问好"/>
</form>
</body>
注意:Struts传递数据时,必须将表单的method属性设为post,否则会出现编码错误!
结果页面result.jsp:
<body>
<h1>${sayHelloStr }</h1>
</body>
这是最基本的通过在Action中直接声明要接收的参数,并且声明SET/GET方法。还有另外一种是通过ModelDriven实现参数的传递,这种方式下Struts将所有的参数封装到了一个POJO类,使得Action文件代码更加简洁。
如果你想了解更多,可以阅读我的另外一篇博文:Struts中前后台参数传递的两种方式
小结:配置Struts框架的三个步骤为:
第一,加入Jar包;
第二,配置web.xml文件;
第三,创建并配置struts.xml文件;
第四,编写Action处理类。
【Struts】Struts框架配置详解的更多相关文章
- java日志框架系列(3):logback框架配置详解
1.Logback配置 1.配置步骤及默认配置 logback即可以通过编程式配置,也可以通过xml的形式配置. logback配置步骤: 1. 尝试在 classpath 下查找文件 logback ...
- SpringMVC 框架系列之组件概述与配置详解
在上一篇文章 SpringMVC 框架系列之初识与入门实例 的实例中,我们已经知道,SpringMVC 框架是一个 web 层的框架,本篇文章就详细解释一下 SpringMVC 框架具体文件的配置以及 ...
- (网页)Java日志记录框架Logback配置详解(企业级应用解决方案)(转)
转自CSDN: 前言 Logback是现在比较流行的一个日志记录框架,它的配置比较简单学习成本相对较低,所以刚刚接触该框架的朋友不要畏惧,多花点耐心很快就能灵活应用了.本篇博文不会具体介绍Logbac ...
- Struts2学习笔记二 配置详解
Struts2执行流程 1.简单执行流程,如下所示: 在浏览器输入请求地址,首先会被过滤器处理,然后查找主配置文件,然后根据地址栏中输入的/hello去每个package中查找为/hello的name ...
- Spring学习 6- Spring MVC (Spring MVC原理及配置详解)
百度的面试官问:Web容器,Servlet容器,SpringMVC容器的区别: 我还写了个文章,说明web容器与servlet容器的联系,参考:servlet单实例多线程模式 这个文章有web容器与s ...
- struts2-环境搭建-访问流程-配置详解-常量配置-类详解
1 struts2概述 1.1 概念 1.2 struts2使用优势 自动封装参数 参数校验 结果的处理(转发|重定向) 国际化 显示等待页面 表单的防止重复提交 struts2具有更加先进的架构以 ...
- Apache2.2+Tomcat7.0整合配置详解
一.简单介绍 Apache.Tomcat Apache HTTP Server(简称 Apache),是 Apache 软件基金协会的一个开放源码的网页服务器,可以在 Windows.Unix.Lin ...
- Spark log4j日志配置详解(转载)
一.spark job日志介绍 spark中提供了log4j的方式记录日志.可以在$SPARK_HOME/conf/下,将 log4j.properties.template 文件copy为 l ...
- struts2基本配置详解2
接上篇struts2基本配置详解,还有一些配置没有讲到,下面将继续. struts.xml <package name="com.amos.web.action" names ...
随机推荐
- Node.js能解决什么问题?
一.使用Node.js能解决什么问题 对于PHP.JAVA.Python等服务端语言中,为每个客户端连接创建一个新的线程,而每个线程需要大约2M的内存,理论上,具有8GB内存的服务器可以同时连接的最大 ...
- Kafka学习笔记之Kafka High Availability(下)
0x00 摘要 本文在上篇文章基础上,更加深入讲解了Kafka的HA机制,主要阐述了HA相关各种场景,如Broker failover,Controller failover,Topic创建/删除,B ...
- SQL Server like 字段
参考资料:Cannot resolve the collation conflict between "Chinese_PRC_CI_AS" and "SQL_L及由于排 ...
- Subversion——密码保存位置
Subversion——密码保存位置 摘要:本文主要说明了Subversion在电脑上保存密码的位置. 起因 在向本地电脑上的文件夹里下载程序代码的时候,发现输入了地址之后就能直接下载了,并没有提示输 ...
- 2019 物易云通java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.物易云通等公司offer,岗位是Java后端开发,因为发展原因最终选择去了物易云通,入职一年时间了,也成为了面 ...
- 在React中使用react-router-dom路由
1,路由组件的基本实现 使用React构建的单页面应用,要想实现页面间的跳转,首先想到的就是使用路由.在React中,常用的有两个包可以实现这个需求,那就是react-router和react-rou ...
- 小鸟初学Shell编程(八)环境变量、预定义变量与位置变量
环境变量 环境变量:每个Shell打开都可以获得到的变量. 我们知道通过export的方式打开可以让子进程读取父进程的变量的值,那怎么样才能让每一个进程都能读取到变量的值呢? 在这呢,系统有一些默认的 ...
- 使用IDEA创建Spring Boot项目
第一步:根据1.2.3点鼠标哦: 第二步:点击Next 第三步:按红框框选,然后Next 第四步:选个保存路径,然后Next 第五步:点击Finish就大功告成了
- vue中路由传值url--路径传值
在vue项目中我们使用路径的方式一般有一下两种方式this.$route.params.userId;一种需要在router上配置对应的数据key, this.$route.query.userId;
- 队列解密QQ号
队列解密QQ号 本篇博客主要是<啊哈!算法>的读书笔记,这里做一下记录. 问题场景: 给定一串 QQ 号,631758924,从其中解密出真实的 QQ 号. 解密规则:首先将第一个数删除, ...