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

黑马程序员--Struts2.3.7技术的汇…

2015-12-24 10:27 627 查看
--------android培训java培训期待与您交流------ 需求:定义一个用户注册系统:复习Struts2的所有知识点:1
表单数据封装:复杂数据类型和基本数据类型;2
输入校验:针对某个方法和针对所有方法,以及手动和基于xml文件进行校验,使用资源文件中的内容3 文件上传,多文件上传4 权限拦截,即拦截器,拦截器栈;5 防止表单重复提交的使用;6 struts2常用标签  :7 多种视图的使用;原样输出,转发,重定向8 类型转换:全局以及局部9 国际化资源文件的使用在一个应用中用到以上所有的知识点。前奏:导入开发jar包和准备配置文件,这些个配置文件我会在一起说明,有注释的。配置文件:web.xml:
<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

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

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

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

 <display-name></display-name>

 <filter>

  <filter-name>struts2</filter-name>

  <!-- struts使用的是过滤器启动的 -->

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

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

 <!--国际化资源文件的使用,value为基本名messageResource -->

 <constant name="struts.custom.i18n.resource" value="messageResource" />

 <!--动态方法调用,设置为false -->

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

 <!--指定编  式为UTF-8 -->

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

 <!--访问路径的后缀名设置.action -->

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

 <!--设置文件上 最大的容量 -->

 <constant name="struts.multipart.maxSize" value="2097152" />

 <!--jsp页面显示模式为simple -->

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

 <!--设置包名为user,必须要继承struts-default包,以使用struts的 心功能,名称空间设置为itcast -->

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

  <interceptors>

   <!--指定拦截器为permission,权限拦截,如果没有权限不允许操作 -->

   <interceptor name="permission"

    class="cn.itcast.web.struts.interceptors.PermissionInterceptor" />

   <!-- 定义一个拦截器  -->

   <interceptor-stack name="register">

    <!--使用这个权限拦截器,定义在系统拦截器之前 <interceptor-ref name="permission"></interceptor-ref> -->

    <!-- 使用系统拦截器,必须要使用 -->

    <interceptor-ref name="defaultStack"></interceptor-ref>

    <!-- 使用防止表单重复提交拦截器 -->

    <interceptor-ref name="token"></interceptor-ref>

   </interceptor-stack>

  </interceptors>

  <!--定义默认拦截器 ,当一个aciton没有指定拦截器时,将使用默认拦截器 ;出于本应用业务逻辑考虑,,将其注释起来,不使用 -->

  <!-- <default-interceptor-ref name="register"/> -->

  <global-results>

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

  </global-results>

  <!--使用通配符的方式对处理请求的方法进行匹配,class:指定某个类 射为register_*action;还可以指定类型转换器当然是针对指定方法的;

   converter="DateTypeConverter" -->

  <action name="register_*" class="cn.itcast.web.struts.actions.RegisterAction"

   method="{1}">

   <!--使用拦截器  ,默认设置的拦截器 将不起作用 -->

   <interceptor-ref name="register" />

   <!--设置视图名称为input,一般为错误消息显示页面,type,指定跳转方式,默认是dispatcher,即内部请求转发 -->

   <result name="input" type="dispatcher">/WEB-INF/page/register.jsp</result>

   <!--设置视图名称为success,默认为success,跳转类型为,重定向,但是重定向的路径不能在WEB-INF目录下 -->

   <result name="success" type="redirect">/message.jsp</result>

   <!--invalid.token视图 ,当用户重复提交表单后跳转到这个页面; -->

   <result name="invalid.token">/tokenerror.html</result>

  </action>

  <action name="fileupload" class="cn.itcast.web.struts.actions.FileUploadAction">

   <result name="message" type="redirect">/message.jsp</result>

   <result name="input">/WEB-INF/page/upload.jsp</result>

  </action>

  <!-- action名称为registerui,还有一个converter即转换器,局部类型转换器 类名和方法没有指定的话,默认为;ActionSupport,execute,还可以使用通配符; -->

  <action name="registerui">

   <!-- 结果视图为指定,则默认为success;类型未指定,表示转发,重定向不能定位到web-inf目录下; -->

   <result>/WEB-INF/page/register.jsp</result>

  </action>

  <action name="fileuploadui">

   <result>/WEB-INF/page/upload.jsp</result>

  </action>

  

 </package>

