首页 > 代码库 > Struts2框架学习

Struts2框架学习

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"><!--  packagename: 就是给这个包起一个名字namespace: 增加了一个目录  对下面的action进行区分 extends: 继承了struts-default里面的默认配置 --> <!--  actionname: 就是给这个action起一个名字class: 这个action将要访问的具体路径名  method: 具体要执行的方法 -->  <!--  resultname: 里面是匹配的东西  就是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框架学习