我是Java EE的新手,我知道类似以下三行
<%= x+1 %>
<%= request.getParameter("name") %>
<%! counter++; %>
Run Code Online (Sandbox Code Playgroud)
是一种旧式的编码方式,在JSP版本2中,存在一种避免JSP文件中的Java代码的方法.有人可以告诉我替代的JSP 2行,以及这种技术的名称是什么?
我有一个在Tomcat上运行的Java Web应用程序.我想加载静态图像,这些图像将在Web UI和应用程序生成的PDF文件中显示.此外,还将通过Web UI上传添加和保存新图像.
通过将静态数据存储在Web容器中但从Web容器外部存储和加载它们来解决这个问题并不是一个问题.
我不想在此时使用像Apache这样的单独的Web服务器来提供静态数据.我也不喜欢将图像以二进制形式存储在数据库中.
我已经看到一些建议,比如将图像目录作为指向Web容器外部目录的符号链接,但这种方法是否适用于Windows和*nix环境?
有人建议编写一个过滤器或servlet来处理图像服务,但这些建议非常模糊和高级别,没有指向如何实现这一目标的更详细信息.
我有一个Spring MVC应用程序,它使用FreeMarker作为View技术(但也许视图技术对我的问题并不重要).我需要拦截在请求期间可能抛出的所有异常.
我已经实现了HandlerExceptionResolver,但只有在控制器中发生异常时才会执行此解析程序.但是当控制器返回ModelAndView并且在渲染视图时发生异常(因为找不到变量或类似的东西),则不会调用异常解析器,而是在浏览器窗口中获得堆栈跟踪.
我还尝试在控制器中使用异常处理程序方法,该方法返回视图并使用@ExceptionHandler对其进行注释,但这也不起作用(很可能是因为异常不会在控制器中抛出但在视图中).
那么是否有一些Spring机制可以注册一个捕获视图错误的异常处理程序?
我有URLRewirteFilter,它检查请求的域是否以www开头.并重定向到no-www url.当要重定向请求时,如何停止进一步处理(调用JSF应用程序,调用servlet等)?到目前为止我有这个:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String sn = req.getServerName().toLowerCase();
if (sn.startsWith("www.")) {
String url = "http://" + getDefaultDomain() + req.getContextPath() + req.getRequestURI();
HttpServletResponse resp = (HttpServletResponse) response;
resp.reset();
resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
resp.setHeader("Location", url);
}
chain.doFilter(request, response);
}
Run Code Online (Sandbox Code Playgroud) 在servlet中遇到此异常的常见可能性是什么 - 响应已经提交?
我正在使用的Servlet有一个变量session.
我试过session.invalidate();,这似乎已经破坏了会话但是当我像这样重定向时response.sendRedirect("restanes.jsp");,它给了我HTTP Status 500这行错误:
java.lang.IllegalStateException: getAttribute: Session already invalidated
Run Code Online (Sandbox Code Playgroud)
这是因为我试图破坏会话.
但为什么页面无法重定向?在其他地方的同一页面上,我已成功重定向.
如何成功销毁会话和重定向?
代码段:
if(request.getParameter("logout") != null ){
session.invalidate();
response.sendRedirect("restanes.jsp");
}
Run Code Online (Sandbox Code Playgroud)
更新:我需要做的就是return;追求response.sendRedirect("restanes.jsp");.真诚的感谢BalusC.
我正在尝试使用以下代码将值从servlet传递到jsp页面:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
try {
System.out.println("try");
String taskid=request.getParameter("id");
convty = new Connectivity();
con = convty.setConnection();
st=con.createStatement();
query="select * from task_table";
rset=convty.getResultSet(query, con);
while(rset.next()) {
System.out.println("while");
lst.add(rset.getString("task_id"));
lst.add(rset.getString("date"));
lst.add(rset.getString("project_name"));
}
rset.close();
System.out.println("after while");
} catch(Exception e) {
RequestDispatcher dd= request.getRequestDispatcher("error.jsp");
dd.forward(request, response);
} finally {
System.out.println("finally1");
HttpSession sessionvar = request.getSession();
sessionvar.setAttribute("TaskData", "lst");
response.sendRedirect("usertaskpage.jsp");
lst.clear();
out.close();
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行我的页面时,我得到:
错误:
java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed …Run Code Online (Sandbox Code Playgroud) 我正在尝试生成一个XML文件并将其保存/WEB-INF/pages/.
下面是我使用相对路径的代码:
File folder = new File("src/main/webapp/WEB-INF/pages/");
StreamResult result = new StreamResult(new File(folder, fileName));
Run Code Online (Sandbox Code Playgroud)
在本地计算机上作为应用程序运行时,它工作正常 (C:\Users\userName\Desktop\Source\MyProject\src\main\webapp\WEB-INF\pages\myFile.xml).
但是当在服务器机器上部署和运行时,它会引发以下异常:
javax.xml.transform.TransformerException:java.io.FileNotFoundException C:\ project\eclipse-jee-luna-R-win32-x86_64\eclipse\src\main\webapp\WEB INF\pages\myFile.xml
我也尝试getServletContext().getRealPath()了,但它正在null我的服务器上返回.有人可以帮忙吗?
我有一个关于servlet重定向到同一初始页面的问题.以下是场景:假设用户想要购买物品,那么他填写金额并提交.表单将提交给servlet,并根据数据库中的可用数量检查可用数量.因此,如果订购的商品数量超过可用数量,则servlet会重定向到同一页面,但会显示"商品不可用"等消息.所以我的问题是如何实现这个案例.如何使用错误消息重定向到同一初始页面.我不想在这里使用ajax.
以下是我如何将其视为:1.)如果生成错误,我应该设置上下文属性,然后在重定向后再次在初始页面中检查它并显示已设置的消息.
这类活动的最佳做法是什么?
resp.sendRedirect("/myurl");
req.getSession().setAttribute("foo", "bar");
Run Code Online (Sandbox Code Playgroud)
在这种情况下,重定向后是否可以访问foo属性?一般来说,servlet在重定向之前完全执行,或者在重定向行之后停止执行?
谢谢