首页 > 代码库 > 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"; }}
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(); } }}
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; } }
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; } }
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; }}
<?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>
二、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"; }}
(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>
(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>
Struts2框架学习