博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
框架配置Winter framework 高效灵活的请求处理框架
阅读量:5272 次
发布时间:2019-06-14

本文共 7199 字,大约阅读时间需要 23 分钟。

新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢送批评指正

    为了深入的去了解java的底层东西和hibernate和Struts2的原理,自己认为写了个框架。

    该框架集成了hibernate和Struts2的功能,当然没有依托其jar包,是独立的一个框架。

    运行原理:

    我们晓得Struts2 是用过滤器来进行工作的。那么我这个框架也是一样。

    其中有一点,应用方法和Struts2不同,而且更加灵巧。

    首先声明一点,我没有看Struts2的源码,我只是靠自己懂得,来写这个框架的。

    主要的目标就是增加繁琐的操作,进步整体开辟效率。

    

Winter framework 可以直接对数据库进行操作,主动生成sql语句,几乎不用用户写一句sql语句。

    

    看下简单的配置:

    第一步配置:

    首先在web.xml文件中添加过滤器

request
org.pan.filter.RequestFilters
request
*.action
*.jsp
*.pan
*.php
*.do
*.aspx
*.html

    这里是给过滤器指定需要拦截的后缀,只拦截指定的,不拦截没有指定的。

    

    然后在WEB-INF文件夹中建立request.xml 文件

    这里提供了多种配置,

    一个request节点对应一个页面,class 就对应处置的类。 可以不指定类,如果不指定类,那么 必须指定返回 页面,这将直接转发到指定的页面

    起到了一个转发器的作用

    也可以指定自定义的方法,默认执行execute

    配置:

UTF-8
UTF-8
/index.jsp
/error.jsp
/login.jsp
/fail.jsp
/test.jsp
/fail.jsp
/test.jsp
/fail.jsp
/test.jsp
package com.pan.action;import java.util.List;import org.pan.sql.SqlSession;import org.pan.sql.dao.ISession;import org.pan.support.ActionSupport;public class IndexAction extends ActionSupport {		private String userName;		public void setUserName(String userName) {		this.userName = userName;	}		@Override	public String execute() {		// TODO Auto-generated method stub		System.out.println(userName+"请求的用户名");		//保存对象		ISession session=new SqlSession();				Order object=new Order();		object.setAddress("北京");				try {			List
orders=session.findByExample(object, true); System.out.println(orders.get(0).getCount()+"数量"); System.out.println(orders.get(0).getAddTime()+"时光"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } addActionMessage("userName", userName); addActionMessage("welcome", "欢送应用winterframework"); return SUCCESS; }}

    <request page="login.aspx" class="com.pan.action.IndexAction"><result name="success">/test.jsp</result></request><request page="login.xxoo" class="com.pan.action.IndexAction"><result name="success">/test.jsp</result></request><!-- 值配置请求 不配置返回面页 --><request page="123.html" ><result name="success">/test.jsp</result></request></pages>

 
 

    然后配置自己的Action 处置类:

    必须集成:ActionSupport 这个类,Struts2 中没有强制继承,我这里是必须基础并实现方法

    示例类:

package com.pan.action;import java.util.List;import org.pan.sql.SqlSession;import org.pan.sql.dao.ISession;import org.pan.support.ActionSupport;public class IndexAction extends ActionSupport {		private String userName;		public void setUserName(String userName) {		this.userName = userName;	}		@Override	public String execute() {		// TODO Auto-generated method stub		System.out.println(userName+"请求的用户名");		//保存对象		ISession session=new SqlSession();				Order object=new Order();		object.setAddress("北京");				try {			List
orders=session.findByExample(object, true); System.out.println(orders.get(0).getCount()+"数量"); System.out.println(orders.get(0).getAddTime()+"时光"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } addActionMessage("userName", userName); addActionMessage("welcome", "欢送应用winterframework"); return SUCCESS; }}
    每日一道理
那蝴蝶花依然花开花落,而我心中的蝴蝶早已化作雄鹰飞向了广阔的蓝天。

    然后再页面中取值有很多种方式,

    框架默认提供这个方法,是把值放入Session中

addActionMessage

    在页面上取值,可以用框架提供的标签

    例子:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://winter.baletu.com/" prefix="w" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>              My JSP 'index.jsp' starting page	
