19.JavaWeb基础 Struts 1标签

来源:互联网 发布:java在线客服聊天系统 编辑:程序博客网 时间:2024/05/16 09:41






一.Struts标签简介

  在Struts中为了方便用户的开发依然提供了很多成型的标签库。无论哪种标签库实际上

都是与四种属性(page、request、session、application)范围有关的操作,所以

JSTL和Struts标签库是完全可以混合使用的。但是是这种情况基本不可能出现,因为Struts

标签库已经具备了完全的功能,直接使用即可,一般在不实用Web框架时就会使用JSTL。





以下主要介绍三个核心标签库:html、bean、logic。






二.Bean标签

Bean标签库的主要作用是定义和访问JavaBean。




<bean:define>定义变量:


s2.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"prefix="bean"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-html"prefix="html"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"prefix="logic"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>s2.jsp</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><bean:define id="info" scope="page">CaMnter</bean:define><bean:define id="message" value="Save you from anything 07"></bean:define><h2>内容1:${info }</h2><h2>内容2:${pageScope.message }</h2></body></html>






<bean:define>复制JavaBean对象:


s3.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"prefix="bean"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-html"prefix="html"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"prefix="logic"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>s3.jsp</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><jsp:useBean id="copyBean" class="com.zyy.struts.vo.CopyBean" scope="page"></jsp:useBean><jsp:setProperty property="message" name="copyBean" value="Save you from anything 07"/><bean:define id="info" name="copyBean" property="message"></bean:define><h2>复制后:${info }</h2></body></html>



<bean:define>中的id属性可以设置你给变量起的名或者你给复制过来的JavaBean起的名

name表示要复制的JavaBean的id。



CopyBean.java:

package com.zyy.struts.vo;public class CopyBean {private String message;public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}}












<bean:size>标签:


s4.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"prefix="bean"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-html"prefix="html"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"prefix="logic"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>s4.jsp</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><%List me = new ArrayList() ;me.add("CaMnter") ;me.add("Save you from anything 07") ;pageContext.setAttribute("me", me) ;%><bean:size id="length" name="me" scope="page"/><h2>长度:${length }</h2></body></html>








<bean:cookie>标签:


s5.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"prefix="bean"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-html"prefix="html"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"prefix="logic"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>s5.jsp</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><bean:cookie name="user" id="myCookie" value="CaMnter"/><%//保存3000秒myCookie.setMaxAge(3000) ;response.addCookie(myCookie) ;Cookie cookies[] = request.getCookies() ;for(Cookie cookie : cookies){%><h3><%= cookie.getName()%>  -->  <%=cookie.getValue() %></h3><%}%></body></html>





<bean:write>标签和<bean:include>标签:


s6.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"prefix="bean"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-html"prefix="html"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"prefix="logic"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>s6.jsp</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><bean:define id="CaMnter">define_Save you from anything 07 </bean:define><bean:write name="CaMnter" ></bean:write><bean:include id="include" page="/jsp/content.html"/>${include }</body></html>


content.html:

<!DOCTYPE html><html><head><title>content.html</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><h2>Save you from anything 07</h2></body></html>














<bean:resource>标签:


s7.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"prefix="bean"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-html"prefix="html"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"prefix="logic"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>s7.jsp</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><bean:resource name="/jsp/content.xml" id="resource"/><bean:write name="resource"/></body></html>









<bean:message>标签与国际化:


s8.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"prefix="bean"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-html"prefix="html"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"prefix="logic"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>s8.jsp</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><bean:message key="beanMessage.info" arg0="bean:" arg1="message"/></body></html>


资源文件Properties页面显示:






资源文件Source页面显示:













三.Logic标签

logic标签的主要作用是进行各种逻辑处理。如:执行分支语句、迭代、比较等操作。



<logic:present>和<logic:notPresent>标签:


s9.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"prefix="bean"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-html"prefix="html"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"prefix="logic"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>s9.jsp</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><%request.setAttribute("CaMnter", "Save you from anything 07") ;%><logic:present name="CaMnter" scope="request"><h2>我心中存在:${requestScope.CaMnter }</h2></logic:present><logic:notPresent name="me" scope="application"><h2>她心中的Application范围内也不存在我</h2></logic:notPresent></body></html>








<logic:empty>标签和<logic:notEmpty>标签:


sa.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"prefix="bean"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-html"prefix="html"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"prefix="logic"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>sa.jsp</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><%List<String> me = new ArrayList<String>() ;request.setAttribute("me", me) ;%><logic:empty name="me" scope="request"><h2>长度为0也被判为空</h2></logic:empty><logic:empty name="she" scope="request"><h2>不存在也被判为空</h2></logic:empty></body></html>





这里,提示一下长度为0在<logic:empty>中也被判定为空。








关系运算标签:


sb.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"prefix="bean"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-html"prefix="html"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"prefix="logic"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>sb.jsp</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><%request.setAttribute("she", 7) ;request.setAttribute("me", "Save you from anything 07") ;%><logic:equal value="Save you from anything 07" name="me" scope="request"><h2>Save you from anything 07</h2></logic:equal><logic:notEqual value="forget her" name="me" scope="request"><h2>impossible</h2></logic:notEqual><logic:lessThan value="70" name="she" scope="request"><h2>小于70</h2></logic:lessThan><logic:greaterThan value="0" name="she" scope="request"><h2>大于0</h2></logic:greaterThan><logic:lessEqual value="7" name="she" scope="request"><h2>小于等于7</h2></logic:lessEqual><logic:greaterEqual value="7" name="she" scope="request"><h2>大于等于7</h2></logic:greaterEqual></body></html>









