初识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:
|-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,将页面中的所有代码包含到当前页面,等价于
${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参数:
—struts-config.xml的通配符使用:
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”>
type=”app.LogonForm”/>
forward=”/pages/Welcome.jsp”/>
forward=”/pages/Logon.jsp”/>
type=”app.LogonAction”
name=”logonForm”
scope=”request”
validate=”true”
input=”/pages/Logon.jsp”>
path=”/pages/Welcome.jsp”/>
path=”/pages/Logon.jsp”/>
type=”app.LogoffAction”>
path=”/pages/Logoff.jsp”/>
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《初识web架构mvc之struts框架》
本文地址:http://www.xiupu.net/archives-207.html
关注公众号:
微信赞赏
支付宝赞赏