Java Servlet 和 JSP,如何从文件中获取完整路径名?

Java Servlet and JSP, How to get full path name from a file?

当我使用 request.getParameter("txtPhoto");它 returns 文件名 (image.jpg) 但我想获取完整路径名 (C:\Images\image.jpg) 因为我需要完整的位置来将文件保存在 MySQL 数据库。我希望你能帮助我。

------------------------JSP页数

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Upload</title>
    </head>
        <body>
            <form action="ImageController" method="post">
                <h1>File</h1>
                <input type="file" name="txtPhoto" placeholder="Upload Your Image" accept="image/gif, image/jpeg, image/png" /><br /><br />
                <input type="submit" value="Save">
            </form>
        </body>
</html>

----------------Servlet

@WebServlet(name = "ImageController", urlPatterns = {"/ImageController"})
public class imagenservlet extends HttpServlet

{
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException 
    {            
        if(request.getParameter("txtPhoto") == null)
        {
            response.sendRedirect("upload.jsp");
            return;
        }
        PrintWriter out = response.getWriter();

        FileInputStream input = null;
        File theFile = new File(request.getParameter("txtPhoto"));
        input = new FileInputStream(theFile);
        out.println("FullPathname" + " " + theFile.getAbsolutePath());

    }
}

您无法获取本地文件路径,因为它在服务器端没有用。它只会对黑客有用。这就是浏览器不发送它的原因。

在 JSP 端声明隐藏的 [=10th=] 变量,将所需的路径分配给该隐藏变量并在 servlet 中获取该变量,它只是解决问题。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<html lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    <title>APMC Junagadh</title>
    
    <!-- Bootstrap Core CSS -->
    <link href="<c:url value='/resources/css/bootstrap.min.css' />" rel="stylesheet" />

    <!-- MetisMenu CSS -->
    <link href="<c:url value='/resources/css/metisMenu.min.css' />" rel="stylesheet" />

    <!-- Custom CSS -->
    <link href="<c:url value='/resources/css/sb-admin-2.css' />" rel="stylesheet" />

    <!-- Custom Fonts -->
    <link href="<c:url value='/resources/css/font-awesome.min.css' />" rel="stylesheet" />

    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
    
</head>