<logic:iterate>标签(logic标签库中最重要的):


sc.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"prefix="bean"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-html"prefix="html"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"prefix="logic"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>sc.jsp</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><%String me_str[] = { "CaMnter", "Save you from anything 07" };request.setAttribute("me_str", me_str);%><h3>输出数组:</h3><ol><logic:iterate id="me_part_str" name="me_str" scope="request"><li>${me_part_str }</li></logic:iterate></ol><%List me_list = new ArrayList();me_list.add("07");me_list.add("Never remember me");request.setAttribute("me_list", me_list);%><h3>输出List:</h3><ol><logic:iterate id="me_part_list" name="me_list" scope="request"><li>${me_part_list }</li></logic:iterate></ol><%Map me_map = new HashMap();me_map.put("If time could go back","I am willing to return to the past");request.setAttribute("me_map", me_map);%><h3>输出Map:</h3><ol><logic:iterate id="me_part_map" name="me_map" scope="request"><li>${me_part_map.key } -- > ${me_part_map.value }</li></logic:iterate></ol></body></html>










<logic:redirect>重定向标签:


修改struts-config.xml:

<struts-config><form-beans></form-beans><global-exceptions></global-exceptions><global-forwards><forward name="content" path="/jsp/content.html" /></global-forwards><action-mappings></action-mappings><message-resources parameter="resource.MessageResources" /></struts-config>


以上在<global-forwards>节点中添加了全局forward。



sd.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"prefix="bean"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-html"prefix="html"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"prefix="logic"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>sd.jsp</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><!-- 跳转到<global-forwards>中name="content"的forward配置的path路径 --><logic:redirect forward="content"></logic:redirect></body></html>


content.xml:

<!DOCTYPE html><html><head><title>content.html</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><h2>Save you from anything 07</h2></body></html>







这里,可以看出由/jsp/sd.jsp变为/jsp/content.html。明显是客户端跳转。









四.Html标签

这个Html自带的标签很类似。


那么我们就来一张JSP就知道了,很多Struts Html库中标签的功能,其实和Html本身的标签真

是大同小异。


se.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"prefix="bean"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-html"prefix="html"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"prefix="logic"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>se.jsp</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><%request.setCharacterEncoding("UTF-8");%><html:form action="/jsp/simple.do" method="post">姓名:<html:text property="name"></html:text><br>密码:<html:password property="password"></html:password><br>性别:<html:radio property="sex" value="男">男</html:radio><html:radio property="sex" value="女">女</html:radio><br>语言:<html:checkbox property="languages" value="Java">Java</html:checkbox><html:checkbox property="languages" value="Android">Android</html:checkbox><html:checkbox property="languages" value="C++">C++</html:checkbox><html:checkbox property="languages" value="C#">C#</html:checkbox><br><br>  简介:<html:textarea property="note" cols="30" rows="3"></html:textarea><br><html:hidden property="id" value="7" /><html:submit value="提交"></html:submit><html:reset value="重置"></html:reset></html:form></body></html>



SimpleForm.java:

package com.zyy.struts.form;import org.apache.struts.action.ActionForm;public class SimpleForm extends ActionForm {private String name;private String password;private String sex;private String languages[];private String note;private int id;public String[] getLanguages() {return languages;}public void setLanguages(String[] languages) {this.languages = languages;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getNote() {return note;}public void setNote(String note) {this.note = note;}public int getId() {return id;}public void setId(int id) {this.id = id;}}


SimpleAction.java:

package com.zyy.struts.action;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;import com.zyy.struts.form.SimpleForm;public class SimpleAction extends Action {public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {request.setCharacterEncoding("UTF-8");SimpleForm simple = (SimpleForm) form;System.out.println("ID:" + simple.getId());System.out.println("name:" + simple.getName());System.out.println("password:" + simple.getPassword());System.out.println("sex:" + simple.getSex());System.out.print("languages:");for (String language : simple.getLanguages()) {System.out.print(language + "  ");}System.out.println("");System.out.println("note:" + simple.getNote());return null;}}




修改struts-config.xml:


<struts-config><form-beans><form-bean name="simpleForm" type="com.zyy.struts.form.SimpleForm"></form-bean></form-beans><global-exceptions></global-exceptions><global-forwards><forward name="content" path="/jsp/content.html" /></global-forwards><action-mappings><action path="/jsp/simple" attribute="simpleForm" input="/jsp/se.jsp"name="simpleForm" scope="request" type="com.zyy.struts.action.SimpleAction"></action></action-mappings><message-resources parameter="resource.MessageResources" /></struts-config>





但是,提交后一定有中文的乱码(sex:??)。



所以我们做一个过滤器SetCharacterEncodingFilter:

package com.zyy.struts.filters;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class SetCharacterEncodingFilter implements Filter {private String encoding;private FilterConfig filterConfig = null;public void destroy() {this.encoding = null;this.filterConfig = null;}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {request.setCharacterEncoding(this.encoding);chain.doFilter(request, response);}public void init(FilterConfig filterConfig) throws ServletException {this.encoding = filterConfig.getInitParameter("encoding");}}


配置struts-config.xml文件:

添加如下内容:

  <filter>  <filter-name>Set Character Encoding</filter-name>  <filter-class>com.zyy.struts.filters.SetCharacterEncodingFilter</filter-class> <init-param>   <param-name>encoding</param-name>   <param-value>UTF-8</param-value>  </init-param> </filter> <filter-mapping>  <filter-name>Set Character Encoding</filter-name>   <url-pattern>/*</url-pattern> </filter-mapping>














0 0
原创粉丝点击