Struts2
控制层框架 struts2
主要职责: 拦截请求和响应请求
实现原理: 基于过滤器进行封装 *.action
-
控制层配置
方法1: 在struts.xml中增加action节点(推荐)
方法2: 采用注解的方法进行配置
2.请求地址的配置
格式1: /user!add.action
格式2: /user.action
extends继承ActionSupport类
实现execute()方法
这样请求 /user.action 就会执行execute方法
package com.seecen.action; import com.opensymphony.xwork2.ActionSupport; import com.seecen.model.Page; import com.seecen.model.User; import com.seecen.service.UserService; import org.springframework.beans.factory.annotation.Autowired; public class UserAction extends ActionSupport { @Autowired private UserService userService; private Page<User> page; public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } public Page<User> getPage() { return page; } public void setPage(Page<User> page) { this.page = page; } //struts.xml中的action的name名称 // name名称.action就会默认执行这个方法 @Override public String execute() throws Exception { page = userService.findUserByPage(new Page<>()); return SUCCESS; } }
格式3: /backend/user!update.action
struts.xml中配置
<package name="backend" extends="basePackage" namespace="/backend">
3.请求阶段响应阶段传递参数
通过成员变量来传递参数(类级别的控制层框架)
服务器向客户端响应数据
例如列表查询功能
客户端向服务器端请求数据
例如登录功能
4.重定向
<result name="success" type="redirect">/user.action</result>
5.request session application的使用
静态方法全局获取request对象
Extends继承自己封装的一个封装类(BaseAction)
package com.seecen.action; import com.alibaba.fastjson.JSON; import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.ServletActionContext; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.io.PrintWriter; /** *自己封装的一个类 */ public class BaseAction extends ActionSupport { protected HttpServletRequest request = ServletActionContext.getRequest(); protected HttpSession session = request.getSession(); protected ServletContext application = ServletActionContext.getServletContext(); protected HttpServletResponse response = ServletActionContext.getResponse(); /** * json日期转换 * @param obj */ protected void writeJson(Object obj){ response.setContentType("text/html;charset=UTF-8"); String json = JSON.toJSONStringWithDateFormat(obj, "yyyy-MM-dd HH:mm:ss"); try { PrintWriter out = response.getWriter(); out.write(json); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } } }
6.全局返回结果
在struts.xml增加一个节点
<global-results>
<!-- 当返回login视图名时,转入/login.jsp页面 -->
<result name="toLogin" type="redirect">/login.action</result>
</global-results>
7. 异步请求
验证用户名
请求阶段
1. 拦截异步请求和同步请求方法一样
响应阶段
返回json格式的数据(封装接口|定义接口)
方法1:
往response对象中写json字符 串
方法2:
Struts帮我们把对象转换成json字符串
8.文件上传
通过成员变量解析获取上传的文件
9 .拦截器配置
权限验证
<interceptors>
<!-- 权限拦截器 注:可以定义多个拦截器-->
<!-- session拦截器,-->
<interceptor name="auth" class="com.seecen.interceptor.AuthInterceptor"></interceptor>
<interceptor name="auth2" class="com.seecen.interceptor.AuthInterceptor2"></interceptor>
<!-- 拦截器栈 注:栈中配置运行时需要执行的拦截器-->
<interceptor-stack name="mystack">
<interceptor-ref name="defaultStack"/>
<!-- 权限拦截 -->
<interceptor-ref name="auth"/>
<interceptor-ref name="auth2"/>
</interceptor-stack>
</interceptors>
<!--默认拦截器-->
<default-interceptor-ref name="mystack"></default-interceptor-ref>
10.标签库(jstl)
简化页面内容的动态化
迭代标签(c:foreach)
<s:iterator value="page.list" status="S" var="item">
If 标签
<s:if test='userName=="zs"'>
张三
</s:if>
<s:else>
其他
</s:else>
日期
<s:date name="createTime" format="yyyy-MM-dd"></s:date>
表单标签库
下拉
<s:select>
复选框
<s:checkboxlist>
单选框
<s:radio>
表单值的回显
注:checkboxlist回显需要传递一个数组
bug怎么这么多!