Struts学习笔记

Struts中的常用类

import java.util.Vector;

 

import javax.servlet.ServletContext;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import javax.sql.DataSource;

 

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.action.ActionMessage;

import org.apache.struts.action.ActionMessages;

 

 

javax.servlet.ServletContext;

该类主要用于根据struts-config.xml中的信息使用getAttribute()方法取得与之相关的对象,如javax.sql.DataSource对象。ServletContext对象由Action的变量servlet取得

 

javax.servlet.http.HttpSession

HttpServletRequest.getSession()方法取得主要用于存取用户信息

 

javax.sql.DataSource

public interface DataSource该工厂用于提供到此 DataSource 对象表示的物理数据源的连接。作为 DriverManager 设施的替代项,DataSource 对象是获取连接的首选方法。实现 DataSource 接口的对象通常在基于 JavaTM Naming and Directory Interface (JNDI) API 的命名服务中注册。 DataSource 接口由驱动程序供应商实现。共有三种类型的实现:

  1. 基本实现 - 生成标准 Connection 对象
  2. 连接池实现 - 生成自动参与连接池的 Connection 对象。此实现与中间层连接池管理器一起使用。

3.     分布式事务实现 - 生成一个 Connection 对象,该对象可用于分布式事务,并且几乎始终参与连接池。此实现与中间层事务管理器一起使用,并且几乎始终与连接池管理器一起使用。

DataSource 对象的属性在需要时可以修改。例如,如果将数据源移动到另一个服务器,则可更改与服务器相关的属性。其优点是,因为可以更改数据源的属性,所以任何访问该数据源的代码都无需更改。通过 DataSource 对象访问的驱动程序不会向 DriverManager 注册。通过查找操作检索 DataSource 对象,然后使用该对象创建 Connection 对象。使用基本的实现,通过 DataSource 对象获取的连接与通过 DriverManager 设施获取的连接相同。

 

org.apache.struts.action.Action;

控制器,子类需要覆盖其public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)

                                throws Exception {}方法,并可以通过其servlet变量的getServletContext()方法取得需要的ServletContext对象。

saveErrors(request, errors)方法用于将ActionMessages对象保存到request中。再由相应的jsp页面<html:errors/>标记把errors从消息资源文件中读取的消息显示出来。

 

org.apache.struts.action.ActionForm

模型组件,主要用于从视图组件向控制器组件传值,用于继承。

 

org.apache.struts.action.ActionForward

用于控制页面跳转的对象类。

 

org.apache.struts.action.ActionMapping

findForward()方法用于返回ActionForward对象来控制页面的跳转。

例如:return mapping.findForward(“任意路径字符串”)该路径在struts-config.xml<global-forwards>中定义。或者用以下方法代替

return (new ActionForward(mapping.getInput()));

mapping.getInput() 取的是<action-mappings> 里配置的input 参数.

 

org.apache.struts.action.ActionMessage;

该类主要用于与页面标记<html:errors/>一起使用,用来显示资源文件保存的消息。它有两个构造方法:ActionMessageString s)其中s为消息资源文件*.properties中对应的项的键名。

          ActionMessageString sObject os为任意字符串,o boolean行变量,通常

ture. 表示是否读取消息资源文件中保存的消息。该对象通常保存在ActionMessages里。

 

org.apache.struts.action.ActionMessages

errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(

                                   "error.accessDeny"));ActionMessage消息对象用键值对的形式保存到ActionMessages对象errors中最后再将errors对象保存到request中。例如:利用ActionsaveErrors(request,errors)方法保存。

 

例子代码:

package j2eebbs.admin.action;

 

import j2eebbs.Constants;

import j2eebbs.DB;

import j2eebbs.User;

import j2eebbs.admin.form.AdminLoginForm;

 

import javax.servlet.ServletContext;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import javax.sql.DataSource;

 

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.action.ActionMessage;

import org.apache.struts.action.ActionMessages;

 

public final class AdminLoginAction extends Action {

       public ActionForward execute(ActionMapping mapping, ActionForm form,

                     HttpServletRequest request, HttpServletResponse response)

