我需要获得当前会话ID而不会访问会话(以使其有机会到期).
我使用了来自Servlet代码的Cookie,以保持会话未被触及,然后在超时时间后使会话过期.
我使用以下代码:
public static String getSessionId(HttpServletRequest request)
{
String sessionId = "";
String logMsg = "";
if (request != null)
{
String sessionTimeout = PropertiesReader.SESSION_TIMEOUT_SCHEMA;
if (sessionTimeout != null && SessionHelper.SESSION_TIMEOUT_FIXED.equalsIgnoreCase(sessionTimeout))
{
logMsg = "FIXED: Getting SessionId from Cookies with activating the session";
Cookie[] cookies = request.getCookies();
if (cookies != null)
{
for (Cookie cook : cookies)
{
if ("JSESSIONID".equalsIgnoreCase(cook.getName()))
{
sessionId = cook.getValue();
break;
}
}
}
} else
{
logMsg = "PER_USAGE: Getting SessionId from Session";
sessionId …Run Code Online (Sandbox Code Playgroud) 我有一个Java servlet,它获取RSS feed将它们转换为JSON.它在Windows上运行良好,但在Centos上失败了.
RSS源包含阿拉伯语,它在Centos上显示难以理解的字符.我正在使用这些行来编码RSS提要:
byte[] utf8Bytes = Xml.getBytes("Cp1256");
// byte[] defaultBytes = Xml.getBytes();
String roundTrip = new String(utf8Bytes, "UTF-8");
Run Code Online (Sandbox Code Playgroud)
我在Glassfish和Tomcat上尝试过它.两者都有同样的问题; 它适用于Windows,但在Centos上失败.这是怎么造成的,我该如何解决?
我试图使用ResultSetHandler将学生列表传递给servlet,但得到以下错误
java.lang.NumberFormatException: For input string: "id"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
Run Code Online (Sandbox Code Playgroud)
Student类中的方法是
public List<Student> list2() throws SQLException {
Connection connection = null;
List<Student> studentList = null;
try {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)
envCtx.lookup("jdbc/TestDB");
connection = ds.getConnection();
ResultSetHandler h = new ArrayListHandler();
QueryRunner run = new QueryRunner(ds);
String sql = "select student_id, student_name from tbl_student";
studentList = (List<Student>)run.query(sql, h);
}catch(SQLException sqle) {
sqle.printStackTrace();
}
catch(Exception e) {
e.printStackTrace();
}
finally {
DbUtils.closeQuietly(connection);
}
return …Run Code Online (Sandbox Code Playgroud) 我有一个Java servlet,在发送最终响应(这是一个PDF文件)之前,我需要向HTML页面发送一些通知.
基本上我需要让用户更新我正在执行的步骤,同时为他们生成PDF.
我猜,一种方法可以设置各种属性使用HttpSession并使用JS打印.但我不知道如何在不重新加载页面的情况下动态地执行此操作.
关于如何做到这一点的任何想法?我是JSP和servlet的新手.
我想在服务器(比如glassfish)根目录下创建并运行文件.
如果我将使用servlet获得服务器根目录的真实路径(C:\ glassfish3\glassfish\domains\domain1\docroot),那么我可以轻松地在该位置创建文件.
任何身体,如果知道,请告诉我!
我想知道什么是url编码.我有2个jsp页面和一个servlet.当我运行应用程序时,显示的URL是:
http://localhost:8080/myproject/index.jsp
哪里
index.jsp:
<form action="Myservlet" method="post">
<input type="text" name="mytext" id="mytext"/>
<input type="submit" value="submit"/>
</form>
Run Code Online (Sandbox Code Playgroud)
单击提交按钮后,显示的URL为:
http://localhost:8080/myproject/Myservlet
URL编码是什么意思?我该如何编码网址?
从index.jsp去Myservlet再到result.jsp
Myservet#doPost //我需要在这里进行URL编码吗?如果有,怎么样?
fetching data from db.......
....................
String nextJSP = "/result.jsp";
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
dispatcher.forward(request,response);
Run Code Online (Sandbox Code Playgroud)
result.jsp中
displays data here
我是servlets的新手,我在HttpSession中有疑问,
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// processRequest(request, response);
String name = request.getParameter("Name");
String phone = request.getParameter("Phone");
String dummy = "some";
HttpSession ses = request.getSession();
ses.setAttribute("SesName", name);
ses.setAttribute("SesPhone", phone);
ses.setAttribute("SesName", dummy);
RequestDispatcher rd = request.getRequestDispatcher("./SessionApiImp");
rd.forward(request, response);
}
Run Code Online (Sandbox Code Playgroud)
现在在另一个servlet中,
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// processRequest(request, response);
HttpSession sess = request.getSession();
PrintWriter pw = response.getWriter();
pw.println(sess.getAttribute("SesName"));
pw.println(sess.getAttribute("SesPhone"));
}
Run Code Online (Sandbox Code Playgroud)
- 为此分配了哪些值?我试过,它返回值与虚拟关联.是什么原因?
谢谢,Anil.
JSP1链接到JSP2.
JSP2调用一个servlet,它执行一些操作并以以下结尾:
response.sendRedirect(request.getHeader("referer"));
return;
Run Code Online (Sandbox Code Playgroud)
此时我又回到了JSP2.问题是从那里按下浏览器后退按钮,页面只是重新加载自己而不是返回到JSP1.这是正确的,因为sendRedirect会在历史记录中添加一个条目.
但是我想回到JSP1.有小费吗?
我有一个Java servlet,它通过HTTP GET请求从上游系统接收数据.此请求包含一个名为"text"的参数和另一个名为"charset"的参数,该参数指示text参数的编码方式:
如果我指示上游系统向我发送文本T?并调试servlet请求参数,我会看到以下内容:
request.getParameter("charset") == "UTF-16LE"
request.getParameter("text").getBytes() == [0, 84, 1, 0]
Run Code Online (Sandbox Code Playgroud)
此字符串中两个字符的代码点(十六进制)为:
[T] 0054
[?] 0100
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何将其转换byte[]回String "T?".我应该提一下,我并不完全信任charset并怀疑它可能正在使用UTF-16BE.
我是Java EE的新手.我有一个网站,要求用户登录,并在用户登录后,我希望用户看到他/她自己的项目(例如:购物车).
所以这意味着我必须使用一个会话来完成它.但是我该如何处理多个会话?
例如,多个用户登录到系统以及同一个servlet?但是,我可以在一个servlet中保留多个会话吗?我是否记录下每一个?它是如何工作的?
有人可以举个例子吗?