您的位置:首页 > 编程语言 > Java开发

Struts2基础

2015-10-16 17:15 399 查看
Struts 2是在WebWork2基础发展而来的。

Struts 2 相比Struts 1的优点:

1、在软件设计上Struts 2 没有像Struts 1那样跟Servlet API 和 struts API 有着紧密的耦合。

Struts 2的应用可以不依赖于Servlet API和Struts API 。

2、Struts 2 提供了拦截器,利用拦截器可以进行AOP编程。

3、Struts 2 提供了类型转换器。

4、Struts 2 提供支持多种表现层技术,如:JSP 、 freeMarker等。

5、Struts 2 的输入校验可以指定方法进行校验。

6、Struts 2 提供了全局范围、包范围和Action范围的国际化资源文件管理实现。

搭建Struts 2 开发环境

  1、找到开发Struts 2的应用需要用到的jar包。

  2、编写Struts 2的配置文件。

  3、在web.xml中加入Struts 2 MVC启动框架配置。

开发Struts 2 最少用到的jar文件:

  Struts-core-2.x.x.jar : Struts 2 框架的核心类库

  xwork-2.x.x.jar : XWork类库,Struts 2 在其上构建

  ognl-2.6.x.jar : Object Graph Navigation Language , Struts 2 框架通过其读写对象的属性。

  freemarker-2.3.x.jar : Struts 2 的UI标签的模版使用 Freemarker编写。

  commons-logging-1.1.x.jar : ASF出品的日志包。

  commons-fileupload-1.2.1.jar : 文件上传组件。

1.在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>


  从上面可以看出,struts2框架是通过filter启动的。在StrutsPrepareAndExecuteFilter的init()方法中读取类路径下默认的配置文件struts.xml完成初始化操作。

注意:struts2读取到struts.xml中的内容后,以javabean的形式保存在内存中,以后struts2对用户的每次请求处理将使用内存中的数据,而不是每次都读取struts.xml文件。

2.struts.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>
<!-- bean 标签 用于创建一个JavaBean实例-->
<!-- constant标签 用于Struts2 默认行为标签-->
<!-- package标签 包标签,用于区分不同的请求文件的标签,比方说
网站前台请求  网站后台请求-->
<!-- include标签 用于引入其他的xml配置文件-->

<!-- 配置web默认编码集,相当于 HttpServletRequest.setChartacterEncoding用法 -->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!-- 默认我们Struts2的请求后缀是.action,也就是说我们不配置该元素,action/do都可以 -->
<constant name="struts.action.extension" value="action,do"></constant>
<!-- 设置浏览器是否缓存静态内容,默认值为true,在我们开发阶段建议关闭,防止修改后测试不到 -->
<constant name="struts.serve.static.browserCache" value="false"></constant>
<!-- 当struts 配置文件修改后,系统是否自动重新加载该文件,默认为false -->
<constant name="struts.configuration.xml.reload" value="true"></constant>
<!-- 开发模式下使用,这样可以打印出更加详细的错误信息 -->
<constant name="struts.devMode" value="true"></constant>
<!-- 默认视图主题 -->
<constant name="struts.ui.theme" value="simple"></constant>

<!-- name属性:包名,用于被别的包调用或继承
extends: 继承哪个包,会继承该包下配置信息和拦截器等等
namespace:选填,url连接必须加入/new/action.xxx
-->
<package name="userlogin" namespace="/new" extends="struts-default">
<!-- action相当于以前的servlet的概念,对应一个请求  name为请求的url地址
localhost:8080/项目名/new/login.do
-->
<action name="login" class="com.action.LoginAction">
<result name="success">/success.jsp</result>
<result name="fail">/fail.jsp</result>
</action>

</package>

</struts> 


struts2中使用包来管理action。包的作用和java中类包是非常类似的,它主要用于管理一组业务功能相关的action。在实际应用中,应该把一组业务功能相关的action放在同一个包下面。

配置包是必须指定name属性,该name可以随意取名,但是必须唯一,它不对应java的类包,如果其他类要继承该包,必须使用该属性进行使用。包的namespace属性用于定义包的命名空间,命名空间作为该action路径的一部分,如访问上面的例子中的action的路径为:/upload/upload.action。namespace属性可以不用配置,如果不指定该属性,默认的命名空间为“”(空字符串)。

通常每个包都必须继承struts-default包,因为struts很多核心的功能都是在这个包中定义的拦截器实现的,如:从请求中把请求参数封装到action、文件上传和数据验证等功能搜是通过拦截器实现的。struts-default包中定义了这些拦截器和result类型。换句话说,当包继承了strtus-default包才能使用struts提供的核心功能。struts-default包是在struts2-core-2.x.x.x.jar文件中的struts-default.xml中定义的。struts-default.xml是struts2的默认配置文件,struts2每次都会自动加载struts-default.xml文件。

包还可以通过abstract=“true”定义为抽象包,抽象包中不能包含action。

注意,在配置文件struts.xml中没有提示的解决办法:window->preference->xml catalog中添加struts-2.0.dtd文件,key type为URI,key为http://struts.apache.org/dtds/struts-2.0.dtd。

1.如果没有为action指定class,默认的class是ActionSupport。

2.如果没有为action指定method,默认执行action中的execute方法。

3.如果没有为result指定name属性,默认值为success。

3、ActionSupport 类

ActionSupport 类为 Action 提供了一些默认实现,主要包括预定义常量、从资源文件中取文本资源、接收验证错误信息和验证的默认实现。

public class loginAction extends ActionSupport {
private Users us;
@Override
public String execute() throws Exception {
System.out.println("标签实现");
System.out.println(us.getUsername());
System.out.println(us.getPassword());
return "success";
}
public Users getUs() {
return us;
}
public void setUs(Users us) {
this.us = us;
}

}


  4、jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<body>
 <s:form namespace="/userlogin" action="login" method="post">
   <s:textfield name = "us.username"/>用户名:
<s:password name = "us.password"/>密码:
<s:submit value="提交"  />
</s:form>
</body>


  

  

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: