JavaEE 7教程
Servlet的web资源包 错误处理和多重上传处理
Web资源包
您可以使用ServletContext.getResource和getResourceAsStream方法来访问捆绑在.war文件资源,源路径被指定为一个
“/”带头的字符串, 这个路径解析相对于上下文的根路径,或者相对
捆绑在WEB-INF/lib中的JAR文件的META-INF/resources目录。
假设myApplication.war包含如下文件目录结构:
WEB-INF
lib
library.jar
library.jar有如下结果:
library.jar
MyClass1.class
MyClass2.class
stylesheets
common.css
images
header.png
footer.png
如果样式表和图像的目录必须在servlet访问,你需要 手动把它们解压到Web应用程序的根目录。 Servlet 3.0中允许库打包资源在META-INF/resources目录下。
library.jar
MyClass1.class
MyClass2.class
META-INF
resources
stylesheets
common.css
images
header.png
footer.png
资源需要不被提取到应用程序的根,就可以直接被访问。这使得可以从捆绑的第三方JAR文件
META-INF/resources直接访问资源,而不是手动提取。
该应用程序总是会寻找资源,在根扫描
捆绑在WEB-INF/lib目录中JAR文件。
Error Mapping错误映射
HTTP错误代码或抛出一个的servlet异常可以被映射到一个资源,一个自定义页面。这些页面是通过<error-page>定义:
<error-page>
<error-code>404</error-code>
<location>/error-404.jsp</location>
</error-page>
也可以规定自己的类出错时映射页面:
<error-page>
<exception-type>com.jdon.MyException</exception-type>
<location>/error.jsp</location>
</error-page>
处理多部分Multipart请求
@ MultipartConfig可以在一个servlet指定,表示它预计的请求 输入是multipart/form-data类型的数据。该HttpServletRequest.getParts和getPart方法使该多重请求的各个部分可用:
@WebServlet(urlPatterns = {"/FileUploadServlet"})
@MultipartConfig(location="/tmp")
public class FileUploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
for (Part part : request.getParts()) {
part.write("myFile");
}
}
}
提交的页面是如下:
<form action="FileUploadServlet" enctype="multipart/form-data" method="POST">
<input type="file" name="myFile"><br>
<input type="Submit" value="Upload File"><br>
</form>