如何使用JSP/Servlet将文件上传到服务器?我试过这个:
<form action="upload" method="post">
<input type="text" name="description" />
<input type="file" name="file" />
<input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
但是,我只获取文件名,而不是文件内容.当我添加 enctype="multipart/form-data"
到<form>
,然后request.getParameter()
返回null
.
在研究期间,我偶然发现了Apache Common FileUpload.我试过这个:
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request); // This line is where it died.
Run Code Online (Sandbox Code Playgroud)
不幸的是,servlet抛出了一个没有明确消息和原因的异常.这是堆栈跟踪:
SEVERE: Servlet.service() for servlet UploadServlet threw exception
javax.servlet.ServletException: Servlet execution threw an exception
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:313)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at …
Run Code Online (Sandbox Code Playgroud) 我有一个在Tomcat上运行的Java Web应用程序.我想加载静态图像,这些图像将在Web UI和应用程序生成的PDF文件中显示.此外,还将通过Web UI上传添加和保存新图像.
通过将静态数据存储在Web容器中但从Web容器外部存储和加载它们来解决这个问题并不是一个问题.
我不想在此时使用像Apache这样的单独的Web服务器来提供静态数据.我也不喜欢将图像以二进制形式存储在数据库中.
我已经看到一些建议,比如将图像目录作为指向Web容器外部目录的符号链接,但这种方法是否适用于Windows和*nix环境?
有人建议编写一个过滤器或servlet来处理图像服务,但这些建议非常模糊和高级别,没有指向如何实现这一目标的更详细信息.
如何使用Tomcat从webapps外部的公用文件夹提供图像文件?我不想在不同的端口上使用第二个Apache文件服务器,因为图像文件是同一个应用程序的一部分.我不想在webapps中为公共文件夹创建一个符号链接,因为我的应用程序被部署为war文件....是否有一个更简单的解决方案,类似于在webapps中使用静态内容的默认servlet,用于外部webapps之外的静态内容
我将Spring MVC调度程序映射为全局前端控制器servlet /*
.
<servlet>
<servlet-name>home</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>home</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
但是,此映射会停止访问CSS,JS,图像等静态文件,这些/res/
文件都在文件夹中.
我怎么能访问它们?
我正在尝试使用SpringMVC编写Web应用程序.通常情况下,我只是将一些伪造的文件扩展名映射到Spring的前端控制器并幸福地生活,但这次我要使用类似REST的URL,没有文件扩展名.
将我的上下文路径下的所有内容映射到前端控制器(让我们称之为" app ")意味着我也应该处理静态文件,这是我不想做的事情(为什么要重新发明另一个呢?),所以某些与tomcat默认的组合servlet(让我们称之为" tomcat ")似乎是要走的路.
我有工作做的事情
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>tomcat</servlet-name>
<url-pattern>*.ext</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
并为我的静态内容的每个文件扩展名重复后者.我只是想知道为什么以下设置,对我来说等同于上面的设置,不起作用.
<!-- failed attempt #1 -->
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>tomcat</servlet-name>
<url-pattern>*.ext</url-pattern>
</servlet-mapping>
<!-- failed attempt #2 -->
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>tomcat</servlet-name>
<url-pattern>/some-static-content-folder/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
任何人都能解释一下吗?
我需要使用JSF <h:graphicimage>
标记或HTML <img>
标记在Web应用程序中显示驻留在deploy文件夹之外的图像.我怎样才能做到这一点?
我正在寻找一些博客,试图找到如何使用JSF 2.0上传文件但是所有的解决方案都让我感到困惑.我想知道我需要什么才能成功上传文件(MP3,PDF,视频......什么类型)并将其作为@Lob存储在数据库中.这是我到目前为止所做的:
我创建了一个具有byte []类型属性的实体,并且还使用@Lob注释进行了注释.
我创建了一个EJB,它将使用一个byte []作为参数的方法引入实体,并使用EntityManager类(persist方法)将其插入到数据库中.
我创建了一个JSF页面,其中包含"file"类型的输入标记和一个提交按钮
我准备了一个托管bean来与JSF页面交换有关该文件的信息.
现在我被卡住了,我有很多疑惑:
我应该怎么做才能将文件从JSF传递到托管bean,然后将其转换为byte [](能够将其处理到EJB)?
servlet如何帮助我?
我需要一个servlet吗?
另外我发现在一些博客中它提到了一些关于servlets 3.0的东西,但我不知道我的工作环境是否正在使用它,如果我使用servlets 3.0(我使用的是JEE6)怎么办?
我之前从未上过文件,也不熟悉servlet.我很困惑,有人可以给我一些开始提示,拜托?
我要做的是将请求映射到servlet根目录(正确的术语?).我正处于将URL映射到正确视图的位置,但无法找到作为页面一部分的所有静态内容--css,javascript,images.
所以在我的web.xml中,我的servlet标签看起来像这样
<servlet-mapping>
<servlet-name>springapp</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
我的控制器看起来像这样:
@RequestMapping("/shop")
public class TheShopController extends MyBaseController {
public static String VIEW = "Tile.Shop";
@Override
@RequestMapping(method = RequestMethod.GET)
protected ModelAndView processRequest(HttpServletRequest req, HttpServletResponse resp) {
ModelAndView mav = new ModelAndView(VIEW);
return mav;
}
}
Run Code Online (Sandbox Code Playgroud)
MyBaseController非常简单.它看起来像这样:
public abstract class MyBaseController extends AbstractController {
protected Logger log = Logger.getLogger(getClass());
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp)
throws Exception {
ModelAndView mav = processRequest(req, resp);
return mav;
}
protected abstract ModelAndView processRequest(HttpServletRequest req, HttpServletResponse resp);
}
Run Code Online (Sandbox Code Playgroud)
我在视图层中使用Tiles.我的配置如下: …
如何将存储在我的硬盘上的图像提供给servlet?
例如:
我有一个存储在路径中的图像'Images/button.png'
,我想在带有URL的servlet中提供它file/button.png
.
servlets ×6
java ×5
java-ee ×3
file-upload ×2
image ×2
jsf ×2
jsf-2 ×2
jsp ×2
tomcat ×2
graphicimage ×1
resources ×1
spring ×1
spring-mvc ×1
tiles ×1
web.xml ×1