账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    servlet路径问题
    19
    0

    代码一:

    package com.main.service;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    import java.io.PrintWriter;
    
    
    public class ReadData {
        
             public static void main(String[] args) {
                     try {
                         testSaxReader("person");
                         System.out.println("---------");
                         testSaxReader("隶属度");
                     } catch (Exception e) {
                         e.printStackTrace();
                     }
                     
                 }
                  public static void testSaxReader(String item) throws DocumentException, FileNotFoundException {
                      SAXReader saxReader = new SAXReader();
                      System.out.println("工程路径:"+System.getProperty("user.dir"));//问题所在
                      FileInputStream file = new FileInputStream("src/0625.xml");
                      Document doc = saxReader.read(file);
                      Element menu = doc.getRootElement();
                      System.out.println(menu.getName());
                      org.dom4j.Node person=menu.selectSingleNode("/Menu//Item[@Title='"+item+"']");
                      String nodeValue = person.getText();
                      System.out.println(nodeValue);
                      File fp=new File("./data/"+item+".txt");
                      PrintWriter pfp= new PrintWriter(fp);
                      pfp.print(nodeValue);
                      pfp.close();
                      
                  }
        
    }
    

    代码一有main方法,System.out.println("工程路径:"+System.getProperty("user.dir"));打印出来的结果是工程路径:E:\workspace\outer\javaConnectR,是我项目的路径。

    代码二:

    package com.main.service;
    
    
    import java.awt.Graphics;
    import java.awt.GraphicsConfiguration;
    import java.awt.GraphicsDevice;
    import java.awt.GraphicsEnvironment;
    import java.awt.HeadlessException;
    import java.awt.Image;
    import java.awt.MediaTracker;
    import java.awt.Toolkit;
    import java.awt.Transparency;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    
    
    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    
    import org.rosuda.REngine.REXP;
    import org.rosuda.REngine.Rserve.RConnection;
    
    import com.main.util.Rservel;
    
    public class Execute extends JFrame{
    private static final long serialVersionUID=1L;
    static Image img;
    public REXP getRobj() throws Exception{
        System.out.println("getRobj()");
        
        RConnection c=Rservel.getRConnection();
        c.eval("library(RColorBrewer)");
        c.eval("H <- c(7,12,28,3,41)");
        c.eval("colors<-brewer.pal(5,'Set1')");
        c.parseAndEval(" barplot(H,rep(1,5),col=colors);dev.off()");
        xp=c.parseAndEval("r=readBin('test.jpg','raw',3000*3000);unlink('test.jpg');r");
        return xp;
    }
        
        
        public void createPlot(REXP xp, JFrame f,String path)throws Exception{
            
            try {
                Image image=Toolkit.getDefaultToolkit().createImage(xp.asBytes());
                BufferedImage bufferedImage=toBufferedImage(image);
                System.out.println("工程路径:"+System.getProperty("user.dir"));
               ImageIO.write(bufferedImage, "JPG", new File(path+"/outImg/98.jpg"));//
              
           } catch (IOException e) {
               e.printStackTrace();
           }
        }
    
        public  BufferedImage toBufferedImage(Image image) {  
            if (image instanceof BufferedImage) {  
                return (BufferedImage)image;  
             }  
             image = new ImageIcon(image).getImage();  
             BufferedImage bimage = null;  
             GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();  
            try {  
                 
                int transparency = Transparency.OPAQUE;   
                 GraphicsDevice gs = ge.getDefaultScreenDevice();  
                 GraphicsConfiguration gc = gs.getDefaultConfiguration();  
                 bimage = gc.createCompatibleImage(  
                 image.getWidth(null), image.getHeight(null), transparency);  
             } catch (HeadlessException e) {  
             }  
            
            if (bimage == null) {   
                int type = BufferedImage.TYPE_INT_RGB;   
                 bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);  
             }  
             Graphics g = bimage.createGraphics();  
             g.drawImage(image, 0, 0, null);  
             g.dispose();  
            
            return bimage;  
        } 
    
    }
    
    
     
    
    package com.main.web;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.rosuda.REngine.REXP;
    import org.rosuda.REngine.Rserve.RConnection;
    import org.rosuda.REngine.Rserve.RserveException;
    
    import com.main.service.Execute;
    
    /**
     * Servlet implementation class ExecuteR
     */
    @WebServlet("/ExecuteR")
    public class ExecuteR extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public ExecuteR() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String RSentences=request.getParameter("data");//这个例子必须到页面点击
            //System.out.println(filePath);
            String path=getServletContext().getRealPath("/");
            System.out.println("servlet路径:"+path);
            Execute wc=new Execute();
            REXP xp;
            try {
                xp = wc.getRobj();
                wc.createPlot(xp,wc,path)
            } catch (Exception e) {
                e.printStackTrace();
            }
            
            
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    
    

    代码二:没有main方法,是一个java类,通过servlet调用System.out.println("工程路径:"+System.getProperty("user.dir"));打印出来结果是工程路径:E:\BE\eclipse\eclipse,是我安装eclipse的路径,不是项目路径;代码String path=getServletContext().getRealPath("/");打印出来结果是:servlet路径:E:\workspace\eclipse_jee_mars2\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\javaConnectR\

    1.请问为什么会有这样的区别??
    2.我希望代码二里的ImageIO.write(bufferedImage, "JPG", new File(path+"/outImg/98.jpg"));new File里的路径是和代码一System.getProperty("user.dir"));打印出来的路径E:\workspace\outer\javaConnectR一致,为项目路径。请问该怎么解决??

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 黄土守山人 普通会员 1楼

      在Java中,你可以在Servlet的配置文件中设置Servlet的处理路径。这样,当用户请求到Servlet时,服务器就会从这个配置文件中指定的路径开始查找Servlet的类。

      例如,如果你的Servlet位于/servlets目录下,你可以这样配置:

      xml <web-app> <servlet> <servlet-name>myServlet</servlet-name> <servlet-class>com.example.MyServlet</servlet-class> <init-param> <param-name>myParam</param-name> <param-value>value</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/servlets/myServlet</url-pattern> </servlet-mapping> </web-app>

      在这个例子中,当用户请求到/servlets/myServlet这个路径时,服务器就会开始查找com.example.MyServlet类。如果找到了,就会调用这个类的doGet方法。

      如果你的Servlet位于不同的目录下,你可能需要在配置文件中指定多个Servlet的路径。例如,你可能有两个Servlet,一个位于/servlets目录下,另一个位于/subServlets目录下。你可以这样配置:

      xml <web-app> <servlet> <servlet-name>myServlet</servlet-name> <servlet-class>com.example.MyServlet</servlet-class> <init-param> <param-name>myParam</param-name> <param-value>value</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>myServlet</servlet-name> <url-pattern>/servlets/myServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>subServlets/myServlet</servlet-name> <url-pattern>/subServlets/myServlet</url-pattern> </servlet-mapping> </web-app>

      在这个例子中,当用户请求到/subServlets/myServlet这个路径时,服务器就会开始查找com.example.MyServlet类,如果找到了,就会调用这个类的doGet方法。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部