如何获取tomcat下的webapps的绝对路径呢

bk2898 77 0

如何获取tomcat下的webapps的绝对路径呢

我想要这个路径,如何得到呢 D:\tool\apache-tomcat-6.0.20\webapps 求高手指点谢谢
123456789101112import java.io.File;public class MainTest {    public static void main(String[] args) {        //获取是项目的绝对路径        System.out.println(System.getProperty("user.dir"));        System.out.println(new File("").getAbsolutePath());        //获取到clsspath绝对路径        System.out.println(MainTest.class.getResource("/"));        System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));        System.out.println(Test.class.getClassLoader().getResource(""));    }}

前提是,你项目要部署到D:\tool\apache-tomcat-6.0.20\webapps下!

建议你根据具体需求选择适合的 *** !


有问题再追问,good luck!

HttpServletResponse这个类有什么用

HttpServletResponse继承了ServletResponse接口,并提供了与Http协议有关的 *** ,这些 *** 的主要功能是设置HTTP状态码和管理Cookie。HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的 ***
HttpServletResponse对象可以向客户端发送三种类型的数据:
a.响应头(Response headers)
b.状态码(Protocol—Status code—Description)
c.实体数据(Entity body )
举例如下:
HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Mon, 5 Jan 2004 13:13:33 GMT
Content-Type: text/html
Last-Modified: Mon, 5 Jan 2004 13:13:12 GMT
Content-Length: 112
<html><head><title>HTTP Response Example</title></head>....</html>
常用 ***
addHeader(String name,String value) 将指定的名字和值加入到响应的头信息中
encodeURL(String url) 编码指定的URL
sendError(int sc) 使用指定状态码发送一个错误到客户端
setDateHeader(String name,long date 将给出的名字和日期设置响应的头部
setHeader(String name,String value) 将给出的名字和值设置响应的头部
setStatus(int sc) 给当前响应设置状态码
HttpServletResponse.sendRedirect *** 对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求; *** 调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。
response.setContentType("text/html;charset=utf-8");
setContentType(String ContentType) 设置响应的MIME类型 ,页面的设置文本类型,获取或设置输出流的 HTTP MIME 类型。输出流的 HTTP MIME 类型。默认值为“text/html”。
MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
使用输出流输出一张图片的时候,比如做验证码图片的时候 如果在Firefox中直接浏览验证码是乱码,放在<img>里面则不会
这时候就要事先指定Response.ContentType = "image/jpeg";//设定MIME类型
response.setHeader(“Refresh”,”2;url=”http://www.baidu.com”); 页面的刷新
消息实体内容 通过输出流对象进行设置,用以下两个 *** :
Response.getOutputStream() 字节输出流对象
Response.getWriter() 字符的输出流对象
getOutputStream和getWriter *** 的比较
(1)getOutputStream *** 用于返回Servlet引擎创建的字节输出流对象,Servlet程序可以按字节形式输出响应正文。
(2)getWriter *** 用于返回Servlet引擎创建的字符输出流对象,Servlet程序可以按字符形式输出响应正文。
(3)getOutputStream和getWriter这两个 *** 互相排斥,调用了其中的任何一个 *** 后,就不能再调用另一 *** 。要不会出现错误java.lang.IllegalStateException
(4)getOutputStream *** 返回的是字节输出流对象的类型为ServletOutputStream,它可以直接输出字节数组中的二进制数据。
(5)getWriter *** 将Servlet引擎的数据缓冲区包装成PrintWriter类型的字符输出流对象后返回,PrintWriter对象可以直接输出字符文本内容。
(6)Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。
(7)Serlvet的service *** 结束后,Servlet引擎将检查getWriter或getOutputStream *** 返回的输出流对象是否已经调用过close *** ,如果没有,Servlet引擎将调用close *** 关闭该输出流对象。
注:out.close();系统会自己释放,但一般写上
选择getOutputStream和getWrite *** 的要点
(1)PrintWriter对象输出字符文本内容时,它内部还是将字符串转换成了某种字符集编码的字节数组后再进行输出,使用PrintWriter对象的好处就是不用编程人员自己来完成字符串到字节数组的转换。
(2)使用ServletOutputStream对象也能输出内容全为文本字符的网页文档,但是,如果网页文档内容是在Servlet程序内部使用文本字符串动态拼凑和创建出来的,则需要先将字符文本转换成字节数组后输出。
(3)如果一个网页文档内容全部为字符文本,但是这些内容可以直接从一个字节输入流中读取出来,然后再原封不动地输出到客户端,那么就应该使用ServletOutputStream对象直接进行输出,而不要使用PrintWriter对象进行输出。
向客户端写入中文
使用OutputStream向客户端写入中文:
String data = "中国";
OutputStream stream = response.getOutputStream();//获取一个向Response对象写入数据的流,当tomcat服务器进行响应的时候,会将Response中的数据写给浏览器
stream.write(data.getBytes("UTF-8"));//此时在html页面会出现乱码,这是因为:服务器将"中国"按照UTF-8码表进行编码,得到对应的码值假设是98,99,服务器将码值发送给浏览器.浏览器默认按照GB2312进行解码,在GB2312码表中对应的字符已不是"中国"
正确代码如下:
response.setHeader("Content-type","text/html;charset=UTF-8");//向浏览器发送一个响应头,设置浏览器的解码方式为UTF-8
String data = "中国";
OutputStream stream = response.getOutputStream();
stream.write(data.getBytes("UTF-8"));
使用PrintWriter向客户端写入中文:
PrintWriter writer = response.getWriter();
writer.write("中国");
//同样会出现乱码,这是因为我们将"中国"写入response对象时,tomcat服务器为了将数据通过 *** 传输给浏览器,必须进行编码,由于没有指定编码方式,默认采用ISO8859-1,当浏览器接收到数据后,根据GBK解码必然出现乱码
正确代码如下:
response.setCharacterEncoding("UTF_8");//设置Response的编码方式为UTF-8
response.setHeader("Content-type","text/html;charset=UTF-8");//向浏览器发送一个响应头,设置浏览器的解码方式为UTF-8,其实设置了本句,也默认设置了Response的编码方式为UTF-8,但是开发中更好两句结合起来使用 ,设置响应头,控制浏览器以指定的字符编码编码进行显示,
//response.setContentType("text/html;charset=UTF-8");同上句代码作用一样
PrintWriter writer = response.getWriter();
writer.write("中国");
在获取PrintWriter输出流之前首先使用"response.setCharacterEncoding(charset)"设置字符以什么样的编码输出到浏览器,如:response.setCharacterEncoding("UTF-8");设置将字符以"UTF-8"编码输出到客户端浏览器,然后再使用response.getWriter();获取PrintWriter输出流,这两个步骤不能颠倒
使用Response实现文件下载:
文件下载功能是web开发中经常使用到的功能,使用HttpServletResponse对象就可以实现文件的下载
文件下载功能的实现思路:
1.获取要下载的文件的绝对路径
2.获取要下载的文件名
3.设置content-disposition响应头控制浏览器以下载的形式打开文件
4.获取要下载的文件输入流
5.创建数据缓冲区//缓冲区解释见下文
6.通过response对象获取OutputStream流
7.将FileInputStream流写入到buffer缓冲区
8.使用OutputStream将缓冲区的数据输出到客户端浏览器
案例1
private void downloadFileByOutputStream(HttpServletResponse response){
//1.获取要下载的文件的绝对路径
String realPath = this.getServletContext().getRealPath("/download/1.JPG");
//2.获取要下载的文件名
String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);
//3.设置content-disposition响应头控制浏览器以下载的形式打开文件
response.setHeader("content-disposition", "attachment;filename="+fileName);
//4.根据文件路径获取要下载的文件输入流
InputStream in = new FileInputStream(realPath);
int len = 0;
//5.创建数据缓冲区
byte[] buffer = new byte[1024];
//6.通过response对象获取OutputStream流
OutputStream out = response.getOutputStream();
//7.将FileInputStream流写入到buffer缓冲区 while ((len = in.read(buffer)) > 0) {
//8.使用OutputStream将缓冲区的数据输出到客户端浏览器
out.write(buffer,0,len);
}
in.close();
}
案例2
@RequestMapping("/download")
public void download(HttpServletRequest req,HttpServletResponse res){
String fileName = "plcdmb.xls";//要下载的文件名
//1.获取要下载的文件的绝对路径
String realPath = req.getSession().getServletContext().getRealPath("/wbms/download");
File file=new File(realPath+"/"+fileName); //设置content-disposition响应头控制浏览器以下载的形式打开文件
res.setCharacterEncoding("utf-8");
res.setContentType("application/octet-stream");
res.setHeader("Content-Disposition", "attachment;fileName="+ URLEncoder.encode("批量出单模板.xls", "UTF-8"));
InputStream inputStream=new FileInputStream(file);根据路径获取要下载的文件输入流
OutputStream out = res.getOutputStream();
byte[] b=new byte[1024]; //创建数据缓冲区
int length;
while((length=inputStream.read(b))>0){ 把文件流写到缓冲区里
out.write(b,0,length);
}
out.flush();
out.close();
inputStream.close();

}
在编写下载文件功能时,要使用OutputStream流,避免使用PrintWriter流,因为OutputStream流是字节流,可以处理任意类型的数据,而PrintWriter流是字符流,只能处理字符数据,如果用字符流处理字节数据,会导致数据丢失。
其他
在jsp嵌套的java代码中执行js
<%
//保存登录信息
Cookie[] cookies=request.getCookies();//从request中获得cookie对象的 ***
String phone="";// *** 号
String state="";//
if(cookies!=null){
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("state")){
state=cookies[i].getValue();
if(state.equals("cont_failed")){
out.write("<script language='javascript'> alert('hello'); </script>;");
}
}
}
}
%>
getWriter()输出js代码的案例
1.res.getWriter().write("<script language=\"javascript\">location.href='"+req.getContextPath()+"/wbms/ecm//init.action';</script>");//在原页面输出
res.getWriter().flush();
2.response.getWriter().write("<script language='javascript'>alert('请上传正确格式的文件!!!');window.history.back();</script>");
3.res.getWriter().flush();
如果不使用这种形式,传值用request.setAttribute()来传值跳转用重定向或者转发页面取值可以用jstl的$()取值可以在input标签的value中使用$()取值

