从servlet

时间:2016-10-23 01:41:14

标签: java html jsp servlets cassandra

我有一个单独分配的麻烦,我试图通过servlet在JSP上的cassandra数据库中显示数据。基本上,当我尝试在存储用户信息的类的类上使用get方法时,我得到一个空指针异常。

下面的代码是JSP的一部分,它请求servlet发送一个包含当前用户详细信息的对象。在查看调试器时,它似乎没有任何问题地获取用户名,但是对“配置文件详细信息”的请求返回一个空对象,而它应该由来自数据库的信息填充。

 <%
        String Username=null;

        LoggedIn lg = (LoggedIn) session.getAttribute("LoggedIn");
        Username = lg.getUsername();

        ProfileDetails pd= new ProfileDetails();
        pd = (ProfileDetails) request.getAttribute("Profile");


        if (pd!=null)
        {
        String forename= pd.getForename();
        String surname=pd.getSurname();
        String email=pd.getEmail();


        %>

下一段代码是servlet中调用方法的方法,该方法返回一个填充了用户详细信息的对象。

  protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
  //  processRequest(request, response);
    HttpSession session=request.getSession();

     LoggedIn lg = (LoggedIn)session.getAttribute("LoggedIn");
    String username=lg.getUsername();

    User us = new User();
    us.setCluster(cluster);
    ProfileDetails pd= new ProfileDetails();

    pd = us.GetUserDetails(pd, username);
    request.setAttribute("Profile", pd);

    RequestDispatcher rd = request.getRequestDispatcher("Profile.jsp");
    rd.forward(request, response);

}

我非常确定我遇到的问题是基于这两个代码块中的一个,但是在我忘记的那一刻。所以任何帮助都会受到很大的赞赏。

如果有人对此感到非常热心,请点击我在GitHub上进行克隆项目的链接https://github.com/BrodieRoss/Instagrim.git

P.S。对不起,如果我在这里的任何解释听起来有点像胡说八道,我对网络开发很陌生。

2 个答案:

答案 0 :(得分:1)

您必须接近更多MVC版本的网络应用。 我看到你写了一些getter(空洞)但是如果你为这个类写一些setter方法会更好。

然后你不得将servlet转发到你的jsp,但重定向使用:

HttpServletResponse.sendRedirect(String Location)

HttpServletResponse.sendRedirect("/your/new/location.jsp")

在重定向之前,您必须为此对象设置所需的属性。要访问这些属性,请使用您在类中使用的相同变量。要在jsp文件中显示它们,您必须使用jstl lib。点击此处查看: https://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm

本教程可能对您有所帮助: https://docs.oracle.com/cd/E15919_01/wlp.1032/e14254/developuserprofiles.htm

答案 1 :(得分:0)

用户us = new User();我推测与一个&#34;集群&#34;作为服务器实例的一部分的信息?我看到没有变量声明或任何相关形式的赋值调用&#34; cluster&#34;本身, 虽然/也是(et tu)我也会说&#34;数据库&#34; (正如你所说/写的那样)意味着运行实例信息的服务器配置和SERVER-environment-variables,globals e.t.c。&#34;其中的Java J2EE服务器没有额外配置的&#34;连接&#34;到另一个服务器程序(例如MySQL Potgre ...),需要java驱动程序和相关的连接池。

它编译的奇迹,然而,某些东西可能是一个静态的&#34;变量并要求转换为非静态上下文以提供给方法或变量。 你现在可以更好地看一下吗?

通过具有某种状态的JSP bean可以更好地提供信息(只是一个想法) 用于&#34; Cassandra&#34;的Java集成和Java兼容驱动程序(驱动程序接口实例和线程类似MySQL查询和连接驱动程序系统)... http://cassandra.apache.org/doc/latest/getting_started/drivers.html?highlight=drivers