final String rootPath = getServletConfig().getServletContext().getRealPath("/"); 获取项目运行的根路径:
rootPath + /WEB-INF/classes/account.txt 获取文件的项目绝对路径
在eclipse 发布到Tomcat的debut调试当中,将会打印出D:\jettTest\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\AuanyCompensate3\/WEB-INF/classes/account.txt
前面的目录是work目录
同时还能正常找到文件。。。。。。跪了
发布到Tomcat之后,打印出来的rootPath是 D:\Program Files\apache-tomcat-7.0.34\webapps\AuanyCompensate3\/WEB-INF/classes/account.txt
仍然找到的是项目目录所在的位置。
-----------------------------------------------------------------------
关于HttpServletResponse : sendRedirect的目录问题
sendRedirect("/uu");表示相对于服务器根路径。如http://localhost:8080/Test应
用(则提交至http://localhost:8080/uu);
Forward代码中的"/uu"则代表相对与WEB应用的路径。如http://localhost:8080/Test应用(则提交至
http://localhost:8080/Test/uu);
尤其要注意的是forward的相对路径是相对当前路径,如果当前访问的路径是http://localhost:8080/AuanyCompensate3/servelt/xxxxx
那么当前的forward跳转就是在xxxxx/servlet目录下,而事实上这个访问路径我们是可以自己设定的在web.xml或者注解中,有可能WEB-INF目录下就没有这个路径,所以我们这时需要在forward之前加上../用于跳出当前目录,找到真实的目录
比如
打包出来的工程目录
----AuanyCompensate3
----admin
----js
----jsp
----style
----WEB-INF
此时如果要访问jsp/userLogin.jsp
而当前的访问路径在http://localhost:8080/AuanyCompensate3/servelt/xxxxx 此时只能request.forward("../"+"/jsp/userLogin.jsp");是不是很麻烦?
不过我们如果在配置访问url的时候不多加前缀,就不会出现这个问题。
sendRedirect也可以直接发绝对地址:
“http://” + request.getServerName() + ":" + request.getServerPort() + "" + request.getContextPath() +"servlet/xxxx"请求
-----------------------------------------------------------------------------------
放置client访问到Jsp文件,可以通过Filter来处理这种情况,将所有的关于jsp的客户端访问请求都转发到登录界面。
-----------------
模板模式: BaseHttpServlet SessionValidateServlet 抽象出来的一些servlet公共操作。
Tencent QQ Wechat的 平台接入 也属于模板模式
----------------------------------------------------------------------------------------------------------------------------------------------------
在Java的工程项目中,如果资源文件在src/目录下,使用的时候需要加上new File("src/xxxxx");
如果是跟src同级目录,则可以直接new File("xxxxxx"),并且打成jar包之后,所有的资源文件都会被清理到jar包的同级目录,这时src将不会存在,都会从classes的目录下寻找资源文件,所以不建议将资源文件放置到src目录下同事使用src路径,应该使用类路径的相对方式。
在Java Web 工程当中,资源文件放置到src的目录下,直接使用new File("xxxx")就可以取到了。
当然也可以使用Thread.currentThread().getContextClassLoader().getResourceAsStream("account.txt");说白了都是在classes的同级目录,就是当前类目录下。
在java工程当中如果把account.txt放置到src下,则建议使用上述方式加载,而不是使用src/account.txt的方式加载。
-----------------------------------------------------
通过filter 和 listenr完成请求过滤和组件初始化
通过使用javax.servlet.ServletContextListener 来初始化 HttpIO组件,日志组件,配置文件等等。
通过使用Filter 来完成jsp请求的过滤(具体可以看有无session),和admin文件夹下jsp请求的过滤,admin下的访问必须有root用户名才行
可以通过filter-mapping 来配置访问过滤器
/admin/*
/jsp/*
filter listener servlet 这三项配置在web.xml当中很重要,记得还有个session的listener
http://blog.****.net/opnmzxcvb/article/details/4554329
---------------------------------------------------------------------------------------
在Jsp页面当中,/代表绝对路径 没有/代表相对路径
比如要使用Style下面的css样式或者js 则只需要使用Stype/xxx js/xxxx
还有就是每个jsp页面都需要使用
String path = request.getContextPath();这段什么用
这样的代码是在jsp里出现的吧, 那么他的含义就是为了得到一个路径,做动态网站时,需要提交form表单在表单的action里面就会这样来写 action="<%=path %>/add.do" 这样来提交到相应的servlet中去,这样可以避免路径的错误,而采用这样的相对路径会更好些
答:request.getContextPath()应该是得到项目的名字,如果项目为根目录,则得到一个"",即空的字条串, 如果项目为abc, <%=request.getContextPath()% >/ 将得到abc/,服务器端的路径则会自动加上
在JSP中我们总会出现一个路径问题比如:
jstest001是项目名
1、绝对路径
<script type="text/javascript" src="/jstest001/ext/ext-base.js"></script>和
2、相对路径
<script type="text/javascript" src="/ext/ext-base.js"></script>
在我们实际应用中,我们经常在jsp中使用到路径,可以有一些是从项目开始的绝对路径有一些是相对路径。而经常源码照抄过来不能运行。
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<base href="<%=basePath%>">
其实是上面这三句话搞的鬼,很简单的一句话。如果没有这三句话的话就可以直接写到绝对路径,但是有的话就要写相对路径
绝对路径就是 href = “<%request.getContextPath()%>/servlet/xxxxxxx”
有了上面的配置 直接写 servlet/xxxxx