${test } ${name }

    主要运行过程:

    web.xml 配置过滤器,然后由RequestFilters.java 来复制调度。

    过滤器中代码很少,就调用了一下控制器:

public void doFilter(ServletRequest request, ServletResponse response,			FilterChain chain) throws IOException, ServletException {				//请求控制器		RequestController controller=new RequestController(request, response, chain);				try {			controller.doFilter();					} catch (Exception e) {			// TODO Auto-generated catch block			e.printStackTrace();		}			}

    然后进入请求控制器来看看:

package org.pan.controller;import java.util.List;import javax.naming.ConfigurationException;import javax.servlet.FilterChain;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.pan.bean.Request;import org.pan.bean.Result;import org.pan.code.Configuration;import org.pan.code.ActionManage;import org.pan.support.ActionSupport;import org.pan.util.ResultUitl;import com.sun.crypto.provider.RSACipher;/** * 请求控制器 * @author Pan * */public class RequestController {	private HttpServletRequest request;	private HttpServletResponse response;	private FilterChain chain;		public RequestController(ServletRequest request,ServletResponse response,FilterChain chain){				this.request=(HttpServletRequest)request;		this.response=(HttpServletResponse)response;		this.chain=chain;	}		/**	 * 处置请求	 */	public void doFilter() throws Exception{				String filepath=request.getServletPath().replace("/","");		//以后这个文件的名称		//通过配置文件失掉跳转对象和一些操作的方法		Configuration configuration=new Configuration(request);		Request rt=configuration.find(filepath);		if(rt!=null){						//调用请求对象管理器 的返回值 来肯定 要转发到的页面						//如果没有配置类路径,就当作转发器应用直接转发到结果页			if(rt.getClassPath().equals("")){				Result rs=ResultUitl.findResult(rt.getResults(), ActionSupport.SUCCESS);				if(rs==null){					chain.doFilter(request, response);				}else{					request.getRequestDispatcher(rs.getPath()).forward(request, response);				}							}else{			ActionManage actionManage=new ActionManage(request,response,rt.getClassPath(),rt.getMethod());			String result=actionManage.getResult();									//寻觅放返回值对应的页面			List
results= rt.getResults(); boolean isDoFilter=false; //是不是已经跳转 for (Result result2 : results) { if(result2.getName().equals(result)){ //失掉对应的路径 String path=result2.getPath(); //如果不是以后页的时候 就转发或者跳转 if(!path.equals(filepath)){ //默认用转发,否则会丧失数据 isDoFilter=true; request.getRequestDispatcher(path).forward(request, response); } } } } } else { chain.doFilter(request, response); } }}

    请求管理器调用了,配置管理器,和Action管理器。

    配置管理器用来读取request.xml 的配置信息,然后传入给Action管理器,

    Action管理器来实例化用户Action,然后再调用转换器进行字段类型转换并赋值。

    最后执行用户Action定义的方法,然后标志 SECUESS、INPUT、ERROR等...然后再进行转发,如果是以后面页就不进行转发,而是采取不处置的操作,

    交给其他的拦截器去处置。

    基本上配置和运行原理都是和Struts2差不多的。这是两天时光实现开辟的。

    需要源码的同窗可以联系下我。Q:599194993

    想找个人一起来继续实现这个框架,下一步盘算支持hibernate和Spring这两个框架。有意向的留下信息

    注:转载请注明来源

文章结束给大家分享下程序员的一些笑话语录: 那是习惯决定的,一直保持一个习惯是不好的!IE6的用户不习惯多标签,但是最终肯定还是得转到多标签的浏览器。历史(软件UI)的进步(改善)不是以个人意志(习惯)为转移的!

--------------------------------- 原创文章 By

框架和配置
---------------------------------

转载于:https://www.cnblogs.com/jiangu66/archive/2013/05/24/3097660.html

你可能感兴趣的文章
电子眼抓拍大解密
查看>>
51nod1076 (边双连通)
查看>>
Linux pipe函数
查看>>
java equals 小记
查看>>
2019春 软件工程实践 助教总结
查看>>
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
国外常见互联网盈利创新模式
查看>>
android:scaleType属性
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Linux中防火墙centos
查看>>
如何设置映射网络驱动器的具体步骤和方法
查看>>
centos下同时启动多个tomcat
查看>>
Leetcode Balanced Binary Tree
查看>>