                     throws Exception {

              //取得用户名

              AdminLoginForm userform = (AdminLoginForm) form;

              String username = userform.getUsername();

             

              //利用配置文件struts-config.xmldatasource的信息取得数据库连接对象

              //每个应用程序都对应一个servletcontext,可以用来读取配置文件中的信息

              //其中DataSource接口由服务器实现

              ServletContext context = servlet.getServletContext();

              DataSource dataSource = (DataSource) context

                            .getAttribute(Constants.DATASOURCE_KEY);

              DB db = new DB(dataSource);

             

              //取得session对象用于保存该用户的信息

              HttpSession session = request.getSession(true);

 

              String PageForward;

              ActionMessages errors = new ActionMessages();

 

              if ("admin".equals(User.getUserGrade(db, username))) {

                     session.setAttribute(Constants.LOGIN_USERGRADE_KEY, "admin");

                     PageForward = "ToAdminIndex";

              } else if ("banzhu".equals(User.getUserGrade(db, username))) {

                     session.setAttribute(Constants.LOGIN_USERGRADE_KEY, "banzhu");

                     PageForward = "ToAdminIndex";

              } else {

                     //errors<html:errors/>标记一起使用,用来在jsp页面中显示消息,其中

//ActionMessage与消息资源文件ApplicationResources.propertice相关联

                     errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(

                                   "error.accessDeny"));

                     if (!errors.isEmpty()) {

                            saveErrors(request, errors);

                     }

                     PageForward = "ToErrorPage";

              }

db.close();

             

              //用于在模型组件中控制页面的跳转,该方法与struts-config.xml中的<global-forwards>相关联

              return mapping.findForward(PageForward);

       }

}

Struts中的3种配置文件

1.       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>标签用来配置数据源。指定了数据库驱动类,URL及访问数据库的用户名,密码-->

    <data-sources>

        <data-source key="bbsDB" type="org.apache.commons.dbcp.BasicDataSource">

            <set-property property="driverClassName" value="org.gjt.mm.mysql.Driver" />

            <set-property property="url" value="jdbc:mysql://localhost:3306/BBS" />

            <set-property property="username" value="root" />

            <set-property property="password" value="root" />

        </data-source>

    </data-sources>

<!--<form-beans>元素配置ActionForm Bean-->

<form-beans>

        <form-bean name="userLoginForm" type="j2eebbs.user.form.UserLoginForm" />

    </form-beans>

 

    <global-exceptions />

 

<!--<global-forwards>元素配置全局的转发路径。 -->

<global-forwards>

<!由控制器转发到JSP页面-->

<forward name="UserLoginSucceed" path="/user/bbsindex.jsp" />

    </global-forwards>

   

<!--<action-mappings>元素配置了一个action组件-->

<!input属性指定当表单验证失败时的转发路径-->

<!name属性指定需要传递给actionactionform bean-->

<!path属性指定请求访问action的路径-->

<!type属性指定action的完整类名-->

<!scope属性指定actionform bean的存放范围-->

<!validate属性指定是否执行表单验证有turefalse-->

<action-mappings>

<!JSP转发到控制器-->

        <action path="/userlogin" type="j2eebbs.user.action.UserLoginAction" name="userLoginForm" scope="session" input="/user/userlogin.jsp" />

<!JSP转发到JSP-->

        <action path="/registration" forward="/user/registration.jsp" />

 

        <action path="/logoff" type="j2eebbs.user.action.LogoffAction" />

        <action path="/adminlogoff" type="j2eebbs.admin.action.AdminLogoffAction" />

        <action path="/backtoadminindex" forward="/admin/adminindex.jsp" />

        <action path="/adminloginjsp" forward="/admin/adminlogin.jsp" />

</action-mappings>

 

<!--< message-resources >标签定义了Resource Bundle使用的资源文件-->

<!parameter属性定义了该资源文件的文件名-->

     <message-resources parameter="j2eebbs.ApplicationResources_zh" />

</struts-config>

 

 

2.web.xml

//web.xml文件以一个XML头开始。

<?xml version="1.0" encoding="UTF-8"?>

 

//顶层元素为web-app。这里要注意一点,不象html,xml元素是大小写敏感的

//因此web-app必须用小写,xml不仅对大小写敏感还对出现在其他元素中的次序敏感。

//例如,xml头,web-app的次序不能改变。在web-app元素内,元素的次序也很重要。

//当元素的次序不正确时,服务器可以拒绝执行web应用。使用非标准元素次序的web.xml文件是不可移植//的。在如下的代码中,sevlet元素必须出现在所有servlet-mapping元素之前。

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

 

    <servlet>

         //servlet-name标签定义用于web应用的servlet

         //下面两个元素指定由ActionServlet接收请求,并确定其如何响应。

        <servlet-name>action</servlet-name>

        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

 

         //init-param标签定义了servlet初始化参数

         //利用config指示ActionServlet的行为由指定的配置文件来指导。

        <init-param>

            <param-name>config</param-name>

            <param-value>/WEB-INF/struts-config.xml</param-value>

        </init-param>

 

         //下面的debug为整数值,它指定将有关处理的详细信息写至控制台的详细程度

         //默认记为0,记录相对最少的日志信息。

        <init-param>

            <param-name>debug</param-name>

            <param-value>3</param-value>

        </init-param>

 

        //定义detail参数,指示将“映射”详细信息写至控制台的程度。

        <init-param>

            <param-name>detail</param-name>

            <param-value>3</param-value>

        </init-param>

   

         //使用<load-on-startup>完成在启动应用程序是装入servlet的功能

        <load-on-startup>0</load-on-startup>

    </servlet>

 

    //指定URL的结尾的命名模式

    <servlet-mapping>

        <servlet-name>action</servlet-name>

        <url-pattern>*.do</url-pattern>

    </servlet-mapping>

 

    //指定欢迎页面。

    <welcome-file-list>

        <welcome-file>userloginjsp.do</welcome-file>

    </welcome-file-list>

 

     //还可以声明web应用所使用的struts标签库,本例中声名了4个标签库

     //Struts Bean,Struts HTML,Struts Logic等。

