Servlet的一些API使用介绍

时间:2024-11-03 12:35:44

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