use*_*114 4 java session google-app-engine
我在servlet中成功创建了会话,我可以获得jsp的会话/会话属性,但不能在端点类中获取.我想在端点类中获取会话信息.请帮我解决一下这个.
我在eclipse中使用maven,我在appengine-web.xml中启用了会话
该servlet用于检查是否已存在会话
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public FirstServlet () {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
service(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
service(request, response);
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
HttpSession session=request.getSession(false);
if (session != null) {
String name = session.getAttribute("name");
// do something
} else {
// do something
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果没有session,则使用此servlet创建会话
public class SeccondServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public SeccondServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
service(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
service(request, response);
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
request.getRequestDispatcher("login.html").include(request, response);
String name = request.getParameter("name");
HttpSession session=request.getSession();
session.setAttribute("name", name);
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的端点api类(Google Cloud Endpoints)
@Api(
name = "myapi",
version = "v1",
clientIds = "given client ids")
public class MyApi{
@ApiMethod(name = "name", path = "name", httpMethod = "post")
public List<String> getUser( HttpServletRequest servletReq) {
HttpSession session = servletReq.getSession(false);
List<String> name= new ArrayList<String>();
if(session == null) {
userName.add("no Name");
} else {
name.add((String)session.getAttribute("name"));
}
return name;
}
Run Code Online (Sandbox Code Playgroud)
我仍然得到"没有名字"的结果,即使我创建了会话,我可以得到会话属性,这里"名称"
假设您了解HttpSessions(如果不是,它只是在服务器和客户端之间交换cookie以便处理登录用户)
因此,所有与用户相关或任何其他与会话相关的信息都存储在服务器端,并且表示信息的会话Id将作为cookie发送到客户端,并且客户端将在每个http请求上将其发回.
AppEngine使用数据存储来存储会话信息和内存缓存,以便更快地访问
您可以使用在每个http请求中注入的标准HttpSession对象来访问会话数据
访问此HttpSession的代码在您使用的框架中有所不同,如果您希望我可以使用特定的代码片段来帮助更好地理解它
更新:
如果您正在使用servlet,那么访问会话将如下所示
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private final String userID = "Pankaj";
private final String password = "journaldev";
protected void doPost(HttpServletRequest request,
HttpServletResponse response) {
HttpSession session=request.getSession();
// access any value
User user = (User)session.getAttribute("loggedInUser");
}
Run Code Online (Sandbox Code Playgroud)
谷歌云终端使用它如下所示
@ApiMethod
public Response getUser( HttpServletRequest servletReq) {
HttpSession session = servletReq.getSession();
session.getAttribute("loggedInUser");
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3488 次 |
最近记录: |