Struts是Apache基金组织中Jakarta项目组的一个开源项目。主要实现MVC设计模式,其操作本质仍然是JSP、Servlet、JavaBean等技术应用。
在struts中一共提供了4种标签。
NO | 标签库 | 描述 |
1 | Bean标签 | 管理JSP页面中的Bean操作 |
2 | Logic标签 | 完成各种逻辑控制操作 |
3 | Html标签 | 显示标签,主要是生成HTML标记 |
4 | TILES标签 | 使用动态模板构造显示页面 |
5 | NESTED | 使用潜逃标签进行复杂的页面显示 |
下面是MVC与Struts中各个组件的对应关系。MVC是标准,Struts是实现,实现了此接口。
NO | 组成部分 | 传统MVC | Struts |
1 | 试图(view) | JSP(可加入JSTL减少页面代码) | 在传统页面中提供了标签库的支持 |
2 | 控制器(Controller) | Servlet | Action |
3 | 模型(Model) | JavaBean | ActionForm JavaBean |
配置完之后我就就需要在WEB-INF文件夹中简历struts-config.xml的核心文件。内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration1.3
//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans></form-beans> //用于配置ActionForm
<global-exceptions></global-exceptions>//用于配置全局异常
<global-forwards></global-forwards>//用于配置全局跳转
<action-mappings></action-mappings>//用于配置Action
<message-resources parameter="cn.edu.fzy.struts.ApplicationResources"></message-resources>//用于配置资源文件路径,资源文件保存在文件夹WEB-INF\classes文件夹中,通过parameter属性指定路径及文件名称,文件名称后缀是properties。
</struts-config>
然后配置web.xml文件
此处实际上配置的是一个ActionServlet,此映射路径是*.do;在Struts中配置的*.do的映射已经是一个注明的标志,一般当看到提交路径是以此种形式表示的基本上都属于Struts开发的项目。
<servlet></servlet-mapping>
接着配置web.xml文件,增加标签库配置
<jsp-config>
<taglib>
<taglib-uri>http://edu.com.struts/bean</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://edu.com.struts/logic</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://edu.com.struts/html</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
</jsp-config>
其一共提供了5大类标签库,即bean, logic, html, nested ,tiles后面两个很少用。
这就是它的基本配置。
下面看以第一个Struts程序
首先建立页面,引入tablib标签库。
<pre code_snippet_id="419333" snippet_file_name="blog_20140706_1_1272478" name="code" class="html"><%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="<span style="font-size: 18px; ">http://edu.com.struts/html</span>"%>
<pre name="code" class="html" style="font-size: 18px; "><%@ taglib uri="<span style="font-size: 18px; ">http://edu.com.struts/bean</span>"%>
<%@ taglib uri="<span style="font-size: 18px; ">http://edu.com.struts/logic</span>"%>
<html:html lang="true">
<body>
<span style="white-space:pre"> </span><html:errors/>
<span style="white-space:pre"> </span><logic:present name="msg"scope="request">//使用<logic:present>属性判断request内是否存在msg属性
<span style="white-space:pre"> </span>${msg}
<span style="white-space:pre"> </span></logic:present>
<span style="white-space:pre"> </span><html: form action="/Demo/hello.do" method="post">
<span style="white-space:pre"> </span>输入信息:<html:text property="info"></html:text>
<span style="white-space:pre"> </span><html:submit value="显示"></html:submit>
<span style="white-space:pre"> </span></html:form>
</body>
</html:html>
上边也可以使用普通的HTML标签。下面在hello.jsp页面中输出所有的错误信息,所有信息由ActionForm和Action进行设置。
更需要注意的是表单提交的路径是hello.do,这个路径需要在struts-config.xml文件中进行配置。
建立ActionForm--------HelloFrom.java
package cn.edu.fzy.struts; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.mvel2.util.ThisLiteral; public class HelloForm extends ActionForm { private String info; @Override public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { // TODO Auto-generated method stub ActionErrors errors=new ActionErrors(); if (this.info==null||"".equals(this.info)) { errors.add("info",new ActionMessage("error.info")); } return errors; } @Override public void reset(ActionMapping mapping, HttpServletRequest request) { } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } }
然后我们定义Action---------HelloAction.java
package cn.edu.fzy.struts; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public class HelloAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // TODO Auto-generated method stub HelloForm helloForm=(HelloForm) form; String info=helloForm.getInfo(); request.setAttribute("msg", info); return mapping.findForward("show"); } }