Struts1框架的原理,开发流程,配置与入门案例

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()方法

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

clip_image002

clip_image004

clip_image006

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

<action

path=“/register(用户请求的路径) 在jsp中使用“

type=“cn.itcast.RegisterAction(该请求对应的分控制器全路径)控制器的相对位置”

name=“UserFormBean(需要使用的ActionForm的名字)“

scope=”request(ActionForm放置在哪个域对象中)”

attribute=“myformbean”(绑定到域对象中ActionForm的名字,不写的话,默认与name属性值一致)

include=”welcome.jsp(包含的页面”

forward=“welcome.jsp(转发的页面) 在浏览器直接输入*.do可以转发到配置的页面“

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标签包 IDEA中会自动导入

b)在需要使用标签的jsp页面通过<@taglib%>引入

c)<html:link>标签的好处如下:

>>具有<a>标签功能

>>具有URL重写功能,即当浏览器禁用Cookie时,依然可以使用

>>具有非英文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)如何进行数据显示,例如:下拉框,复选框。

分而治之:

不同的控制器有不同的功能

0准备

a)将Servlet中大量的请求分发的代码写入一个外部文件中,便于灵活配置和响应需求

b)

1.框架的定义

a)别人写好的软件,主要是从事基础性工作,需要程序员做配置功能

b)该软件是类的集合,主要为某一功能服务

c)框架只适合于某一领域范围

2.Struts1的开发步骤

a)参见文末

3.自动封装用户的请求数据

开发参数收集器的步骤:

a)写一个类扩展ActionForm

b)写一个实例变量,该实例变量与参数名一致,大小写相同

c)为每个实例变量提交setter和getter方法,框架会使用setter方法将参数传入

4.基于struts-config的重定向

6.Struts的工作流程

背景:

2001年 Web框架,基础性服务 程序员在基础服务上定制服务 1.0 祖先

WebWord框架

2007,8年 Struts2框架=Struts1(40%)+WebWork(60%)[流行]

1.2

2011年 JSF框架(JavaEE5规范之一) 经过三个版本的革命 1.3

问题:

特点

好处

不足

例子:

注册

jsp-> 核心控制器->struts-config.xml

->分控制器 RegisterAction

实战:

10个lib包

开发步骤

1.创建一个day27的web应用

2.将struts1.3相关的jar包加载到lib目录下

3.修改web.xml 和struts-config.xml

注意:Struts1核心控制器默认接收的请求是*.do

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()方法

@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页面

传统转发方法

request.getRequestDispatcher().forward(request,response);

struts框架的方法

配置一个action,使用false表示转发,true表示重定向

EL表达式使用方法 ${registerForm.参数}

维护的最高目标是不修改任何源代码

作业:

clip_image008

张 大鹏

北京理想国惠玩科技有限公司CEO

发表评论

电子邮件地址不会被公开。 必填项已用*标注