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

学习日记(三)浅识struts1,并搭建框架demo

2013-08-13 14:57 295 查看


一、Struts1配置文件总结

一、在web.xml中安装Struts

要想使用Struts,我们接触到的第一个配置文件就是web.xml。实际上,Struts的入口点是一个名为ActionServlet的Servlet。在第一次访问Struts时,建立这个ActionServlet类的对象实例,并调用ActionServlet类中的init方法来进行初始化(其实是读取struts-config.xml文件中的内容,并根据struts-config.xml中的内容来初始化相关的资源)。因此,就要在web.xml文件中安装这个ActionServlet,并在ActionServlet的初始化参数中指定struts-config.xml的位置。

二、struts-config.xml文件的结构

struts-config.xml是Struts的核心配置文件。也就是说,只要是使用Struts,就必须配置struts-config.xml文件。struts-config.xml文件的所有配置项都要放到顶层元素<struts-config>中,主要配置项有如下七个:

1.FormBean:在<form-beans>元素中配置。

2.Action映射:在<action-mappings>元素中配置。

3.全局Forwards:在<global-forwards>元素中配置。

4.全局异常(Exception):在<global-exceptions>元素中的配置。

5.控制器(Controller):在<controller>元素中配置。

6.信息资源:在<message-resources>元素中的配置。

7.插件:在<plug-in>元素中配置。

下面我们就分别来看一下这七部分的具体配置方法。

三、配置Formbean和Action映射

这两个配置项是Struts配置的核心,也就是说我,一个完整的Struts应用程序都会拥有这两项配置。

每一个Formbean要在<form-beans>元素中定义一个<form-bean>子元素。下面的代码给出了一个标准的Formbean的配置方法:

<form-beans>

   <form-bean name="myForm" type="actionform.MyActionForm" />

</form-beans>

其中name属性表示Formbean名,type属性表示Formbean类的全名(包名+类名),一般type属性值需要指定一个org.apache.struts.action.ActionForm类或其子类。type属性值还可以指定一个动态form,如org.apache.struts.action.DynaActionForm,或这个类的子类。

在<form-beans>元素中定义的Formbean一般用于将客户端浏览器提交的数据映射为JavaBean的形式,最终开发人员可以直接使用JavaBean来操作客户端提交的数据。Formbean同时还有验证数据的功能(在validate方法中验证)。Formbean有时还会作为其他用途使用,如使用动态form和LocaleAction类配合使用来进行本地化操作。

每一个Action映射要在<action-mappings>元素中定义一个<action>子元素。Action映射的主要功能是将Struts动作的访问路径(一般以.do结尾)和Struts动作类相对应。同时可以指定一个Formbean来接收和验证客户端提交的数据。下面的代码给出了一个标准的配置Action动作的方法:

<action-mappings>

   <action name="myForm" path="/myaction"  scope="request"  validate="true"type="action.MyAction" input="/mystruts/error.jsp">

        <forward name="success" path=" /mystruts/success.jsp" />

    </action>

</action-mappings>

四、配置全局Forwards

每一个全局的Forwards需要在<global-forwards>元素中定义一个<forward>子元素。全局Forwards可以被所有的Action、异常处理以及一些Struts标签(如<html:link>)访问。下面的代码给出了一个标准的全局Forward的配置方法:

<global-forwards>

    <forward name="myforward" path="/mystruts/newProduct.jsp" />

</global-forwards>

五、配置局部和全局异常(Exception)

在Struts中处理异常的方法非常多,然后,为了使处理异常的方式更灵活。Struts框架允许以配置的方式来处理异常。

Struts中的异常配置可分为局部和全局异常。这两种异常配置的方法完全一样,只是配置代码的位置不同。配置局部异常的<exception>元素在<action>元素中,而全局异常的<exception>元素在<global-exceptions>元素中。局部异常的优先级大于全局异常的优先级。

下面的代码给出了一个标准的全局异常的配置方法:

<global-exceptions >

    <exception key="error.name.blank"type="java.lang.Exception" path="/error.jsp"/>

</global-exceptions>

其中key属性表示在属性文件中的key,一但StrutsAction的execute方法抛出异常,Struts首先会在局部和全局异常中匹配type属性所指定的异常类型。如果匹配成功,就会跳转到path属性所指的Web资源(在本例中是"/error.jsp")。如果在error.jsp页面中使用<html:errors/>标签显示错误信息,就会输出key属性所对应的值。

<exception>元素除了可以使用path属性指定要跳转的Web资源外,也可以使用handler属性指定用于处理异常的类。如下面的代码所示:   

<global-exceptions>

   <exception key="error.email.invalid"  type="java.lang.Exception"handler="exceptions.EmailException"/>

</global-exceptions>

其中exceptions.EmailException类必须继承org.apache.struts.action.ExceptionHandler类,而且我们必须覆盖execute方法。

ExceptionHandler类的execute方法的定义如下:

public ActionForward execute( Exception ex,ExceptionConfig ae,ActionMapping mapping,

                           ActionForm formInstance,HttpServletRequest request,

                           HttpServletResponse response) throws ServletException;

六、配置控制器(Controller)

