初识web架构mvc之struts框架

Struts框架:

Jsp—>Servlet—>DAO—>Servlet—>Jsp;
    |               |
重复 重复
// Struts框架解决:重复和不便维护的地方:
DAO的重复部分!
1.Jsp中显示传递的数据时使用<%...getAttribute%> 显示,并且要穿插HTML代码;
2.Servlet中接收参数和跳转路径的设置,会带来后期维护的问题;
以上是Struts框架要解决的问题;
Struts是MVC设计模式的一个具体实现!
以前的Jsp+Servlet+DAO是另一种MVC的实现!
Struts框架有Apache组织的开源框架!
Struts框架内部实现了Servlet以及servlet跳转,这个过程需要的配置在Struts-config.xml中;
Struts继承的servlet是当前框架固定的实现,用户只可以使用,不能修改!
提交到Struts的actionServlet的url-pattern:1.*.do,2./do/*
2表示web根目录下的虚拟目录/do/。。
Struts config path: Struts核心配置文件路径:所有关于Struts的配置,包含在该文件中,
设置ActionServlet名称:自定义;
ActionServlet作用:为了是提交的路径可以跳转到Struts编写的类中,需要一个Servlet
来统一管理跳转的路径,当提交时路径包含.do的时候,表示该提交跳转到Struts;
myeclipse项目中增加Struts支持后:项目中增加的内容:
1.项目中多了Struts和Struts用到的支持jar包;
2.在WEB-INF下加入了核心配置文件:
3.在WEB-INF下加入了标签文件的支持:tld;
4.加入了动态验证规则文件;
5.在src下多了一个资源文件;
6.在web.xml中加入了ActionServlet的配置;
—-使用Struts1.2:
1.配置完成后的web项目;
2.新建web页:登录页:新建一个‘。。。jsp 。。with a form’;表示代一个表单的jsp登录页;
3.该页面中自动添加了struts实现的常用到的标签库文件声明,而且struts不必在当前页面导入java包,因为框架内置了;
<%@taglib uri="" prefix=""%>语法
      |-表示某个标签库将被使用;
      |-uri,表示要使用的标签库定义文件所在的url标识符,使用该uri可以定位到使用的标签库文件;
      |-prefix,表示前缀,属于名称空间,可以通过前缀调用库里的标签;
4.登录页表单的配置:
action属性:action=“login.do”; // 必须符合*.do—-(因为前面配置为*.do);     
5.登录页完成后,要创建替代Servlet功能的Action与ActionForm
myeclipse–新建–Struts1.2 Action&Jsp—Struts1.2 FormBean(类似于VO)
配置ActionForm:用于代替Servlet接收参数和完成验证功能;
《1》use case:表示前面配置的映射ActionServlet
的url-pattern的名称 :如:login.do中的login;
《2》添加属性:类似VO的属性!但属性名称、类型必须与要提交过来的jsp页面设置的一致!
创建Struts1.2Action并配置:
// action的功能:调用DAO、处理业务逻辑,进行跳转等Servlet的其他功能!
1.配置文件,同上;
2.path:/login同use case;
3.Form配置:1.类型:loginForm:登录有表单;
            2. Scope:request;
            3. 选择验证表单;
            4.Input Source:表示出错误时可以跳转到的页面:这里是login。jsp;
// 可以看到Struts-config.xml中生成了Action与ActionForm;
1.ActionForm是首先的操作:接收参数并验证;
生成set、get方法,
实现验证:validate,主要验证前台输入的非空和非法;取代了javaScript非安全验证;
非空:null || …trim().equals(“”);
非法:。。。。
2.Action:其他操作:
处理ActionForm传递过来的数据,并控制必要的转发逻辑.

———–struts:
先写DAO,
JSP–web.xml—servlet与servlet mapping—servlet(接收参数、验证、调用DAO)—跳转到不同页面;
struts:
JSP–web.xml—ActionServlet(url-pattern *.do)–struts-config.xml(根据path路径找到对应的Action对象与ActionForm对象–ActionForm对象—validate方法验证,如果验证无误进入Action对象否则返回错误页,—–Action对象—调用DAO进行逻辑判断—成功时跳转到struts-config.xml:forward)成功页,失败时返回错误页(struts-config.xml:forward);
struts-config.xml:
1.配置formBean:
        |-form-beans标签标示配置formBean的,form-bean标示一个ActionForm对象;
|-name,标示该ActionForm(FormBean)对象的名称标识(唯一),
|-type,表示该ActionForm对象的完整包.类名称;
2.配置action:

       
               
       


|- ‘/’表示webroot根目录为标准;
|-可以配置多个action;
|- action中的属性:
|- name(attribute)表示该Action对象对应的ActionForm对象的名称(name属性),
|-一个ActionForm对象可以同时被多个Action对象所共享,但一个Action对象只能使用一个ActionForm对象,其对应关系在标签
中定义;
|- input=”出错时跳转的页面”;
|- path表示该Action对象的虚拟路径,必须有/,而且不必加.do的后缀,其内容和form表单的action一致:
|- scope表示当前Action对象所保存的属性范围,request表示一个请求建立一个Action对象;
|- forward标签,表示可以当前Action对象中可以定义的跳转页面,使用的时候需要使用其中的name属性来调用跳转的页面,path则表示跳转的路径;

|- 表示当前Action对象使用的资源文件,保存必要的消息和错误消息,
|- parameter,表示资源文件所在的完整包路径;
|- 资源文件的扩展名:*.properties;
表示数据源;
        // 全局公共异常
       
       


   // 全局公共跳转路径
       

—struts标签库:
1。<%@taglib uri="https://。。。" prefix="..."%>
bean标签: 处理属性范围内的属性,可以对其进行复制、添加、和显示并完成国际化功能;
logic标签:用来完成页面上的逻辑判断和迭代循环;
html标签:用来替代HTML页面元素的标签;
bean:
1。bean:define ,用来创建或复制一个属性范围中的属性的;// 属性范围:指四种属性范围:pageContext(当前页),request, session, application,
创建属性:

等价于:

<% pageContext.setAttribute("username", "k187")%>

|- id 属性的名称, value 该属性的值,只能是String;
属性范围的属性可以用:${username}输出;
复制属性:(用于将复制的属性提升存在的属性范围)

|- id 表示复制后的属性名,name表示被复制的属性名,
|- 往往加上scope、toScope属性,重新定义复制以后的属性的属性范围;
|- name表示复制,value表示新建属性,两者不可以用在一块!

|- scope:表示被复制的属性的属性范围,默认是四种属性范围(从page开始搜索直到找到)toScope表示复制后的属性的属性范围(默认是page范围),
这里属性范围由page—session范围,则myusername可以在session范围内取到,而username只能在page范围;

<%=session.getAttribute("myusername")%> ${username}

复制vo对象中的属性:
前提:该vo对象是指定属性范围可以访问到的属性:

<%

Person p = new Person();

p.setUsername(“k187”);

p.setPassword(“123”);

p.setAge(56);

p.setBirthday(new java.util.Date());

pageContext.setAttribute(“persion”, p); // 当前vo对象p的属性名:person,属性范围是当前页

%>

|- name,表示被复制的vo对象;
|- property,表示该vo对象的内部属性,将被复制
${mydate} 将打印当前日期;
bean:size标签:表示属性范围中的List(集合或数组)类型的size属性,可以避免使用<% ...%>;

<%

List all = new ArrayList();

all.add(“abc”);

all.add(“bcd”);

all.add(“k187”);

pageContext.setAttribute(“all”, all);

%>

${all}

|- scope,表示集合对象可以取到的属性范围;
bean:include,将页面中的所有代码包含到当前页面,等价于 <%@include path="" %>

${myinclude}

bean:write标签,与EL表达式显示有些区别:

<%

request.setAttribute(“myname”,”k187” );

%>

BeanWrite:

EL:${myname}

可以发现:EL表达式:将解释处理属性中的html代码;
而bean:write只显示属性的源代码,不解释html代码;
当然可以控制beanWrite的行为:

|- filter为TRUE表示对html代码不进行编译处理,默认为TRUE;
|- 若为false等价于EL表达式;
|- EL表达式不能定义属性范围;
bean:write还可以对日期和数字进行格式化显示;
日期: 若显示:yyyy-MM-dd;

<%

request.setAttribute(“mydate”,new Date());

%>

${mydate }

可以发现bean:write自动按照format指定的模板格式化日期;
金额: 若显示:3,222,555,678,123.54;

<%

request.setAttribute(“mymoney”,53639289329023.55);

%>

EL: ${mymoney}

可以发现bean:Write显示为:每3个数字加逗号,小数点后两位;
#和0都表示一位数字,#,##0.00表示显示格式为:3位数字,3位数字.2位数字;
#和0的区别: #在当前位数字不存在时不显示,而0会自动补0;
一般在小数点前一位至少为0,当钱数小于1元时,会显示:0.XX;此时就要用0来表示该位的正则,表示没有数字时以0代替;
对应日期、数字格式的设置除了以上在使用时定义外,还可以在资源文件中统一设置全局的日期、数字格式;
用于开发专业大型系统如:银行系统对金额格式的特殊要求;
在ApplicationResources.properties资源文件中添加显示格式:
常用的3个类分别格式化对应的3种范围的数据类型:
1。org.apache.struts.taglib.bean.format.date->java.util.Date
2. org.apache.struts.taglib.bean.format.int->Byte, Short, Integer, Long, BigInteger
3. org.apache.struts.taglib.bean.format.float->Float.Double.BigDecimal
如下配置:

org.apache.struts.taglib.bean.format.date=yyyy-MM-dd

org.apache.struts.taglib.bean.format.int=#,##0.00

org.apache.struts.taglib.bean.format.float=#,##0.00

以后,直接使用bean:write输出;
如果同时使用了单独编写的format格式,会按照单独编写的格式进行处理;
–struts国际化:
需要使用bean:message标签,需要资源文件(源)的支持;
由于需要完成多个语言的显示,因此要建立多个资源文件,同时要求资源文件的命名必须规范;
资源文件的命名规则:
以原有资源文件为基准:在其文件名后加“_语言编码标识”:ApplicationResources_zh-cn.properties表示简体中文(中国)的资源文件;
ApplicationResources_en-us.properties表示美国英语的资源文件;
可见资源文件的配置,可以指出语言以及所在的地区,(local对象)当然也可以只有语言:ApplicationResources_en.properties;表示英语的资源文件;

—–struts定义:
struts是实现MVC开发模式的web框架,主要负责控制和显示,没有限制数据库的操作’

—–struts框架配置文件:
在web.xml中传递config参数:

action

org.apache.struts.action.ActionServlet

config

/WEB-INF/struts-config.xml,/WEB-INF/struts-config-XXX.xml

debug

3

detail

3

0

action

*.do

—struts-config.xml的通配符使用:

attribute=”loginForm”

input=”/form/login.jsp”

name=”loginForm”

path=”/form/login”

scope=”request”

validate=”true” type=”com.k187.struts.action.LoginAction”>

struts对多个请求的处理称为struts分发请求过程;
使用struts-config.xml中对action-mappings标签path属性用通配符自定义匹配或者使用web.xml中传递多个配置文件给config参数;
———struts-config.xml实例:

“-//Apache Software Foundation//DTD Struts Configuration 1.3//EN”

“https://struts.apache.org/dtds/struts-config_1_3.dtd”>

name=”logonForm”

type=”app.LogonForm”/>

path=”/Welcome”

forward=”/pages/Welcome.jsp”/>

path=”/Logon”

forward=”/pages/Logon.jsp”/>

path=”/LogonSubmit”

type=”app.LogonAction”

name=”logonForm”

scope=”request”

validate=”true”

input=”/pages/Logon.jsp”>

name=”success”

path=”/pages/Welcome.jsp”/>

name=”failure”

path=”/pages/Logon.jsp”/>

path=”/Logoff”

type=”app.LogoffAction”>

name=”success”

path=”/pages/Logoff.jsp”/>

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《初识web架构mvc之struts框架
本文地址:http://www.xiupu.net/archives-207.html
关注公众号:嗅谱网

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!