<body>

  <c:choose>
   <c:when test="${empty editDistrict}">
    <c:set var="action" value="${pageContext.request.contextPath}/Admin/admin/district_add" />
    <c:set var="caption" value="Save" />   
   </c:when>
   <c:otherwise>
    <c:set var="action" value="${pageContext.request.contextPath}/Admin/admin/district_update" />
    <c:set var="caption" value="Update" />
   </c:otherwise>    
  </c:choose>
  
  <div align="right"> <a href="<c:url value="/j_spring_security_logout" />" >Logout</a> </div>
  
  <div class="container">
        <div class="row">
            <div class="col-md-4 col-md-offset-4">
    
                <div class="panel panel-primary">
         
        <div class="panel-heading">
                        <h3 class="panel-title">District Name</h3>
                    </div>
                    
                    <c:if test="${!empty successMsg}">
     <div class="alert alert-success">
      ${successMsg}
     </div>
     </c:if>
     
     <c:if test="${!empty errorMsg}">
     <div class="alert alert-danger">
      ${errorMsg}
     </div>
     </c:if>
  
  <form:form id="registerDistrictForm" modelAttribute="district" method="post"
       action="${action}">
  <div class="panel-body">
   
    <fieldset>
    <div class="form-group">
     <label></label>
    </div>
                <div class="form-group">
                 <form:errors path="dst_state_id.state_id" cssClass="control-label" for="inputError" />
                    <form:select path="dst_state_id.state_id" size="1" class="form-control">
           
          <option value="null">Select State Name</option>   
          <c:forEach var="theState" items="${listOfstate}"> 
                   
           <c:choose>
            <c:when test="${theState.state_id == editDistrict.getDst_state_id().getState_id()}">
             
                <c:set var="selected" value="selected"/>
               </c:when>
               <c:otherwise>
                <c:set var="selected" value=""/>
               </c:otherwise>
           </c:choose> 
                                
               <form:option value="${theState.state_id}" selected="${selected}"> 
                <c:out value="${theState.state_name}" />
               </form:option>
               
          </c:forEach>
                          
      </form:select>
                </div>
                <div class="form-group">
                 <form:errors path="dst_name" cssClass="control-label" for="inputError" />
                    <form:input class="form-control" placeholder="District Name" path="dst_name" value="${editDistrict.dst_name}" autofocus="true" />
                </div>
   <!-- Change this to a button or input when using this as a form -->
            </fieldset>
        </div>
  <div class="panel-footer">
      
                      <input type="hidden" name="dst_id" value = "${editDistrict.getDst_id()}" />
                     <input type="submit" value="${caption}" class="btn btn-lg btn-success btn-block" />
                     </div>
                     </form:form>
                </div>
            </div>
        </div>     
    
 <!-- /.row -->
            <div class="row">
                <div class="col-lg-12">
                    <div class="panel panel-primary">
                        <div class="panel-heading">
                            District List
                        </div>
                        <!-- /.panel-heading -->
                        <div class="panel-body">
                            <div class="dataTable_wrapper">
                             <c:if test="${!empty showDistrictList}">
                                
                                <table class="table table-striped table-bordered table-hover" id="dataTables-example">
                                    <thead>
                                        <tr>
           <th> Sr. No. </th>
                                            <th> State Name </th>
                                            <th> District Name </th>
                                            <th>Edit</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                     
                                    <c:set var="i" value="0" />
         <c:forEach items="${showDistrictList}" var="dst">
   
          <c:set var="i" value="${i+1}" />
                                        <tr class="odd">
                                         <td><c:out value="${i}" /></td>
                                         <td><c:out value="${dst.getDst_state_id().getState_name()}" />
           </td>
           <td><c:out value="${dst.dst_name}" />
           </td>
           <td><form action="${pageContext.request.contextPath}/Admin/admin/district_edit" method="post">
            <input type="hidden" name ="dst_id" value="${dst.dst_id}" />
            <input type="submit" value="" class="fa fa-pencil" />
            </form>
           </td>
                                        </tr>
                                        
                                     </c:forEach>
                                     </tbody>
                                </table>
                                </c:if>
                            </div>
                            <!-- /.table-responsive -->
                        </div>
                        <!-- /.panel-body -->
                    </div>
                    <!-- /.panel -->
                </div>
                <!-- /.col-lg-12 -->
            </div>
            <!-- /.row -->
    </div>

    <!-- jQuery -->
    <script src="<c:url value="/resources/js/jquery.min.js" />"></script>

    <!-- Bootstrap Core JavaScript -->
    <script src="<c:url value="/resources/js/bootstrap.min.js" />"></script>

    <!-- Metis Menu Plugin JavaScript -->
    <script src="<c:url value="/resources/js/metisMenu.min.js" />"></script>

  <!-- DataTables JavaScript -->
 <script src="<c:url value="/resources/js/jquery.dataTables.min.js" />"></script>
 <script src="<c:url value="/resources/js/dataTables.bootstrap.min.js" />"></script>
 
    <!-- Custom Theme JavaScript -->
    <script src="<c:url value="/resources/js/sb-admin-2.js" />"></script>

 <!-- Page-Level Demo Scripts - Tables - Use for reference -->
    <script>
  $(document).ready(function() {
   $('#dataTables-example').DataTable({
     responsive: true
   });
  });
    </script>
 
</body>

</html>

在上面的文件中 district.jsp

<c:set var="action" value="${pageContext.request.contextPath}/Admin/admin/district_add" />

这个标签我曾经在

中给出绝对路径

<form:form  action="${action}">

就像我给你举的那个控制器的例子

package com.apmc.controller;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.validation.Valid;

import org.apache.log4j.Logger;
import org.hibernate.exception.ConstraintViolationException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.apmc.Generic.RandomGenerator;
import com.apmc.domain.District;
import com.apmc.domain.State;
import com.apmc.services.DistrictService;
import com.apmc.services.StateService;

@Controller
public class DistrictController {
 
 private static Logger logger = Logger.getLogger(DistrictController.class);
 DateFormat df = new SimpleDateFormat("ddMMyyHHmmss");
 Date dateobj = new Date();
 int randNum = RandomGenerator.randInt(1000, 9999);
 String errorcode = null;
 String errorMsg = "";
 String successMsg = "";
 District editDistrict = null;
 List<District> newList = new ArrayList();
 List<State> listOfstate = new ArrayList<State>();
 
 @Autowired
 DistrictService districtService;

 @Autowired
 StateService stateService;
 
 @InitBinder     
 public void initBinder(WebDataBinder binder){
      binder.registerCustomEditor( Date.class,     
                          new CustomDateEditor(new SimpleDateFormat("dd/MM/yyyy"), true, 10));   
 }
 
