1:拦截器 (理解为 符合拦截的要求 就可以 继续访问执行对应的Action 不符合我的要求就会做出对应的处理。)
拦截器和Action完全松耦合。
Struts2的默认使用拦截器有18个
实现步骤:
1 编写一个普通的java类 实现 Intercepter接口
public class lJqAction implements Interceptor {
@Override
public void destroy() {
}
@Override
public void init() {
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
String username = ServletActionContext.getRequest().getParameter("username");
if(username.equalsIgnoreCase("admin")){
return invocation.invoke(); //如果正确就会直接通过 invocation.invoke继续执行需要访问的Action类
}else {
ActionContext.getContext().getValueStack().push("不好意思你输入的有错误"); //错误就会直接通过返回的值 对应配置的结果集跳入对应的页面
return "error";
}
}
}
action类
public class OGNLDemo extends ActionSupport {
public String testOgnl(){
ActionContext.getContext().getValueStack().push("正确访问");
return "success";
}
}
2在struts.xml文件配置自定义拦截器栈
片段代码
<interceptors>
<interceptor name="privilege1" class="com.ognl.lJqAction"></interceptor>
<interceptor-stack name="p">
<interceptor-ref name="privilege1"></interceptor-ref><!--自定义的-->
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="p"></default-interceptor-ref>
完整代码
<package>
<interceptors>
<interceptor name="privilege1" class="com.ognl.lJqAction"></interceptor>
<interceptor-stack name="p">
<interceptor-ref name="privilege1"></interceptor-ref><!--自定义的-->
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="p"></default-interceptor-ref>
<action name="ognlTest" class="com.ognl.OGNLDemo" method="testOgnl">
<result name="error" >/index.jsp</result>
<result name="success" >/success.jsp</result>
</action>
</package>
模型驱动
一.属性驱动
Jsp代码
<body>
<h1>属性驱动</h1>
<form action="${pageContext.request.contextPath}/Demo1Action" method="post">
用户名:<input type="text" name="name" ><br>
年龄:<input type="text" name="age" ><br>
入职日期:<input type="text" name="hireDate" ><br>
<input type="submit" value="提交" ><br>
</form>
</body>
Action代码
//使用Action获得表单提交参数
//1.在Action中准备与参数键相同的属性,并提供相应的set方法,参数值会自动封装到属性中.
//2.封装参数还会帮我们自动类型转换. (8大基本数据类型|指定格式的Date类型)
public class Demo7Action extends ActionSupport {
private static final long serialVersionUID = 1L;
private String name;
private Integer age;
private Date hireDate;
@Override
public String execute() throws Exception {
System.out.println("name:"+name+",age:"+age+",hireDate:"+hireDate);
return SUCCESS;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public void setHireDate(Date hireDate) {
this.hireDate = hireDate;
}
}
|
二.对象驱动
Jsp代码
<body>
<h1>对象驱动</h1>
<form action="${pageContext.request.contextPath}/Demo8Action" method="post">
用户名:<input type="text" name="user.name" ><br>
年龄:<input type="text" name="user.age" ><br>
入职日期:<input type="text" name="user.hireDate" ><br>
<input type="submit" value="提交" ><br>
</form>
</body>
Action代码
//使用Action获得表单提交参数
//1 在action中准备对象属性.并提供对象的set/get方法
//2 表单提交的键格式:对象属性名.属性名
public class Demo8Action extends ActionSupport {
private static final long serialVersionUID = 1L;
private User user;
@Override
public String execute() throws Exception {
System.out.println(user);
return SUCCESS;
}
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
}
|
三.模型驱动
Jsp代码
<body>
<h1>模型驱动</h1>
<form action="${pageContext.request.contextPath}/Demo9Action" method="post">
用户名:<input type="text" name="name" ><br>
年龄:<input type="text" name="age" ><br>
入职日期:<input type="text" name="hireDate" ><br>
<input type="submit" value="提交" ><br>
</form>
</body>
Action代码
//使用Action获得表单提交参数
//1 action实现ModelDriven接口.在实现方法中返回封装参数的User对象
//2 表单提交参数时,直接写对象中属性名即可.
public class Demo9Action extends ActionSupport implements ModelDriven<User> {
private static final long serialVersionUID = 1L;
private User user = new User();
public User getModel() {
return user;
}
@Override
public String execute() throws Exception {
System.out.println(user);
return SUCCESS;
}
}
|