码迷,mamicode.com
首页 > 其他好文 > 详细

Struts2框架学习

时间:2016-09-23 23:29:56      阅读:310      评论:0      收藏:0      [点我收藏+]

标签:

Struts2框架

  一、一个mini Struts框架的实现

    1.首先遵循MVC模式创建包

    2.在Struts.xml文件里配置action

    3.用dom4j来解析xml

    4.用filter来实现拦截作用

    好处:1.降低了类与类之间的关联(解耦和)

       2.如果你要增加一些功能的话  可以在filter里面增加

实现的mini Struts工程结构:

技术分享

具体实现的代码:

技术分享
public class HelloAction {
    public String execute(){
        System.out.println("struts启动成功");
        return "success";
    }

}
HelloAction
技术分享
public class StrutsPrepareAndExecuteFilter implements Filter {
    Map<String,ActionConfigDemo> actionMap=new HashMap<String, ActionConfigDemo>();

    public StrutsPrepareAndExecuteFilter() {
        // TODO Auto-generated constructor stub
    }

    public void destroy() {
        // TODO Auto-generated method stub
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req=(HttpServletRequest) request;
        HttpServletResponse resp=(HttpServletResponse) response;
        //获取url地址   /HelloAction.action
        String path=req.getServletPath();
        //截取字符串 /HelloAction
        if(path.endsWith(".action")){
            chain.doFilter(request, response);
        }
        
        String realpath=path.substring(1,path.lastIndexOf("."));
        //反射
        try {
            Class clazz=Class.forName(actionMap.get(realpath).getClazz());
            Method method=clazz.getMethod(actionMap.get(realpath).getMethod());
            Object obj=clazz.newInstance();
            String result=(String) method.invoke(obj);
            req.getRequestDispatcher(actionMap.get(realpath).getReusltMap().get(result).getTarget()).forward(req, resp);
            
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
        
    }

    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
        try {
            actionMap=ManagerConfig.getConfig();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
StrutsPrepareAndExecuteFilter
技术分享
public class ActionConfigDemo {
    private String name;
    private String clazz;
    private String method;
    private Map<String, ResultConfigDemo> reusltMap;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getClazz() {
        return clazz;
    }
    public void setClazz(String clazz) {
        this.clazz = clazz;
    }
    public String getMethod() {
        return method;
    }
    public void setMethod(String method) {
        this.method = method;
    }
    public Map<String, ResultConfigDemo> getReusltMap() {
        return reusltMap;
    }
    public void setReusltMap(Map<String, ResultConfigDemo> reusltMap) {
        this.reusltMap = reusltMap;
    }
    

}
ActionConfigDemo
技术分享
public class ResultConfigDemo {
    private String name;
    private String target;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getTarget() {
        return target;
    }
    public void setTarget(String target) {
        this.target = target;
    }
    

}
ResultConfigDemo
技术分享
public class ManagerConfig {
    
    public static Map<String,ActionConfigDemo> getConfig() throws Exception{
        Map<String,ActionConfigDemo> actionMap=new HashMap<String, ActionConfigDemo>();
        SAXReader sr=new SAXReader();
        InputStream is=ManagerConfig.class.getResourceAsStream("/struts.xml");
        String xpath="//action";
        Document doc=sr.read(is);
        List<Element> actionele=doc.selectNodes(xpath);
        for (Element element1 : actionele) {
            ActionConfigDemo ac=new ActionConfigDemo();
            ac.setName(element1.attributeValue("name"));
            ac.setClazz(element1.attributeValue("class"));
            ac.setMethod(element1.attributeValue("method"));
            Map<String,ResultConfigDemo> resultMap=new HashMap<String, ResultConfigDemo>();
            List<Element> resultele=element1.elements("result");
            for (Element element2 : resultele) {
                ResultConfigDemo rc=new ResultConfigDemo();
                rc.setName(element2.attributeValue("name"));
                rc.setTarget(element2.getText());
                resultMap.put(element2.attributeValue("name"), rc);
            }
            ac.setReusltMap(resultMap);
            actionMap.put(element1.attributeValue("name"),ac);
            
        }
        return actionMap;
    }

}
ManagerConfig
技术分享
<?xml version="1.0" encoding="UTF-8"?>
<struts>
    <action name="HelloAction" class="com,guigu.action.HelloAction" mathod="execute">
        <result name="success">index.jsp</result>
    </action>
</struts>
Struts配置

  

  二、Struts2入门

    框架是什么:框架由一系列jar包组成  它提供了一系列web开发解决方案  其实它是别人写好的一个半成品软件 需要往里面加代码完成具体功能

    框架分类:根据我们的MVC模式进行分类

        M:模型     进行数据处理

        V:web层   展示层  用来展示页面

        C:控制器

      正在学习的是SSH框架  即Struts2+Spring+Hibernate

        Struts2 :  针对的是web层

        Hibernate : 针对的是数据库   提供了一种直接对象化操作数据库的方式

        Spring  : 类似于所有框架的大管家

 

    正式进行Struts2的学习

    1.Struts2的下载   进入apache官网下载

    2.Struts2的入门案例

      (1)导入jar包    \struts-2.3.24.1\apps\struts2-blank\WEB-INF\lib目录下的所有jar包都导入工程  创建一个HelloAction.java

           技术分享
public class HelloAction{
    public String execute(){
        System.out.println("struts2入门案例");
        return "success";
    }
}
HelloAction

  

      (2) struts2.xml的配置  找到在\struts-2.3.24.1\apps\struts2-blank\WEB-INF\src\java 目录下的struts.xml文件

           技术分享
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<!--  package
name: 就是给这个包起一个名字
namespace: 增加了一个目录  对下面的action进行区分 
extends: 继承了struts-default里面的默认配置
 -->
 <!--  action
name: 就是给这个action起一个名字
class: 这个action将要访问的具体路径名  
method: 具体要执行的方法
 -->
  <!--  result
name: 里面是匹配的东西  就是action里方法执行完后的返回值
type:写的是我们将要 转发或重定向  到哪个页面 具体用什么type看要求
 -->
<struts>
   <package name="hello" namespace="/"  extends="struts-default">
           <action name="HelloAction" class="/Struts2Test/src/com/guigu/action/HelloAction" method="execute" >
               <result name="success" type="dispatcher">index.jsp</result>
           </action>
   </package>
</struts>
struts.xml配置示例

 

      (3)在web.xml里对过滤器进行配置

           技术分享
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>    
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <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>
</web-app>
web.xml里对filter配置示例

    

 

Struts2框架学习

标签:

原文地址:http://www.cnblogs.com/cch-java/p/5901861.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!