控制器可能是这七个配置项上使用最少的一项。它主要用来覆盖一些默认的Struts设置。下面是几个常用的Struts设置:

1.maxFileSize:指定在文件上传时的最大文件尺寸。可以使用K、M和G作为单位。如maxFileSize="2M"。maxFileSize的值只能是整数,不能是小数,如maxFileSize=1.2M是不合法的。

2.nocache:告诉Struts是否应该缓冲内容。指定为nocache="true",Struts将不会缓冲内容。默认值为true。

3.contentType:指定默认的ContentType字段值,如果要发送的内容的默认格式是HTML,我们可以指定contentType的值为"text/html"。

下面的代码是一个完成的控制器的配置:

<controller maxFileSize="2M"contentType="text/html" nocache="false" />

七、配置信息资源

信息资源使用<message-resources>元素进行配置。下面是一个配置信息资源的例子:

<message-resources parameter="struts.application" key="global" />

其中parameter属性表示保存信息资源的属性文件的位置,对于上面的代码来说,属性文件的位置是<Web根目录>"WEB-INF"classes"struts"application.properties。key属性表示application.properties文件的标识。如果没有key属性,这个属性文件就是默认的属性文件。当指定key属性时,在使用这个属性文件时,需要使用相关标签的bundle属性指定这个key值。

属性文件中的值可以使用Struts标签来获取,如属性文件中的一个key是key.msg.submit。那么使用<bean:message>标签获取这个属性文件中的key值的代码如下:

<bean:message key="key.msg.submit" bundle="global"/>

属性文件也可以用在获得错误信息上,如在validate方法中使用如下的代码来指定错误提示信息:

errors.add("name",new ActionMessage("error.name.blank"));

而在JSP页面中可以使用如下的代码来显示这个错误信息:

<html:errors property="name"bundle="global"/>

八、配置Struts插件

Struts之所以强大,在很大程度上取决于它支持通过插件的方式进行扩展,如前面讲的Validator和Tiles,都是以Struts插件形式发布的。Struts插件使用<plug-in>元素进行配置,如下面的代码所示:

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">

    <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validator.xml" />

</plug-in>

其中className属性指定了Struts要调用的插件类名。property属性指定了插件需要的属性名,而value属性指定了相应的属性值。

二、搭建struts框架demo
使用MyEclipse(实现用户登录) 

1.打开MyEclipse,需要注意的是这里应该处于MyEclipse Java Enterprise视图;新建一个Web Project,输入适当的工程名字,这里输入mystruts1,Finish即可。

2.添加struts1.2框架支持

在mystruts1工程上面右击,在弹出的菜单中选择MyEclipse -> Add Struts Capabilities…,添加Struts的支持。

3.新建三个Jsp页面

login.jsp

 

<%@ page language="java" contentType="text/html;charset=gb2312"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>

<html:html lang="true">
<head>
<title>login.jsp</title>

<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
<h2>用户登陆</h2>
<html:form action="login.do" method="post">
用户名:<html:text property="name"></html:text><br>
密码:<html:password property="password"></html:password><br>
<html:submit value="登陆"></html:submit>
<html:reset value="重置"></html:reset>
</html:form>
</body>
</html:html>


 

login_success.jsp

 

<%@ page language="java" contentType="text/html;charset=gb2312"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>

<html:html lang="true">
<head>
<title>login.jsp</title>

<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
<h1>登陆成功!!!</h1>
</body>
</html:html>


 

login_failure.jsp

 

<%@ page language="java" contentType="text/html;charset=gb2312"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>

<html:html lang="true">
<head>
<title>login.jsp</title>

<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
<h1>登录失败!!!</h1>
</body>
</html:html>


 

java类--ActionForm 

 

package demo;

import org.apache.struts.action.ActionForm;

public class LoginForm extends ActionForm {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

}


 

Action类 

 

package demo;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;
String name=loginForm.getName();
String password=loginForm.getPassword();
if("admin".equals(name)&&"123".equals(password))
{
//跳转到成功页
return mapping.findForward("suc");
}
else
{
//跳转到失败页
return mapping.findForward("fal");
}

}
}


 

配置文件 web.xml 

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>


struts-config.xml 

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources />

<!-- ActionForm配置 -->
<form-beans>
<form-bean name="LoginForm" type="demo.LoginForm"></form-bean>
</form-beans>

<global-exceptions />

<!-- 全局转发配置 -->
<global-forwards>
<forward name="suc" path="/login_success.jsp"></forward>
<forward name="fal" path="/login_failure.jsp"></forward>
</global-forwards>

<!-- Action 配置 -->
<action-mappings>
<action path="/login"  type="demo.LoginAction" name="LoginForm" scope="request">
<forward name="suc" path="/login_success.jsp"></forward>
<forward name="fal" path="/login_failure.jsp"></forward>
</action>
</action-mappings>
<message-resources parameter="com.demo.struts.ApplicationResources" />
</struts-config>


部署项目,启动tomcat,这里就不详细说明!

最后打开浏览器,输入http://localhost:8080/mystruts1/,ok啦!

参考:http://www.cnblogs.com/haoxin963/archive/2012/09/03/2668873.html
http://blog.sina.com.cn/s/blog_4bd19a250100ttpl.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Struts 配置文档