<taglib>

     <taglib-uri>/WEB-INF/struts-logic.tld</taglib>

     <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>

</taglib>//其余的略。

</web-app>

 

 

 

3.ApplicationResources_.properties

       Struts中使用的消息资源文件在struts-config.xml中定义

<message-resources parameter="j2eebbs.ApplicationResources_zh" />

使用方法:

1.    jsp页面中使用标记<bean:message key="userlogin.jsp.guest" />显示key键对应的消息值。

2.      ActionMesage,和ActionMesages读取消息并保存到request中,然后在jsp页面中使用<html:errors/>标记即可。

 

       Struts框架通过消息资源文件来支持国际化和本地化。除了默认的资源文件(使用本地语言编写)以外,一个web应用可以包含很多个用不同语言编写的消息资源文件,这些消息资源文件都存储在默认资源文件所在的目录中。所有的消息资源文件应包含相同的关键字,但关键字的值是用特定的语言编写的。

       如果默认资源文件的名称是ApplicationResources.properties,那么用其他特定语言编写的资源文件的名称就应该是ApplicationResources_xx.properties(xxISO编码,如英语是en)

       消息资源文件的内容是一行行对应的键/值。例如 login.success=注册成功。

       如果想要在消息资源文件ApplicationResources_zh.properties中输入中文字符,那么需要把该文件处理一下,如果不进行处理,中文字符会在系统中显示为乱码。

       在不使用插件时,可以按照如下操作对消息资源文件ApplicationResources_zh.properties进行处理。

(1)       ApplicationResources_zh.properties中输入中文字符,代码如下:

Login.success=注册成功

(2)       ApplicationResources_zh.properties文件放到jdk安装路径下的/bin目录中

(3)       windows系统中,打开命令行

(4)       输入cd c:/j2sdk 1.4.2 _10/bin  ,按回车,进入jdkbin目录。

(5)       输入以下命令:native2ascii ApplicationResources_zh.properties a.properties  回车运行。

(6)       删除当前资源文件ApplicationResources_zh.properties,把a.properties文件重命名为ApplicationResources_zh.properties。打开可见文件编辑完成。

#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)

# Resources for parameter 'j2eebbs.ApplicationResources_zh'

# Project P/ch15

# error.delete.failed为读取消息时使用的键值

error.delete.failed                    = /u5220/u9664/u5931/u8D25/uFF01

error.insert.failed                    = /u63D2/u5165/u5931/u8D25/uFF01

     

 

 

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Struts 中,处理异常有两种方式:编程式异常处理和声明式异常处理。本篇笔记将讲解声明式异常处理。 声明式异常处理是指在 struts.xml 文件中通过配置来处理异常。这种方式可以让开发人员将重心放在业务逻辑的处理上,而不必关心异常的处理。 首先,我们需要在 struts.xml 文件中配置全局的异常处理器: ```xml <global-exception-mappings> <exception-mapping exception="java.lang.Exception" result="errorPage"/> </global-exception-mappings> ``` 这里我们配置了一个全局的异常处理器,它会处理所有的 java.lang.Exception 异常,并将结果返回到名为 errorPage 的 result 中。 接下来,我们需要在 action 中声明需要处理的异常: ```xml <action name="test" class="com.example.TestAction"> <exception-mapping exception="java.lang.IllegalArgumentException" result="illegalArgument"/> <result name="success">/test.jsp</result> </action> ``` 在这个例子中,我们声明了 TestAction 类中处理 java.lang.IllegalArgumentException 异常,并将结果返回到名为 illegalArgument 的 result 中。 最后,我们需要在 struts.xml 文件中定义这些 result: ```xml <result name="errorPage">/error.jsp</result> <result name="illegalArgument">/illegalArgument.jsp</result> ``` 这样,当 TestAction 类中抛出 java.lang.IllegalArgumentException 异常时,就会返回到名为 illegalArgument 的 result 中。 总之,声明式异常处理可以让我们更加专注于业务逻辑的处理,通过配置来处理异常,从而提高代码的可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值