Servlet的一些API使用介绍
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.csdn.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
Servlet的一些API使用介绍的更多相关文章
- Odoo 二次开发教程(五)-新API的介绍与应用
[关于odoo新API的介绍,Internet上资料很少,或者不够完整详实,这会对初学者造成很大的困惑,本篇的目的就是希望能帮助新手了解新API的大概] odoo 新api的实现是借助于python装 ...
- Tyk API网关介绍及安装说明
Tyk API网关介绍及安装说明 Tyk是一个开源的轻量级API网关程序. 什么是API网关 API网关是一个各类不同API的前置服务器.API网关封装了系统内部架构,对外提供统一服务.此外还可以实现 ...
- spring3 的restful API RequestMapping介绍
原文链接:http://www.javaarch.net/jiagoushi/694.htm spring3 的restful API RequestMapping介绍 在spring mvc中 @R ...
- FileNet P8 工作流生命周期管理和 Process Engine API 应用介绍
摘录:https://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0902wangzheng/ FileNet P8 工作流生 ...
- Tesseract-OCR-05-主要API功能介绍
Tesseract-05-主要API功能介绍 tesseract本身代码是由c/c++混编而成的,其中有用的简单的接口函数几乎都是在baseapi.h中 从其处理过程中,不难得出: 它还需要有一个im ...
- 四. 几个Promise常用API的介绍与使用
四. 几个常用API的介绍与使用 1. Promise构造函数:Promise(excutor){} excutor函数:同步执行 (resolve, reject) => {} resolve ...
- Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解
Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...
- Servlet第五篇【介绍会话技术、Cookie的API、详解、应用】
什么是会话技术 基本概念: 指用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们称为一次会话. 为什么我们要使用会话技术 ...
- 腾讯微博java(android)sdk新增微博api详细介绍
本文主要介绍腾讯微博android sdk中新增微博有关的8个接口,以及使用的示例代码 注意:以下所有的api示例代码都需要先新建QqTSdkService类对象qqTSdkService并初始化,见 ...
随机推荐
- <ASP.NET4 从入门到精通>学习笔记3
第三部分,状态管理与缓存 何为状态管理.起始对于web而言.经过前面章节的解说.已经理解,对于web程序,就是一个无状态的程序.每次的请求与每次的响应,两者之间本身就是独立存在的,这一点对于早期的静态 ...
- Android(java)学习笔记146:Bundle和Intent类使用和交互
Bundle只是一个信息的载体 将内部的内容以键值对组织 ,Intent负责Activity之间的交互自己是带有一个Bundle的.Intent.putExtras(Bundle bu ...
- Clean Code(三):注释
在工作中经常在刚开始写代码的时候,写下类与方法的注释,时间久了,CR多了,也不可能一直去修改注释了.加班都累成dog.注释才不改呢,就是这么任性,哈哈. 项目久了,注释会欺骗阅读者,本人被骗过,也骗过 ...
- ECMA5 Array 新增API reduce
1)reduce:相当与迭代: [].reduce(function(previous,current,index,array){ return previous * current;//相当与做阶乘 ...
- c# switch case语句
switch是一个控制语句,用于选择一个要执行的语句块. 一个switch语句包括一个或多个执行的语句块.每个语句块包括一个或多个case标签,case后接要执行的语句. 如下面的代码 Codeint ...
- 点击按钮弹出一个div层
JQuery弹出层,点击按钮后弹出遮罩层,还有关闭按钮 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml& ...
- 深入分析 Java 中的中文编码问题 (文章来自网络)
许令波,developerWorks 中国网站最佳作者,现就职于淘宝网,是一名 Java 开发工程师.对大型互联网架构设计颇感兴趣,喜欢钻研开源框架的设计原理.有时间将学到的知识整理成文章,也喜欢记录 ...
- 启动 XPs 代理
Xps代理:扩展了 1 : 运行sp_configure检查代理XPs 的 值. EXEC SP_CONFIGURE 'agent xps'查看run_value 值是否为0,如果为0:需要更改此设置 ...
- web页面的生命周期
1.先上几张原理图着重理解: 现在针对第四副图原理进行解析: 流程: 1.浏览器发送请求 2.服务器软件(IIS)接收,它最终的目的就是为了向客户输出它请求的动态页面生成的html代码. 3.服务器不 ...
- oracle级联删除 触发器
CREATE TABLE STUDENT( --创建学生表 ID NUMBER(10) PRIMARY KEY, --主键ID SNAME VARCHAR2(20), CLASSNAME V ...