本篇文章是笔者在工作之余梳理关于struts2框架的知识内容,以便日后自己回顾以及记录一下自己对框架本身开始的认识。文中若有错误之处,望请指点迷津。
Struts2是一个基于MVC设计模式的Web应用框架,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。
模拟struts2工作helloWorld 1.1 struts2配置文件 新建一个普通的xml文件,struts2.xml(可任意取名):
<?xml version="1.0" encoding="UTF-8"?><package> <action name="helloRequest" class="yang.zhiran.test1.helloAction" method="helloMethod"> <result name="ok" type="dispatcher"> /test1/ok.jsp </result> </action></package>1.2 控制器创建处理类
在struts2.xml配置文件中, action标签内的class属性指定处理类的全名路径, action标签内的mehtod属性指定处理类中的具体方法名, result标签内的name属性指定根据返回值做出相应的处理。创建helloAction.java,并在helloAction中新建helloMethod方法,方法返回ok。
package yang.zhiran.test1;public class helloAction { public helloAction(){} public String helloMethod(){ return "ok"; }}1.3 过滤器 创建myFilter过滤器拦截浏览器请求路径识别请求
public class myFilter implements Filter { public ConfigBean config; @Override public void destroy() { } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { HttpServletRequest request=(HttpServletRequest)arg0; HttpServletResponse response=(HttpServletResponse)arg1; String requestPath=request.getServletPath(); int index=requestPath.lastIndexOf("."); String actionName=requestPath.substring(1, index); if(config!=null){ if(config.getActionName().equals(actionName)){ try { Class clazz=Class.forName(config.getActionClass()); Object instance=clazz.newInstance(); Method method=clazz.getMethod(config.getActionMethod(), null); Object ReturnValue=method.invoke(instance, null); if(config.getResultName().equals(ReturnValue)){ if(config.getResultType().equals("dispatcher")){ request.getRequestDispatcher(config.getResultContent()).forward(request, response); } else if(config.getResultType().equals("redirect")){ response.sendRedirect(request.getContextPath()+config.getResultContent()); } else{ response.sendError(HttpServletResponse.SC_NOT_FOUND); } } else{ response.sendError(HttpServletResponse.SC_NOT_FOUND); } } catch (Exception e) { e.PRintStackTrace(); } } else{ } } System.out.println(actionName); } @Override public void init(FilterConfig arg0) throws ServletException { try { SAXReader reader=new SAXReader(); InputStream stream=this.getClass().getClassLoader().getResourceAsStream("yang/zhiran/test1/Struct2.xml"); ConfigBean config=new ConfigBean(); //获取配置文档信息 Document doc=reader.read(stream); Element actionElement=(Element)doc.selectSingleNode("//action"); String actionName=actionElement.attributeValue("name"); String actionClass=actionElement.attributeValue("class"); String actionMethod=actionElement.attributeValue("method"); Element resultElement=actionElement.element("result"); String resultName=resultElement.attributeValue("name"); String resultType=resultElement.attributeValue("type"); String resultContent=resultElement.getTextTrim(); //为配置对象赋值 config.setActionName(actionName); config.setActionClass(actionClass); config.setActionMethod(actionMethod); config.setResultName(resultName); config.setResultType(resultType); config.setResultContent(resultContent); this.config=config; } catch (Exception e) { e.printStackTrace(); } }}配置web.xml文件:
<filter> <filter-name> myFilter </filter-name> <filter-class> yang.zhiran.test1.MyFilter </filter-class></filter><filter-mapping> <filter-name> myFilter </filter-name> <url-pattern> /* </url-pattern></filter-mapping>1.4配置ConfigBean对象
public class ConfigBean { public ConfigBean(){} private String actionName; private String actionClass; private String actionMethod; private String resultName; private String resultType; private String resultContent; public String getActionName() { return actionName; } public void setActionName(String actionName) { this.actionName = actionName; } public String getActionClass() { return actionClass; } public void setActionClass(String actionClass) { this.actionClass = actionClass; } public String getActionMethod() { return actionMethod; } public void setActionMethod(String actionMethod) { this.actionMethod = actionMethod; } public String getResultName() { return resultName; } public void setResultName(String resultName) { this.resultName = resultName; } public String getResultType() { return resultType; } public void setResultType(String resultType) { this.resultType = resultType; } public String getResultContent() { return resultContent; } public void setResultContent(String resultContent) { this.resultContent = resultContent; }}1.5 在webRoot下创建ok.jsp
1.6 运行测试 在浏览器中输入”localhost:8080/mystruts2/helloRequest.action” 注意:运行时要将上面的mystruts2替换成你们自己的项目名称.
新闻热点
疑难解答