 @RequestMapping(value = "/Admin/admin/NewDistrict_form")
 public ModelAndView districtForm(@ModelAttribute District district) {
  
  try {
   logger.info("\n districtForm Started");
   listOfstate = stateService.loadAll();
   newList = districtService.loadAll();
   logger.info("\n districtForm Completed");
   errorMsg = "";
  }
  catch (Exception e) {
   errorcode = ""+df.format(dateobj)+randNum;
   errorMsg = " New District Form Error \n Please contact Admin and errorcode: "+errorcode;
   successMsg = "";
   logger.error("error code for districtForm in DistrictController "+df.format(dateobj)+" errorcode: "+errorcode);
  }
  return new ModelAndView("district").addObject("editDistrict", null).addObject("errorMsg", errorMsg)
               .addObject("showDistrictList", newList).addObject("successMsg", successMsg).addObject("listOfstate",listOfstate);
 }

 @RequestMapping(value={"/Admin/admin/district_add", "/Admin/admin/district_update"}, method=RequestMethod.POST)
 public ModelAndView saveOrUpdateDistrict( @Valid District district, BindingResult result) {
  
  if (result.hasErrors()) {
   successMsg = "";
   errorMsg = "Data is remaining or wrong.";
   if(district.getDst_id() != null)
    editDistrict = district;
   else
    editDistrict = null;
   
   try{
    listOfstate = stateService.loadAll();
    newList = districtService.loadAll();
   } catch (Exception e) {
    logger.error(e.getMessage());
    errorcode = ""+df.format(dateobj)+randNum;
    successMsg = "";
    errorMsg = " District Form Save or Update Error \n Please contact Admin and errorcode: "+errorcode;
    logger.error("error code for saveOrUpdateDistrict in DistrictController "+df.format(dateobj)+" errorcode: "+errorcode);
   }
   
   return new ModelAndView("district").addObject("editDistrict", editDistrict).addObject("errorMsg", errorMsg)
              .addObject("showDistrictList", newList).addObject("successMsg", successMsg).addObject("listOfstate",listOfstate);
        }
  else {
   
   try {
    logger.info("\n saveOrUpdateDistrict Started \n errorcode : "+errorcode);
    districtService.saveOrUpdate(district);
    successMsg = "Saved Successfully";
    errorMsg = "";
    logger.info("\n saveOrUpdateDistrict Completed"); 
   }   catch(ConstraintViolationException e){
    logger.error(e.getMessage());
    successMsg = "";
    errorMsg = "Duplicate District Name inserted";
   }   catch(Exception e){
    logger.error(e.getMessage());
    errorcode = ""+df.format(dateobj)+randNum;
    successMsg = "";
    errorMsg = " District Form Save or Update Error \n Please contact Admin and errorcode: "+errorcode;
    logger.error("error code for saveOrUpdateDistrict in DistrictController "+df.format(dateobj)+" errorcode: "+errorcode);
   }
   try{
    listOfstate = stateService.loadAll();
    newList = districtService.loadAll();
   } catch (Exception e) {
    logger.error(e.getMessage());
    errorcode = ""+df.format(dateobj)+randNum;
    successMsg = "";
    errorMsg = " District Form Save or Update Error \n Please contact Admin and errorcode: "+errorcode;
    logger.error("error code for saveOrUpdateDistrict in DistrictController "+df.format(dateobj)+" errorcode: "+errorcode);
   }
   
   if(errorMsg == "")
    return new ModelAndView("redirect:/Admin/admin/NewDistrict_form");
   else
    return new ModelAndView("district").addObject("editDistrict", null).addObject("errorMsg", errorMsg)
              .addObject("showDistrictList", newList).addObject("successMsg", successMsg).addObject("listOfstate",listOfstate);
  }
  
 }
 
 @RequestMapping(value = "/Admin/admin/district_edit", method=RequestMethod.POST)
 public ModelAndView editDistrict(@RequestParam Long dst_id, @ModelAttribute District district) {
  
  errorMsg = "";
   successMsg = "";
  District editDistrict = new District();
  try {
    logger.info("\n editDistrict Started \n  errorcode : "+errorcode);
    editDistrict = districtService.get(dst_id);
    newList = districtService.loadAll();
    logger.info("\n editDistrict Completed");
  }
  catch (Exception e){
   logger.error(e.getMessage());
   errorcode = ""+df.format(dateobj)+randNum;
   errorMsg = " District Form Edit Error \n Please contact Admin and errorcode: "+errorcode;
   logger.error("error code for editDistrict in DistrictController "+df.format(dateobj)+" errorcode: "+errorcode);
  }
  System.out.println("\n\n\n\n error msg "+errorMsg);
  return new ModelAndView("district").addObject("editDistrict", editDistrict).addObject("showDistrictList", newList)
                             .addObject("errorMsg", errorMsg).addObject("listOfstate",listOfstate);
 }
 
}