</struts>

据配置文件整体的说下整个程序的流程;

首先在index.jsp页面挂出两个超链接,文件上 和用户注册,这 个超链接的地址是采用的struts的url 签;

点击超链接后会跳转到一个jsp页面,即注册或者文件上 页面,这是 为我们将这些页面配置成了一个action, 此可以用struts的url 签;不至于将路径写死,这是很优雅的方式;

当我们进入注册页面后,form表单采用的是struts,同 可以直接写action名称,在form表单中 入了token 签,防止表单重复提交;

定义的提交路径是一个action,对这个jsp表单或者说action进行处理,比如类型转换,表单封装和输入 验,权限拦截等;

如果 验不通过则还是跳到这个页面,通过fieldError,进行显示错误消息;如果是表单重复提交,则跳到相应的页面进行显示提示消息;

如果提交成功则跳转到全局消息显示页面,给用户友好提示,提示用户的操作,并在session中存储一个 记。

文件上 页面类似的思路;

 
 这是整个程序的架构,下面分别对每个模块进行分析解释;转发至微博 转发至微博阅读(0)|
评论(0)|       用微信  “扫一扫”将文章分享到朋友圈。 用易信  “扫一扫”将文章分享到朋友圈。 喜欢 推荐 0人  | 
转载 

历史上的今天

最近读者

热度


在LOFTER的更多文章

关闭玩LOFTER,免费冲印20张照片,人人有奖!     我要抢>

评论

this.p={ m:2,
b:2,
loftPermalink:'',
id:'fks_087065092087084068093082082070072084080068086081080065084095',
blogTitle:'黑马程序员--Struts2.3.7技术的汇总之一',
blogAbstract:'\r\n
--------android培训java培训期待与您交流------\r\n 需求:定义一个用户注册系统:\r\n
复习Struts2的所有知识点:1
表单数据封装:复杂数据类型和基本数据类型;2
输入校验:针对某个方法和针对所有方法,以及手动和基于xml文件进行校验,使用资源文件中的内容3 文件上传,多文件上传4 权限拦截,即拦截器,拦截器栈;5 防止表单重复提交的使用;6 struts2常用标签  :7 多种视图的使用;原样输出,转发,重定向8 类型转换:全局以及局部9 国际化资源文件的使用在一个应用中用到以上所有的知识点。\r\n前奏:导入开发jar包和准备配置文件,这些个配置文件我会在一起说明,有注释的。', blogTag:'', blogUrl:'blog/static/2172762092013330811373',
isPublished:1, istop:false, type:0, modifyTime:1400160349048,
publishTime:1367323786389,
permalink:'blog/static/2172762092013330811373', commentCount:0,
mainCommentCount:0, recommendCount:0, bsrk:-100, publisherId:0,
recomBlogHome:false, currentRecomBlog:false, attachmentsFileIds:[],
vote:{}, groupInfo:{}, friendstatus:'none',
followstatus:'unFollow', pubSucc:'', visitorProvince:'',
visitorCity:'', visitorNewUser:false, postAddInfo:{}, mset:'000',
mcon:'', srk:-100, remindgoodnightblog:false, isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'JAVA软件工程师,有扎实的Java基础,熟悉JavaEE技术,对框架的底层原理熟悉,学习能力强。',
hmcon:'0', selfRecomBlogCount:'0', lofter_single:'' }{list a as x}
{if !!x}
{if
x.visitorName==visitor.userName}

{else}
{/if}
{if x.moveFrom=='wap'}   {elseif
x.moveFrom=='iphone'}   {elseif
x.moveFrom=='android'}   {elseif
x.moveFrom=='mobile'}   {/if}
${fn(x.visitorNickname,8)|escape}{/if} {/list}{if !!a}
${fn(a.nickname,8)|escape}
${a.selfIntro|escape}{if
great260}${suplement}{/if} 

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