Struts开发步骤
1、创建数据库;
2、写实体对象,在项目中导入sql的jar包,并写数据库的连接代码;
3、写数据库的操作接口,写相应的实现方法;
4、写实体的form类,form必须继承ActionForm;
5、在struts-config.xml中配置form;配置格式如下:
<form-beans>
<form-bean name="form别名" type="form的路径">
</form-bean>
</form-beans>
6、编写显示页面,注意使用struts的标签,在表单提交时的action为:
<html:form action = “xx.do?operate=action操作的名称” method=“”>
7、写action类,可以把所有的处理action写在一个action中,但是这个处理action必须继承自DispatcherAction;本来是要重写它里面的execuate方法的,现在只需将execuate方法名称改为上面提交的action操作的名称;注意方法后面的参数为:ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response;
8、写filter用来处理struts中的乱码问题,在web.xml中配置;格式如下:
<filter-mapping>
<filter-name>filter名称</filter-name>
<url-pattern>/xx.do</url-pattern>
</filter-mapping>
9、配置struts-config.xml中的action-mapping;格式如下:
<action-mappings>
<action
path="/ action操作的名称" parameter="operate" scope="request" type="action的路径" input="/action处理后去的地方"
name="form别名">
<forward name="search" path="/action处理后去的地方"></forward>
</action>(这里的forward效果跟上面的input作用基本想同,如果用forward的话,在action出来后return时用mapping.findForward(“action处理后去的地方”);如果用input的话return时用mapping.getInputForward();
</action-mappings>
Struts的工作工作原理图
1,首先通过ActionServlet的url-pattern属性将所有“*.do”的请求拦截。
2,打开ActionServlet的源码可以发现,它的process方法很简单,只是调用RequestProcessor的process方法,把自己request和response传给RequestProcessor的process方法,从而实现业务委托。而RequestProcessor是哪儿来的呢?打开struts的配置文件,会发现里面的<controller>节点里定义的className就是对RequestProcessor的定义。
3,RequestProcessor的process方法这是会创建ActionMapping对象(根据<actionMapping>下的<action>建立),否则就报404错误,比如请求的是/add.do,那么在创建ActionMapping对象时就会找<action>里path为”/add”的,如果找到了,就创建ActionMapping对象,找不到就报404。
4,创建ActionForm对象,从3里创建的ActionMapping对象取得当前ActionForm的名称,根据type创建一个ActionForm对象(如果存在,就不创建)。
5,通过3中的ActionMapping对象创建Action对象,并调用它的execute方法。
6,通过3中的ActionMapping对象创建ActionForward对象。(实际上就是个Map)
Struts标签的使用
1、Struts标签库的引入:
² <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
² <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
² <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
2、Struts标签库的分类:
² html标签库:text、select、option、optionCollection
² logic标签库:empty、equal、iterate
² bean标签库:write、define、size
3、Struts标签的通用属性:id、name、property和scope
Id:自定义标签创建的脚本变量名;
Name:指出作用域范围里的bean名字。
Property:指出Form中的某个属性,可以在其中检索值。如果没有标明,则使用对象本身的值;
Scope:定义了bean在什么范围类使用;
4、使用html标签简化用户查询,根据用户名和籍贯查询,当前页显示
<html:form action=“search.do" method="post">
用户名:<html:text property=“user.uname" />
静态籍贯:<html:select property=“user.address">
<html:option value="">不限</html:option>
<html:option value=“shanxi”>陕西</html:option>
<html:option value=“henan”>河南</html:option>
</html:select>
动态籍贯:<html:select property=“user.address">
<html:optionsCollection name=“addrList" label=“aname" value=“aid" /></html:select>
</html:form>
5、使用loigc:iterate标签在当前页面输出查询结果:
<c:forEach items="${list}" var=“user">
${user.name}
…
</c:forEach>相当于:
<logic:iterate id=“user" name="list">
…
</logic:iterate>
6、bean:write用于数字和日期的格式化显示:
<logic:iterate id=“user" name="list">
<bean:write name=“user" property=“salary" format="#,###" />元
<bean:write name=“user" property=“birthday" format="yyyy年MM月dd日" />
</logic:iterate>
7、 bean:define标签没有输出,根据其name和property属性取得Bean并重新定义,以其id属性为名,定义变量供JSP脚本使用,并定义pageScope的Bean供其他标签使用。<bean:define id="dataList" name="list" type="java.util.List" scope="request" /> 共找到 <%=dataList.size()%>条记录
8、 bean:size标签以其id属性为名,重新定义变量,变量的值为通过name和property取得的集合元素的元素个数。<bean:size id="count" name="list" /> 共找到 ${count }条记录
9、注意:
1,要使用bean:write格式化数字,数字在actionForm或实体类中必须是数值类型
2,要使用bean:write格式化日期,日期在actionForm或实体类中必须是java.util.Date类型