一.Struts2初体验
二.访问ServletAPI
三.数据校验
四.UI标签
五.通用标签
https://github.com/fulq1234/mystudy/tree/master/struts
一.Struts2初体验
struts2开发程序的基本步骤
1.加载struts2类库
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern><!-- 将全部请求定位到指定的过滤器 -->
</filter-mapping>
3.开发视图层页面
<%@taglib prefix="s" uri="/struts-tags" %>
<div>
<h1><s:property value="message"/><!-- 输出显示语句 --></h1>
</div>
<div>
<form action="login.action" method="post">
请输入您的姓名:
<input name="name" type="text"><br/>
请输入您的密码
<input name="password" type="password"/><br/>
<input type="submit" value="提交"/>
</form>
</div>
4.开发控制层Action
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
public class LoginAction implements Action {
private String name = "";
private String password = "";
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
//保存参数到session
Map<String,Object> session = ActionContext.getContext().getSession();
session.put("name", name);//在前台显示${sessionScope.name}
if(name.equals("jason") && password.equals("2010")){
return "success";
}else{
return "fail";
}
}
//... ...getter/setter方法
}
5.配置struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 创建一个default包,继承自Struts2的struts-default包 -->
<package name="default" namespace="/" extends="struts-default">
<!-- 接收处理用户的/helloWorld.action请求 ,
并根据返回结果,完成跳转 -->
<action name="helloWorld" class="cn.intro.action.HelloWorldAction"><!-- name对应form表单的action属性值 -->
<result name="success">/helloWorld.jsp</result><!-- success对应Action返回字符串 -->
</action>
<action name="login" class="cn.intro.action.LoginAction"><!-- name对应form表单的action属性值 -->
<result name="success">/success.jsp</result><!-- success对应Action返回字符串 -->
<result name="fail">/fail.jsp</result>
</action>
</package>
</struts>
6.部署,运行项目
执行流程分析
二.访问ServletAPI
struts2访问Servlet API1.解耦
2.耦合
1.解耦
对Servlet API进行封装
提供了三个Map对象访问,分别对应request,session,application作用域
通过ActionContext类获取这三个Map对象
(1) Object get("request")
(2) Map getSession()
(3) Map getApplication()
Map<String,Object> session = ActionContext.getContext().getSession();
session.put(CURRENT_USER,name);
页面显示${sessionScope.CURRENT_USER}
举例
Map<String,Object> session = ActionContext.getContext().getSession();
session.put("name", name);//在前台显示${sessionScope.name}
于Session耦合的访问方式
通过ServletActionContext来获取Servlet API对象
1.ServletContext getServletContext()
2.HttpServletResponse getResponse()
3.HttpServletRequest getRequest()
4.通过request.getSession()获取session对象
通过xxx.setAttribute()和xxx.getAttribute()
HttpSession session = ServletActionContext.getRequest().getSession();session.setAttribute(CURRENT_USER,name);
HttpSession session2 = ServletActionContext.getRequest().getSession();
session2.setAttribute("name", name);//在前台显示${sessionScope.name}
三.数据校验
validate()拦截方法
public class LoginAction extends ActionSupport{
//... ...省略代码
public void validate(){
if(this.getUsername().length() == 0){
addFieldError("name","用户名不能为空");
}
if(this.getPassword().length() ==0){
addFieldError("pwd","用户密码不能为空");
}
}
//... ...省略代码
}
只要继承了ActionSupport,并且写了validate方法,那么就会在execute方法前执行validate方法。如果发现错误(addFieldError),那么都返回一个"input"视图,这个视图是必须执行的。否则继续执行后续方法。
如果将校验错误信息在页面输出?
在视图页面使用struts2提供的标签
1.fielderror
2.actionerror
<%@taglib prefix="s" uri="/struts-tags"%>
<s:fielderror/>
<s:fielderror fieldName="name"/>
四.UI标签
struts2 UI标签
<s:form>...</s:form> 表单标签
<s:textfield>...</s:textfield> 文本输入框
<s:password>...</s:password> 密码输入框
<s:textarea>...</s:textarea> 文本框输入框
<s:radio>...</s:radio> 单选按钮
<s:checkbox>...</s:checkbox> 多选框
<s:select/> 下拉选项框
<s:submit/> 提交标签
<s:reset/> 重置标签
<s:hidden/> 隐藏域标签
支持主题风格
和普通的html相比,是ongl表达式。
<s:form action="login.action" method="post">
<s:textfield name="name" value="xx" label="用户名"></s:textfield>
<s:password name="password" label="密码"></s:password>
<s:submit value="提交"/>
</s:form>
label是选项名称,theme是主题,默认主题是simple,其它的举例xhtml
UI标签,常用非表单标签
<s:actionerror/> 显示Action错误
<s:actionmessage/> 显示Action消息
<s:fielderror/> 显示字段错误
ctrl+alt+T 查找jar包中的类
五.通用标签
条件标签<s:if>... ...</s:if>
<s:elseif>... ...</s:elseif>
<s:else>... ...</s:else>
迭代标签
<s:iterator>... ...</s:iterator>
<s:if test="表达式">
需要执行的代码
</s:if>
<s:elseif test="表达式">
需要执行的代码
</s:elseif>
<s:else>
需要执行的代码
</s:else>
比如
<s:if test="sex==1">先生</s:if>
<s:iterator value="集合对象" status="status" id="name">
读取集合对象并输出显示
</s:iterator>
value属性:需要进行遍历的集合对象
status属性:当前迭代元素的IteratorStatus实例
id属性:当前迭代元素的id,可直接访问元素,该参数可选
举例:
<s:iterator value="users" status="st">
<s:property value="user"><br/>
<!--也可以 为什么可以输出user那?因为属性都被放到了一个值栈里,s:property取第一个元素 -->
<s:property/>
</s:iterator>
通用标签,常用数据标签
property 输出ongl表达式的值
debug 用于调试,可查看ActionContext中的内容
action 允许在JSP页面中直接调用Action
bean 用于实例化一个JavaBean对象
include 类似JSP中<jsp:include>标签
param 作为其它标签的子标签
push 将值压入值栈顶
set 对指定范围(request,session... ...)的变量赋值
url 用于创建一个URL