亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

Struts2——自定義框架!迷你版

2024-04-27 15:12:30
字體:
來源:轉載
供稿:網友

感覺這自定義框架真的懵逼…跟著過了一遍,自己又過了1遍,一共看了5次,現在貼出來供參考 - - ,還有給自己以后來看看

下面是大概的流程,做的很簡陋包包、攔截器都沒有

filter —> 解析配置文件(映射用戶請求到action) —> 將用戶提交數據設置到action —> 處理結果集

1、導入struts2core包+dom4j包(用來讀取xml配置文件的)

commons-fileupload-1.3.2.jarcommons-io-2.4.jarcommons-lang3-3.4.jardom4j-1.6.1.jarfreemarker-2.3.23.jarjavassist-3.20.0-GA.jarlog4j-api-2.7.jarognl-3.1.12.jarstruts2-core-2.5.8.jar

2、創建framework(自定義).xml配置文件

<?xml version="1.0" encoding="UTF-8" ?><framework> <action name="hello" class="com.action.HelloAction"> <result>/index.jsp</result> </action> <action name="login" class="com.action.LoginAction"> <result>/success.jsp</result> <result name="login">/login.jsp</result> </action></framework>

3、創建com.core包(Action、Result、ActionMapper類)

1、Action.java

public class Action { //屬性聲明 PRivate String name; private String classurl; private String method="execute";//默認屬性 //這里用map來裝result結果集 private Map<String, Result> resultMap=new HashMap<String,Result>(); //構造方法 public Action() { } public Action(String name, String classurl) { super(); this.name = name; this.classurl = classurl; } public Action(String name, String classurl, String method) { super(); this.name = name; this.classurl = classurl; this.method = method; } //get、set方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getClassurl() { return classurl; } public void setClassurl(String classurl) { this.classurl = classurl; } public String getMethod() { return method; } public void setMethod(String method) { this.method = method; } public Map<String, Result> getResultMap() { return resultMap; } public void setResultMap(Map<String, Result> resultMap) { this.resultMap = resultMap; }}

2、Result.java

public class Result {//屬性聲明 private String name="success"; private String type="dispatcher";//默認屬性 private String location; //構造方法 public Result() { } public Result(String location) { super(); this.location = location; } public Result(String type, String location) { super(); this.type = type; this.location = location; } public Result(String name, String type, String location) { this.name = name; this.type = type; this.location = location; }//get、set方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; }}

3、ActionMapper.java(這里用dom4j讀取文件)

public class ActionMapper { //Action容器 public static Map<String, Action> actionMap=new HashMap<String,Action>(); //解析配置文件 public static void Parser() throws DocumentException{ //讀取配置文件framework.xml InputStream inputStream=ActionMapper.class.getClassLoader().getResourceAsStream("framework.xml"); Document document=new SAXReader().read(inputStream); //獲取根元素對象 Element root=document.getRootElement(); //System.out.println(root.getName()); //獲取action對象 List<Element> listaction=root.elements(); for (Element itemaction : listaction) { Action action=new Action(); //獲取action屬性 action.setName(itemaction.attributeValue("name")); action.setClassurl(itemaction.attributeValue("class")); String method=itemaction.attributeValue("method"); if (method!=null) { action.setMethod(method); } //獲取result對象 List<Element> listresult=itemaction.elements(); for (Element itemresult : listresult) { Result result=new Result(); //獲取result屬性 String nameresult=itemresult.attributeValue("name"); if (nameresult!=null) { result.setName(nameresult); } String typeresult=itemresult.attributeValue("type"); if (typeresult!=null) { result.setType(typeresult); } result.setLocation(itemresult.getStringValue()); //將result對象添加到action對象 action.getResultMap().put(result.getName(), result); } //將action對象添加到actionMap對象 actionMap.put(action.getName(), action); } }}

4、創建com.filter包(CoreFilter類) 1、CoreFilter.java(這里是重點核心,很難捉摸T.T)

public class CoreFilter implements Filter{ @Override public void destroy() { // TODO 自動生成的方法存根 } @Override public void init(FilterConfig arg0) throws ServletException { try { // 解析配置文件放到這里(該方法只執行一次) ActionMapper.Parser(); } catch (DocumentException e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } } //處理事務都在doFilter里 @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest httprequst=(HttpServletRequest) request; HttpServletResponse httpresponse=(HttpServletResponse) response; //我瞎設置的轉碼,目前只能傳遞常規字符串 httprequst.setCharacterEncoding("utf-8"); httpresponse.setCharacterEncoding("utf-8");//下面把大概的5個步驟分開為單獨的方法來吃 //1、將請求映射到action Action targetAction=reqToAction(httprequst); if (targetAction==null) { //如果不是action請求就跳過 filterChain.doFilter(request, response); return ; } //System.out.println(targetAction.getName()+"---"+targetAction.getClass()); try {//2、創建action Object proxyAction=createProxyAction(targetAction.getClassurl());//3、將用戶提交的屬性設置到action上 setProperty(httprequst, proxyAction);//4、執行action String resultName=execute(proxyAction,targetAction.getMethod());//5、處理result Result result=targetAction.getResultMap().get(resultName); resultExecute(httprequst,httpresponse,result,proxyAction); } catch (Exception e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } } //將請求映射到action public Action reqToAction(HttpServletRequest httprequest){ //獲取URL傳遞的請求名 String path=httprequest.getRequestURI(); if (!path.endsWith(".action")) {//測試此字符串是否以指定的后綴結尾。 return null; } //System.out.println(path.toString()); String reqName=path.substring(path.lastIndexOf("/")+1,path.lastIndexOf("."));//截取請求名 //System.out.println(reqName); return ActionMapper.actionMap.get(reqName); } //創建action public Object createProxyAction(String className) throws Exception { Class clzz=Class.forName(className); return clzz.newInstance(); } //將用戶提交的屬性設置到action上 public void setProperty(HttpServletRequest httprequst,Object action) throws Exception { //創建class Class clzz=action.getClass(); Map parameterMap=httprequst.getParameterMap(); for (Iterator iterator = parameterMap.keySet().iterator(); iterator.hasNext();) { Object key=iterator.next(); //根據提交參數去找field Field field=clzz.getDeclaredField(key.toString());//返回此類中指定字段的對象 if (field==null) { continue; } field.setaccessible(true); field.set(action, httprequst.getParameter(key.toString())); //System.out.println(key+"-----"+httprequst.getParameter(key.toString())); } } //執行action private String execute(Object proxyAction, String methodName) throws Exception{ Class clzz=proxyAction.getClass(); Method method=clzz.getDeclaredMethod(methodName); return (String) method.invoke(proxyAction); } //處理result private void resultExecute(HttpServletRequest httprequst, HttpServletResponse httpresponse, Result result, Object proxyAction) throws Exception { if (result.getType().equals("redirect")) { httpresponse.sendRedirect(result.getLocation()); return; } //將action的屬性值設置到httprequst的attribute中 Class clzz=proxyAction.getClass(); Field[] fields=clzz.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); httprequst.setAttribute(field.getName(), field.get(proxyAction)); field.setAccessible(false); } httprequst.getRequestDispatcher(result.getLocation()).forward(httprequst, httpresponse); }}

JSP頁面 1、login.jsp

<form action="login.action" method="post"> 賬號<input type="text" name="name"><br> 密碼<input type="text" name="pwd"><br> <input type="submit" value="登錄"><br> </form>

2、success.jsp

<h1>name:${name}</h1> age:${pwd}

測試用例LoginAction.java

public class LoginAction extends ActionSupport { private String name; private String pwd; @Override public String execute() throws Exception { if (name.equals("admin")&&pwd.equals("000")) { return SUCCESS; } return LOGIN; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; }}

效果圖 這里寫圖片描述 這里寫圖片描述

大概就這樣子 ,stuts2告一段落了~


上一篇:grunt快速搭建項目

下一篇:flex布局

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩一区二区精品| 国产男人精品视频| 中文在线资源观看视频网站免费不卡| 国产精品观看在线亚洲人成网| 国产激情综合五月久久| 日韩成人在线电影网| 亚洲国产精品999| 久久久久这里只有精品| 国产成人av在线| 国产一区二区三区在线播放免费观看| www.亚洲天堂| 菠萝蜜影院一区二区免费| 97在线精品视频| 中文字幕最新精品| 尤物精品国产第一福利三区| 粉嫩av一区二区三区免费野| 91色在线视频| 91在线直播亚洲| 青青草原一区二区| 欧美日韩免费观看中文| 爽爽爽爽爽爽爽成人免费观看| 亚洲自拍偷拍福利| 亚洲春色另类小说| 亚洲人成电影在线观看天堂色| 久久99热精品| 久久久久久中文字幕| 全色精品综合影院| 欧美黑人视频一区| 91久久久国产精品| 亚洲色图狂野欧美| 97精品国产97久久久久久| 精品国产一区二区三区在线观看| 亚洲美女又黄又爽在线观看| 欧美日韩国产一区在线| 中文国产亚洲喷潮| 久久国产色av| 亚洲精品国产精品国产自| 日本精品免费观看| 日本久久久久久久| 日本乱人伦a精品| 欧美日本亚洲视频| 欧美孕妇毛茸茸xxxx| 亚洲一区二区三区视频播放| 亚洲一区二区福利| 亚洲免费视频网站| 538国产精品一区二区在线| 国产亚洲美女精品久久久| 欧美午夜片欧美片在线观看| 91超碰caoporn97人人| 欧美激情亚洲视频| 国产一区二区三区四区福利| 国产免费一区二区三区在线能观看| 成人在线视频网| 亚洲一区二区三区久久| 国产日韩欧美在线播放| 黑人巨大精品欧美一区二区三区| 九九热这里只有精品6| 狠狠躁夜夜躁人人爽天天天天97| 最新日韩中文字幕| 国产一区私人高清影院| 亚洲黄色在线看| 日韩欧美精品中文字幕| 亚洲日本成人女熟在线观看| 97在线免费视频| 国产精品99久久久久久白浆小说| 久久香蕉国产线看观看av| 日韩综合中文字幕| 亚洲аv电影天堂网| 久久精品国产96久久久香蕉| 国产拍精品一二三| 亚洲男人的天堂网站| 欧美国产高跟鞋裸体秀xxxhd| 国产欧美一区二区三区在线| 日韩亚洲一区二区| 欧美超级免费视 在线| 国产自摸综合网| 国产91精品久久久久久| 国产成人中文字幕| 欧美在线视频在线播放完整版免费观看| 亚洲国产成人在线播放| 久久乐国产精品| 狠狠躁夜夜躁人人爽天天天天97| 欧美亚洲成人精品| 国产一区二区三区三区在线观看| 中文字幕9999| 日本欧美中文字幕| 欧美自拍大量在线观看| 九九热在线精品视频| 亚洲风情亚aⅴ在线发布| 成人高清视频观看www| 欧美国产日韩免费| 九九精品在线视频| 久久露脸国产精品| 久久天天躁狠狠躁夜夜爽蜜月| 韩国v欧美v日本v亚洲| 日韩欧美在线观看视频| 国产这里只有精品| 日韩h在线观看| 日韩美女在线看| 国产91av在线| 亚洲v日韩v综合v精品v| 国产mv免费观看入口亚洲| 久久精品国产v日韩v亚洲| 国模叶桐国产精品一区| 中文字幕av一区二区| 亚洲人a成www在线影院| 日韩精品在线看| xvideos国产精品| 欧美性猛交xxxx乱大交极品| 亚洲国产成人在线播放| 这里只有精品视频在线| 亚洲精品欧美极品| 亚洲欧洲午夜一线一品| 欧美一级片久久久久久久| 亚洲国产欧美日韩精品| 亚洲国产精品福利| 97香蕉久久夜色精品国产| 欧美日韩亚洲激情| 久久久国产一区| 欧美乱大交xxxxx另类电影| 久久综合久久美利坚合众国| 精品久久久久久久久久久久久久| 国产又爽又黄的激情精品视频| 日韩亚洲成人av在线| 亚洲男人天堂手机在线| 亚洲xxxx做受欧美| 91成人在线视频| 亚洲国产精品成人av| 在线观看免费高清视频97| 日韩一二三在线视频播| 精品二区三区线观看| 国产精品一区二区三区在线播放| 国产日韩综合一区二区性色av| 国产精品视频内| 欧美激情一区二区三区在线视频观看| 中文欧美日本在线资源| 原创国产精品91| 精品久久久久久久久久久久久久| 日韩av影院在线观看| 久久久久久久久久久久久久久久久久av| 亚洲精品日韩激情在线电影| 成人激情黄色网| 91在线网站视频| 国产精品麻豆va在线播放| 精品一区精品二区| 国产日本欧美一区二区三区在线| 亚洲色图第三页| 久久青草精品视频免费观看| 亚洲成av人乱码色午夜| 亚洲91精品在线| 国产欧美精品va在线观看| 国产精品男人爽免费视频1| 日韩成人免费视频| 狠狠躁18三区二区一区| 成人在线小视频| 91成人性视频| 国产精自产拍久久久久久| 欧美超级乱淫片喷水| 日本不卡高字幕在线2019| 日本欧美一级片| 欧美老肥婆性猛交视频| 日韩av影视在线| 国产精品视频公开费视频| 91香蕉电影院|