TypechoJoeTheme

顿搜

统计
SSH

Struts2相关知识简介

2015-05-26
/
0 评论
/
684 阅读
/
正在检测是否收录...
05/26

一、背景

1、由Struts1和WebWork框架整合而来

2、WebWork采用拦截器机制处理用户请求,使得业务逻辑控制器与servlet完全脱离开

3、实现了MVC开发模式,解除了与Servlet的强耦合性

二、框架的好处

1、属性驱动:表单中的数据不用通过request.getParameter()得到,可以直接使用

2、模型驱动:提交的表单数据自动封装到相对应的实体类对象当中

3、上传功能:便捷实现上传功能FileUpload,只需简单的配置一下文件即可

4、国际化:可以很方便的实现国际化,只需要简单的配置好语言间的关系

5、校验器:通过配置即可方便的完成表单的后台校验

6、强大的标签库:包括Struts标签库和OGNL标签库,也可以使用EL表达式和JSTL标签

7、管理更科学:可以使用XML管理程序文件的对应关系

8、安全的线程机制:每个Action都是独立的。  Servlet是 单例模式,所以线程是不安全的。

9、Token令牌机制:防止数据重复提交。

9、异常处理机制:通过配置即可完成。

10、面向切面编程(AOP):先进的编程思路,拦截器的使用包括自动封装、上传文件、数据校验

三、JAR包结构

1、三个asm :反射的替代方案,是java字节码操控框架,能动态的生成和改造java代码

2、commons-fileupload:上传文件的jar包

3、commons-io:对文件流操作的工具包

4、commons-lang:基础文件包

5、commons-logging:日志包

6、freemarker:生成各种文本

7、javassist:是java字节码操纵更加简便,编译java字节码的类库

8、log4j:日志

9、ognl:struts2独有的标签库

10:struts2-core:核心包

11:xwork-core:webwork的包

四、WEB.XML文件配置

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

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xmlns="http://java.sun.com/xml/ns/javaee"

         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">

<filter>

    <filter-name>characterEncodingFilter</filter-name>

    <filter-class>

        org.springframework.web.filter.CharacterEncodingFilter

    </filter-class>

    <init-param>

        <param-name>encoding</param-name>

        <param-value>utf-8</param-value>

    </init-param>

</filter>

<filter-mapping>

    <filter-name>characterEncodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

<filter>

    <filter-name>openSessionInViewFilter</filter-name>

    <filter-class>

        org.springframework.orm.hibernate4.support.OpenSessionInViewFilter

    </filter-class>

</filter>

<filter-mapping>

    <filter-name>openSessionInViewFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

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

<listener>

    <listener-class>

        org.springframework.web.context.ContextLoaderListener

    </listener-class>

</listener>

<context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>classpath:applicationContext*.xml</param-value>

</context-param>

<welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

</welcome-file-list>

</web-app>

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

<!--constant是Struts2默认行为标签,用于改变Struts2默认配置-->

 <constant name="struts.enable.DynamicMethodInvocation" value="true" />

 <!--默认Struts2的请求后缀是.action,若不配置该元素,默认只会拦截.action的请求-->

 <constant name="struts.action.extension" value="do,,"/>

 <!--开发模式下可以打印出详细的错误信息-->

 <constant name="struts.devMode" value="true" />

 <!--配置web默认编码集,相当于HttpServletRequest.setChartacterEncoding用法-->

 <constant name="struts.i18n.encoding" value="UTF-8"/>

 <!--设置浏览器是否缓存静态内容,默认为true,开发阶段建议关闭-->

 <constant name="struts.serve.static.browserCache" value="false"/>

 <!--Struts2配置文件修改后,是否自动重新加载该文件,默认为false-->

 <constant name="struts.configuration.xml.reload" value="true"/>

 <!--默认视图主题,如input标签的样式,使样式不受struts标签的影响-->

 <constant name="struts.ui.theme" value="simple"/>

 <constant name="struts.ui.templateDir" value="template"/>

 <constant name="struts.ui.templateSuffix" value="ftl"/>

 <!--该标签用于引入其它的xml配置文件-->

 <include file=""></include>

 <!--包标签,用于区分不同的请求文件-->

 <!--name属性:包名,用于被别的包调用或继承-->

 <!--extends:继承哪个包,会继承该包下配置信息和拦截器等等-->

 <!--namespace:选填-->

 <package name="default" extends="struts-default" namespace="/" >

 <default-action-ref name="testAction1" />

 <!-- 使用通配符配置action的各个方法,action相当于servlet的概念,对应一个请求 -->

 <!--name为请求的url地址-->

 <action name="user_*" class="userAction" method="{1}" >

     <!--返回的结果页-->

     <result>/index.jsp</result>

     <result name="input" >/err.jsp</result>

     <result name="load">/load.jsp</result>

     <result name="list">/list.jsp</result>

     <result name="list_load" type="redirectAction">

         <param name="namespace">/</param>

         <param name="actionName">user_list</param>

         <param name="page">${page}</param>

         <param name="pageSize">${pageSize}</param>

         <param name="msg">${msg}</param>

     </result>

     <result name="modify" type="redirectAction">

         <param name="namespace">/</param>

         <param name="actionName">user_load</param>

         <param name="uids">${user.id}</param>

     </result>

     <result name="addUser">/add.jsp</result>

     <result name="check">/my.jsp</result>

     <result name="no">/customer/login.jsp</result>

     <result name="center">/my.jsp</result>

 </action>

 <action name="index_*" class="indexAction" method="{1}">

     <result>/customer/index.jsp</result>

     <result name="group">/customer/group.jsp</result>

     <result name="input" >/err.jsp</result>

     <result name = "more">/customer/more.jsp</result>

     <result name = "play">/customer/player.jsp</result>

     <!--如果使用模型驱动,action类需要继承ModelDriver。以下加入模型驱动的拦截器-->

     <interceptor-ref name="modelDriven"/>

     <!--系统默认的拦截器-->

     <interceptor-ref name="default"/>

 </action>

 </package>

</struts>

六、数据封装

  • 1、属性驱动:需要在action中编写表单name中的所有属性并设置访问器和修改器,不需要模型类。
  • 2、模型驱动:action类需要继承ModelDriver<>,需要创建模型对象的实例m,需要实现getModel方法,返回模型对象m。使用时需要用模型对象名m.get来得到属性的值。
  • 3、标签实现模型驱动:需要定义模型对象m,不用实例化,使用时需要用模型对象名m.get来得到属性的值。jsp中需要引入标签库。
<%@taglib prefix = "s" uri="/struts-tags"%>

<s:form namespace = "" action="test" method="post">

模型名:<s:textfield name="m.testName" />

<s:submit value="提交"/>

</s:from>

注:使用<s:form >时,action中不要写全路径,写上action名字即可。标签结束处直接加"/"即可,否侧可能报错

朗读
赞 · 0
版权属于:

顿搜

本文链接:

https://dun.so/archives/173/(转载时请注明本文出处及文章链接)