我有一个简单的休息网络服务,用于加载页面。加载页面后,将显示相同的页面,并显示确认消息或错误信息。
我使用下面的代码加载它....
jsp页面: -
<form action="rest/file/upload" method="post"
enctype="multipart/form-data">
<br> <label>Username:    </label><input type="text"
placeholder="Username" name="username"> <br> <br>
<label>Password:     </label><input type="text"
placeholder="Password" name="password"> <br> <br>
<hr>
<p>
Select a file : <input type="file" name="file" size="45" />
</p>
<br> <input id="submit" type="submit" value="Upload" />
<c:out value="${obj}" />
<!-- ${obj} -->
</form>
控制器
@Path("/file")
public class FileUploadService {
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Viewable uploadFile(
@Context HttpServletRequest request,@Context HttpServletResponse response,
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail,
@FormDataParam("username") String username,
@FormDataParam("password") String password) throws NoSuchAlgorithmException, IOException, URISyntaxException {
response.setHeader("Location", "/");
return new Viewable("/index.jsp",null);
的web.xml
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
单击表单后,文件将被加载并返回到index.jsp页面,但页面的位置设置为。 RESTFileUpload是程序名称。
http://localhost:8080/RESTFileUpload/rest/
但我希望它是
http://localhost:8080/RESTFileUpload/
答案 0 :(得分:3)
我对MVC功能Jersey知之甚少(或者说真的没什么),但另一个选择就是使用重定向。您只需使用Response.seeOther(URI)
即可。这将发送带有Location
标头的"303 See Other"。浏览器应该发送此页面的另一个请求。该方法可能类似于
public Response getRedirect(@Context ServletContext context) {
UriBuilder builder = UriBuilder.fromPath(context.getContextPath());
builder.path("index.jsp");
return Response.seeOther(builder.build()).build();
}
这将重定向到/contextPath/index.jsp
(或者换句话说,位于webapp根目录中的index.jsp
路径)
顺便说一句,如果您熟悉Javascript / jQuery,还有其他file upload options不涉及重定向。
只是为了表明这很好用
@Path("/redirect")
public class RedirectResource {
@GET
public Response getRedirect(@Context ServletContext context) {
UriBuilder builder = UriBuilder.fromPath(context.getContextPath());
builder.path("index.html");
return Response.seeOther(builder.build()).build();
}
}