javaweb开发之框架 struct1

0 准备
a)将Servlet中大量的请求分发的代码写入一个外部文件中,便于灵活配置请求和响应资源
b)将Servlet中大量分散的方法,使用不同的分控制器类来替代,便于按类型集中控制

1 框架的定义
a)别人写好的软件,主要是从事基础性的工作,需要程序员自行修改配置,因此框架是个半成品
b)该软件是类的集合,主要为某一功能服务
c)框架只适合于一定的领域范围,Struts1框架只适合于Web领域

*2 Struts1开发步骤
a)参见<<Struts1开发步骤.txt>>

1 创建day27的web应用

2 加入strust1.3相关的jar包到WEB-INF/lib/目录下(至少10个)

3 修改WEB-INF/web.xml和struts-config.xml文件
web.xml文件内容如下:
<web-app>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>[Struts1核心控制器默认接收的请求为*.do]
</servlet-mapping>
</web-app>

struts-config.xml文件内容如下:
<struts-config>
<action-mappings>
<action
path="/register"(用户请求的路径,/表示当前web应用,无需写.do)
type="cn.itcast.web.struts1.action.RegisterAction"/>(该请求由哪个分控制器处理)
</action-mappings>
</struts-config>

4 写一个register.jsp页面
<form action="/day27/register.do" method="post">

5 写一个分控制器RegisterAction.java,该分控制器一定要扩展Action类,覆写execute()方法
//分控制器
public class RegisterAction extends Action{
//覆写execute()方法,这个地方应该注意,必须覆盖这个有httpservletresponse的方法
@Override
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
System.out.println("用户名:" + username);
return null;
}
}

6 部置该Web应用,访问register.jsp页面

 

 

 

 

*3 自动封装用户的请求数据
开发RegisterForm的步骤:
a)写一个类扩展ActionForm
b)写实例变量,该实例变量与参数名一致,大小写不同
c)为每个实例变量提交setter和getter方法,框架会使用setter方法将参数传入,在Action中使用getter方法取
出参数值
d)在struts-config.xml文件中配置
<form-beans>
<form-bean
name="registerForm"(RegisterForm的在域中名字)
type="cn.itcast.web.struts1.form.RegisterForm"/>(RegisterForm的全路径名)
</form-beans>
<action-mappings>
<action
path="/register"
type="cn.itcast.web.struts1.action.RegisterAction"
name="registerForm"(表示使用哪个ActionForm的名字)/>
</action-mappings>

*4 基于struts-config.xml的配置转发或重定向
return ActionForward("需要跳转的页面","false表示转发"或"true表示重定向")
ActionForm默认放置在request域中。

<action
path="/register"
type="cn.itcast.web.struts1.action.RegisterAction"
name="registerForm"
scope="request">
<forward
name="toSuccessJsp(与Action一致的普通字符串)"
path="/success.jsp(跳转的真实路径)"
redirect="false"(false转发true重写,默认为false)/>
注意:在struts-config.xml文件中,/表示当前web应用,即day27
</action>

*5 读struts源码和描述struts工作流
a)struts1的核心控制器本质上就是一个标准的HttpServlet。
b)参见<<struts1工作流.JPG和struts1代码创建图.JPG>>

6 struts-config.xml配置文件常用属性的使用

<action
path=“/register(用户请求的路径)“
type=“cn.itcast.RegisterAction(该请求对应的分控制器全路径)"
name=“UserFormBean(需要使用的ActionForm的名字)“
scope="request(ActionForm放置在哪个域对象中)"
attribute=“myformbean"(绑定到域对象中ActionForm的名字,不写的话,默认与name属性值一致)


include="welcome.jsp(包含的页面"
forward=“welcome.jsp(转发的页面)“

unknown= “true(表示如果所有的path路径都配对,执行unknown为true所在的页面,类似于省略的Servlet配置)"
parameter=“method(请求参数)”类似于,href="/day27/findAllType?method=findAllType"
classname=“<action标签底层处理类>,一般不用变”


input="register.jsp(如果验证错误,则进入input属性所指示的页面)"
validate="true(true表示需要验证(数据格式)ActionForm,false表示无需验证ActionForm)" >
如果验证正确,则进入Action对应的execute()方法
如果验证错误,则进入input属性所指示的页面


<forward name="hello(跳转的字符串,与Action中一致)"
path="/success.jsp(跳转的真实页面路径)"
redirect="false"(跳转的方式,要么重定向,要么转发,默认false转发)/>

 

</action>

7 struts专用标签<html:link/>的使用
a)导入struts标签包
b)在需要使用标签的jsp页面通过<@taglib%>引入
c)<html:link>标签的好处如下:
>>具有<a>标签功能
>>具有URL重写功能,即当浏览器禁用Cookie时,依然可以使用,这里用到是jisession
>>具有非英文URL自动编码,自动域中检索


*8 表单项数据格式校验
a)写一个类扩展ActionForm
b)重写validate()方法
c)ActionErrors表示错误集合
d)ActionMessage("显示的错误消息",false)表示一个错误消息
e)ActionMessage("显示的消息的key,value要么查询资源文件",true)表示一个错误消息



*9 错误信息显示[传统/现代]
a)传统:
ActionErrors errors = (ActionErrors)request.getAttribute("org.apache.struts.action.ERROR");
if(errors!=null){
Iterator<ActionMessage> it = errors.get("username");
while(it.hasNext()){
ActionMessage am = it.next();
String info = am.getKey();
out.write("<font color='red'>"+info+"</font>");
}
}
b)现代:
使用<html:errors/>一次性将所有的错误消息显示出来
注意:需要使用message.properties属性资源文件,在struts-config.xml文件中配置如下代码:
<message-resources parameter="cn/itcast/web/struts1/config/message"/>

c)对于日期检证,需要使用
DateLocaleConverter dlc = new DateLocaleConverter(Locale.CHINA,"yyyy-MM-dd");
dlc.convert(this.birthday);


思考:

1)如何对中文乱码进行处理

2)如何进行数据显示,例如:下拉框,复选框。

 

 

 

 

 

 


posted @ 2013-05-08 18:02  蓝冰悠见  阅读(1014)  评论(0编辑  收藏  举报