分享相关内容的知识扩展阅读:

jfreechart 出现乱码问题

代码如下:
DefaultPieDataset piedata = new DefaultPieDataset();
//之一个参数为名称,第二个参数是double数
piedata.setValue("空座", tj1);
piedata.setValue("预定", tj3);
piedata.setValue("已售", tj2);
//创建JFreeChart,都使用ChartFactory来创建JFreeChart,很标准的工厂设计模式
JFreeChart chart = ChartFactory.createPieChart(title, piedata, true, true, true);

chart.setBackgroundPaint(Color.white);
String filename = ServletUtilities.saveChartAsPNG(chart, 650, 350, null, session);
FileOutputStream fos_jpg = null;
String graphURL = new java.io.File(request.getRealPath(request.getServletPath())).getParent() + "/upload/" + filename;
try {
fos_jpg=new FileOutputStream(graphURL);
ChartUtilities.writeChartAsJPEG(fos_jpg,1.0f,chart,640,480,null);
fos_jpg.close();
} catch (Exception e) {
e.printStackTrace();
}
最主要的是设置font

jfreechart中文乱码问题解决方案(转)
柱状图(CategoryPlot):
CategoryPlot plot=chart.getCategoryPlot();//获取图表区域对象
CategoryAxis domainAxis=plot.getDomainAxis();
//水平底部列表
domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14));
//水平底部标题
domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12));
//垂直标题
ValueAxis rangeAxis=plot.getRangeAxis();//获取柱状
rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15));
chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));
饼图(PiePlot):
JFreeChart chart = ChartFactory.createPieChart3D("IT行业职业分布图", dataset, true, false, false);
chart.getTitle().setFont(new Font("黑体",Font.BOLD,20));//设置标题字体
PiePlot piePlot= (PiePlot) chart.getPlot();//获取图表区域对象
piePlot.setLabelFont(new Font("黑体",Font.BOLD,10));
chart.getLegend().setItemFont(new Font("黑体",Font.BOLD,10));
时序图(TimeSeries)
XYPlot plot = (XYPlot) chart.getPlot();
//纵轴字体
plot.getRangeAxis().setLabelFont(new Font("宋体", Font.BOLD, 15));
//横轴框里的标题字体
chart.getLegend().setItemFont(new Font("宋体", Font.ITALIC, 15));
//横轴列表字体
plot.getDomainAxis().setTickLabelFont(new Font("新宋体", 1, 15));
//横轴小标题字体
plot.getDomainAxis().setLabelFont(new Font("新宋体", 1, 12));
折线图
chart.getTitle().setFont(new Font("宋体", Font.BOLD, 15));
chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));
CategoryAxis domainAxis = plot.getDomainAxis();
/*------设置X轴坐标上的文字-----------*/
domainAxis.setTickLabelFont(new Font("黑体", Font.PLAIN, 11));
/*------设置X轴的标题文字------------*/
domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();
/*------设置Y轴坐标上的文字-----------*/
numberaxis.setTickLabelFont(new Font("黑体", Font.PLAIN, 12));

