1. JSON插件
想要使用json必定会用到jquery。
1.1 导入相关的Ajax-jar包-01资料中ajax文件中。
commons-beanutils-1.8.0.jar commons-collections-3.1.jar commons-lang-2.4.jar commons-logging-1.1.3.jar ezmorph-1.0.6.jar jackson-core-asl-1.9.2.jar jackson-mapper-asl-1.9.2.jar json-lib-2.3-jdk15.jar struts2-json-plugin-2.3.24.jar 还要有struts2的相关jar包。 |
1.2 创建对应的页面。Success.jsp
<script type="text/javascript" src="js/jquery-3.2.1.min.js"></script> <script type="text/javascript"> $(function(){ /* 使用ajax技术进行提交 */ $.ajax({ type:"post", url:"/07struts2/getAll.action", dataType:"json", success:function(data){ /* 回调函数将data对象中的数据循环添加到页面中 */ for(var i = 0 ; i < data.length; i++){ var con = "<tr><td>"+data[i].id+"</td><td>"+data[i].name+"</td><td>"+data[i].pwd+"</td></tr>"; // 添加con $("#tab").append(con); } } }) }) </script> |
1.3 要完成对应的Action-- getAll.action
// 模拟数据库为user对象添加数据 private List<User> userList; public String getAll(){ // 需要给user赋予数据 模拟的是数据库。从服务层取得到的数据。 userList = new ArrayList<>(); userList.add(new User(1, "高圆圆", "2345")); userList.add(new User(2, "宋慧乔", "32345")); userList.add(new User(3, "唐嫣", "12345")); userList.add(new User(4, "陈乔恩", "24345")); userList.add(new User(5, "赵丽颖", "25345")); userList.add(new User(6, "陈冠希", "256345")); return SUCCESS; } |
1.4 编写struts.xml—将getAll.action 添加
<!-- Struts 要想使用json技术,必须继承json-default: 才可以使用json技术 struts 继承多个命名空间的时候,要使用,隔开即可! --> <package name="default" namespace="/" extends="struts-default,json-default"> <action name="getAll" class="com.bjsxt.action.LoginAction" method="getAll"> <!-- 表示该方法返回一个json --> <result type="json"> <!-- param:给userList属性从新装备 root:表示根,直接将userList可以转化为json --> <param name="root">userList</param> </result> </action> |
1.5 测试成功!
1.6
2. 拦截器
1.只能拦截Action类, 2.在Action类后端控制器的前面或后面执行一些操作(AOP) 3.Struts2已提供了多个拦截器 4.默认使用struts2提供的拦截器 5.使用自定义拦截器会覆盖掉struts2提供的拦截器 6.在使用自定义拦截器时使用struts2提供的拦截器,需要引用struts2提供的默认拦截器 Struts2 同拦截器栈interceptor-stack定义了很多内部实现好的拦截器。 拦截器栈通过<interceptor-ref name="exception"/> 引用了内部定义的多个拦截器。 |
2.1定义单个拦截器:
2.1.1自定义拦截器继承AbstractInterceptor
2.1.2在struts.xml中添加<interceptors>标签引用拦截器
2.1.3在Action标签中直接引用拦截器<interceptor-ref name="myInter"></interceptor-ref>
单个拦截器执行的顺序:intercept方法中可以定义在走Action之前的一些操作。arg0.invoke(); 判断是否有其他拦截器,如果有则执行其他拦截器,如果没有则走具体的Action。执行完Action之后,也可以自定义一些操作。
InterCeptor
public class MyInterceptor extends AbstractInterceptor{ @Override public String intercept(ActionInvocation arg0) throws Exception { System.out.println("-----------执行之前--------"); // invoke();动态代理: arg0.invoke(); // 如果有下一个拦截器,则invoke方法会继续执行下一个拦截器。如果没有,就执行当前。 System.out.println("----------执行之后----------"); return null; } } |
Struts.xml
2.2定义多个拦截器:
2.2.1自定义拦截器继承AbstractInterceptor
2.2.2在struts.xml中添加<interceptors>标签引用多个拦截器
2.2.3 添加拦截器栈<interceptor-stackname="myStack">
2.2.4在Action标签中直接引用拦截器<interceptor-ref name="myStack"></interceptor-ref>
追加内容:可以用param标签来区分哪些方法被拦截,哪些方法不被拦截
<interceptor-ref name="myStack"> <param name="includeMethod">execute</param>//要拦截的方法 <param name="excludeMethod">myfun</param>//不拦截的方法。 </interceptor-ref> |
结论:多个拦截器的顺序---先进后出:多个拦截器执行的顺序!跟配置文件中配置属性有直接关系跟springmvc一样!
2.3 struts---全局默认拦截器。
指的是struts-default.xml 中<default-interceptor-refname="defaultStack"/>
2.3.1 解决值没有传递过来的问题!
Interceptor:
Struts.xml
拦截器中可以创建作用域对象:request,session,application。
2.4登录拦截器:
2.4.1 在登录的Action中将用户存入到session中
// 需要自定义方法 public String doLogin(){ HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); System.out.println("点我带你飞!轻松上王者"); if ("admin".equals(user.getName())) { session.setAttribute("user", user); return SUCCESS; }else{ return ERROR; } } |
2.4.2 创建一个拦截器,判断用户是否登录成功!
public class MyInterceptor extends AbstractInterceptor{ @Override public String intercept(ActionInvocation arg0) throws Exception { HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); User user = (User) session.getAttribute("user"); System.out.println(user+"------------"); if (user!=null) { System.out.println("登录成功!"); return arg0.invoke(); }else{ return "error"; } } } |
2.4.3 配置拦截器。struts.xml
<!-- 配置拦截器 --> <interceptors> <interceptor name="myInter" class="com.bjsxt.interceptor.MyInterceptor"/> <!-- 拦截器的执行顺序拦截器栈 --> <interceptor-stack name="mystack"> <interceptor-ref name="myInter"/> </interceptor-stack> </interceptors> <!-- 配置全局error --> <global-results> <result name="error">/error.jsp</result> </global-results> 配置要拦截的方法 <action name="getAll" class="com.bjsxt.action.DoLoginAction" method="getAll"> <interceptor-ref name="mystack"> <param name="includeMethod">getAll</param> </interceptor-ref> <result type="json"> <param name="root">userList</param> </result> </action> |
2.4.4 测试
未登录之前