自己写了一个缓存系统,没有使用任何框架。目前使用时都需要jsp页面传递request,然后得到application
如果不想每个功能都传递request怎样从java类中直接得到request?
就像struts一样可以直接使用ServletActionContext.getRequest (); 的方法得到request。
问题的前提是不使用任何框架就是普通的jsp系统。
如果不想每个功能都传递request怎样从java类中直接得到request?
就像struts一样可以直接使用ServletActionContext.getRequest (); 的方法得到request。
问题的前提是不使用任何框架就是普通的jsp系统。
解决方案 »
- ant和xdoclet现在做项目还有人用吗?
- 多线程的监控,如何实现?
- 代码发送邮件
- 求xmlrpc的完整小工程,和说明文档。越详细越好。工程要能运行啊
- 快急疯了!(hibernate与数据库)
- 谁用过dsoframer.ocx这个控件 跪求实例
- 想找公司实习(杭州)
- 问:如何实现组合查询?
- 用JAVA读XML文件,为什么遇到中文就出错了??有什么办法解决吗???
- 从SVN下载下来 自己开发了个新模块 如何测试啊 JAVA项目可以MAIN方法测试 那一个BS项目模块呢
- tomcat配置虚拟主机问题
- jxl读取excel抛jxl.read.biff.BiffException: Unable to recognize OLE stream
import javax.servlet.http.HttpServletResponse;
试试
回答这个问题的前提是你了解struts整个系统框架。或者自己就能够写框架这类人。
呵呵,我了解struts整个系统框架,觉得还是你比较强大!
struts跟servlet是紧密耦合的。JSP本质也是一个servlet。
response和request是由servlet容器提供给servlet的。
public class A{
static ThreadLocal<HttpServletRequest> threadLocal = new ThreadLocal<HttpServletRequest>();
}
在你的JSP、Servlet中,先调用A.threadLocal.set(request);
然后在你的类中就可以A.threadLocal.get()返回request对象了
ThreadLocal可以避免多个线程访问造成的问题
所以没有什么ServletContext之类的
这里用ThreadLocal是一个选择,实际上Structs、Hiberante等都有使用这个类来处理的
我记得我上课的时候 老师就是用这个 给实现 的 就 1个过滤器 + 普通java 类没有 servlet
模拟 struts 运行在普通类中 能获取到request
首先写一个类Global:这个类的共享变量主要是存放你每次的请求request对象,
然后用一个filter,把request保存到上面的这个类的共享变量里这些准备工作做好之后,每次你有java类根本不用传这个参数,只有直接取就行了,比如:
只要调用这个方法Global.getContext()就可以取得每次的request对象了,
在这个类里写一下粗略的代码:
public final class Global{ private static final ThreadLocal<HttpServletRequest> context = new ThreadLocal<HttpServletRequest>(); public static void setContext(HttpServletRequest request) {
context.set(request);
} public static HttpServletRequest getContext() {
return context.get();
}
}
大致讲一个思路在这里,具体代码涉及机密,不便透露
该结帖了
还有JSP本来就会被编译成servlet,而request是他的一个内置对象,难道楼主想重新自己定规则!
我也这么认为。。java类包中可以这样得到pageContext 然后通过他去获得相应的隐含对象
一般常用的方法就两种,一种就是把request作为参数传递到该类的方法中,另外一种就是我上面说到的使用一个static ThreadLocal 对象的方法
还有很多人不知道到底我在做什么,就像23楼说的那样我这个是一个公司内部使用的框架。建好数据库表后使用工具生成基础代码,基本的crud操作全部生成好了,包括页面的javascript验证,那个组建是单选,多选,下拉框都是自动生成的。页面上实体属性的中文名称也是自动生成的。也就是说基本的增删改操作按一下生成按钮就可以不用管了。加传递request是为了得到application然后实现系统缓存的。现在缓存是完全可以使用了,就是页面要把request传递到实现缓存的基础类中很不爽。所以需要改进。
32楼的问题很奇怪,全局使用的缓存不存储在application里面还能存储到那里?
我的缓存是存储在application里面的,application在java类中怎么得到?是通过request得到的(另外要request的原因是要取得操作者ip实现系统日志功能)在缓存的基类里面怎么得到request?我目前是通过jsp页面传递进去的,每个要使用缓存的页面都传递request很麻烦是吧?那就要在基类里面处理以后页面再也不用管了。
如果你还是不太清楚,那如果是你自己实现缓存系统你会怎么实现?
其实我觉得没必要这样做,不知道楼主这样做是想解决什么问题。
struts2把这些东西封成一个组件,另外还提供了action中类变量+getter/setter的方式,避免了不少直接操作servlet的Api的情况,而需要操作会话上下文等东西时直接由组合的方式从那个组件获得,而不是由execute方法作为参数传进来。这样做的一大优点就是:脱离web容器,更便于测试。ServletActionContext那个东东应该是以运行期代理增强类功能的方式将指定会话上下文什么的注入其中,才使得我们能在调用其获取方法时得到属于当前线程的会话或上下文,这个还得去看他源码才能确定这个猜想。
回答这个问题的前提是你了解struts整个系统框架。或者自己就能够写框架这类人。”光就看你说的这段话,感觉很看不起人,你不想别人来回答,你就注明啊,“非此类人”请勿回答!。多打几个字不会少你一个手指。 特别是还反问好心的参与者,没听说过那几个jsp内置对象!我看你眼球不要老翘在天花板上;....多说无益...
还有要说明的是:楼主有点儿,有点儿。。那个意思。呵,心高什么什么气傲,别人回复的不好,可以不理,但是可不要小看人哦,也许你做的这一整套东西,有可能别人早就做过了,呵。一山还有一山高,虚心点儿,你就进步的更快。
还有最后一点儿,csdn确实没有javaeye高手多,各位别拿砖砸我
ServletActionContext与request的关系?等等等等等等.....看样子除了要知道request.getXXX setXXX还有必要了解很多东西啊 之前曾经找过一段时间这类信息 不过已经忘记了
再次证明 知识多少会限制人的想象力 完毕..
struts 中的action 和serlvet非继承关系
楼主只是想
public class A{
public void f(){
request.xxx();
}
}
而不是
public class A{
public void f(HttpServletRequest reqeust){
request.xxx();
}
}
public class A{
static ThreadLocal <HttpServletRequest> threadLocal = new ThreadLocal <HttpServletRequest>();
}
在你的JSP、Servlet中,先调用A.threadLocal.set(request);
然后在你的类中就可以A.threadLocal.get()返回request对象了
ThreadLocal可以避免多个线程访问造成的问
不管是 action 还是 servlet ,他们都继承(实现) HttpServlet抽象类(或者是其他的借口)
那楼主可以去看下 HttpServlet 这个类的源码,然后自己去写就ok了