/*------设置Y轴的标题文字------------*/
numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12))

getRealPath("/")函数中的"/"表示什么意思?

1、表示获得服务器的绝对路径的意思。

2、getRealPath问题:

String filename=request.getRealPath(filename)。信息:warning: [deprecation] getRealPath(java.lang.String) in javax.servlet.ServletRequest has been deprecated。解决:这个getRealPath *** 已经不建议使用了,参看request.getRealPath的java doc,Deprecated. As of Version 2.1 of the Java Servlet API, use,ServletContext.getRealPath(java.lang.String) instead.而在servlet中使用getServletContext.getRealPath()这个 *** 受到war 和non-war的影响,以及不同app server实现的影响,运气好的话,你常常会得到null,比如你在weblogic上部署war文件,又调用这个 *** 。推荐ServletContext.getResourceAsStream
3、关于serveletContext.getRealPath返回NULL和不同的app server返回不同的结果:有几个配置文本配置文件(是一些报表的模板),放在WEB-INF的config目录下,程序中是这样得到这个config的实际路径的:先用 serveletContext.getRealPath得到根路径,tomcat中比如是c:\tomcat\webapp\test,然后我加上 "/WEB-INF/config/aa.config",这样得到文件的path然后进行读入,应用在tomcat上跑是ok的,后来将war放到weblogic上,出错,原因是:在weblogic上用getRealPath得到的是myserver\stage\_appsdir_test_war\test.war!\WEB-INF\config....这样的路径,于是一直报FileNotFoundException。

String MultipartFile怎么实现带进度条的上传

import java.io.File;
import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

/**
* @author gr
* @date 2014.2.12
* @ grprogram@163.com
*/
@Controller
public class FileUpload {

@RequestMapping("fileUploadPage")//对应页面传来的action
public ModelAndView fileUpload(@RequestParam("file") MultipartFile file1,HttpSession session) throws Exception, IOException {
ModelAndView mav=new ModelAndView();
if (file1.isEmpty()) {
mav.setViewName("fail.html");
}else {
File tempFile=new File(session.getServletContext().getRealPath(".")+"/"+file1.getOriginalFilename());
if (!tempFile.exists()) {
tempFile.createNewFile();
}
file1.transferTo(tempFile);//写入文件
System.out.println(session.getServletContext().getRealPath("")+"/"+file1.getOriginalFilename());
System.out.println(tempFile.getAbsolutePath());
mav.setViewName("success");
}
//@RequestParam("name") String name,
//mav.addObject("name", name);
return mav;
}

}

抱歉,评论功能暂时关闭!