Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';Don’不要从doGet调用doPost_Java_Servlets - Fatal编程技术网

Java Can';Don’不要从doGet调用doPost

Java Can';Don’不要从doGet调用doPost,java,servlets,Java,Servlets,当我直接呼叫doPost时,它会以正确的方式显示我的个人资料页面。但在登录后,我在Chrome copy url“”中打开了一个新选项卡,它显示了一个空白页面 @WebServlet("/profile") public class Profile extends HttpServlet { **private String login;** private HttpSession httpSession; private User user; private Role role; public

当我直接呼叫doPost时,它会以正确的方式显示我的个人资料页面。但在登录后,我在Chrome copy url“”中打开了一个新选项卡,它显示了一个空白页面

@WebServlet("/profile")
public class Profile extends HttpServlet {
**private String login;**
private HttpSession httpSession;
private User user;
private Role role;
public static Logger LOGGER = LogManager.getLogger(Profile.class.getName());

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.setContentType("text/html");
    httpSession = req.getSession();
    try (PrintWriter out = resp.getWriter()) {
        **if (httpSession.getAttribute("userLoggedIn") == null) {
            out.println("<title>Login Page</title>");
            out.println("<p><a href=\"index\">Please follow the link to login</a></p>");
        } else {
            login = (String) httpSession.getAttribute("uLogin");
            doPost(req, resp);
        }**
    } catch (IOException | NullPointerException e) {
        LOGGER.error(e);
    }
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    **login = req.getParameter("login");
    user = new ImplUserDAO().findByLogin(login);**
    httpSession = req.getSession();
    resp.setContentType("text/html");
    try (PrintWriter out = resp.getWriter()) {
        out.println("<title>Profile page</title>");
        if (user != null && user.getPassword().equals(req.getParameter("pass"))) {
            role = new ImplRoleDAO().findById(user.getRoleId());
            httpSession.setAttribute("userLoggedIn", true);
            httpSession.setAttribute("uLogin",req.getParameter("login"));
            httpSession.setAttribute("uPass",req.getParameter("pass"));
            out.println("user id = " + user.getUserId());
            out.println("login = " + user.getLogin());
            out.println("password = " + user.getPassword());
            out.println("role = " + role.getRoleName());
            out.println("<form action=\"logout\" method=\"get\"/>" +
                    "<input type=\"submit\" value=\"Logout\"/>" +
                    "</form>");
            if (role.getRoleName().equals("admin")) {
                httpSession.setAttribute("isAdmin", true);
                out.println("<a href=\"admin\">Go to admin page</a>");
            }
        } else {
            out.println("Wrong login or password");
            out.println("<a href=\"index\">Please follow the link to login</a>");
        }
    } catch (IOException | NullPointerException e) {
        LOGGER.error(e);
    }
}
}
@WebServlet(“/profile”)
公共类概要文件扩展了HttpServlet{
**私有字符串登录**
私有HttpSession HttpSession;
私人用户;
私人角色;
公共静态记录器Logger=LogManager.getLogger(Profile.class.getName());
@凌驾
受保护的void doGet(HttpServletRequest-req,HttpServletResponse-resp)抛出ServletException,IOException{
分别为setContentType(“文本/html”);
httpSession=req.getSession();
尝试(PrintWriter out=resp.getWriter()){
**if(httpSession.getAttribute(“userLoggedIn”)==null){
out.println(“登录页面”);
out.println(“

”); }否则{ login=(字符串)httpSession.getAttribute(“uLogin”); doPost(请求、响应); }** }捕获(IOException | NullPointerException e){ 错误(e); } } @凌驾 受保护的void doPost(HttpServletRequest-req,HttpServletResponse-resp)引发ServletException,IOException{ **login=req.getParameter(“login”); user=new ImplUserDAO().findByLogin(登录名)** httpSession=req.getSession(); 分别为setContentType(“文本/html”); 尝试(PrintWriter out=resp.getWriter()){ out.println(“个人资料页”); if(user!=null&&user.getPassword().equals(req.getParameter(“pass”)){ role=newimproledao().findById(user.getRoleId()); setAttribute(“userLoggedIn”,true); setAttribute(“uLogin”,req.getParameter(“login”); httpSession.setAttribute(“uPass”,req.getParameter(“pass”); out.println(“user id=“+user.getUserId()); out.println(“login=“+user.getLogin()); out.println(“password=“+user.getPassword()); out.println(“role=“+role.getRoleName()); out.println(“”)+ "" + ""); if(role.getRoleName().equals(“admin”)){ setAttribute(“isAdmin”,true); out.println(“”); } }否则{ out.println(“错误登录或密码”); out.println(“”); } }捕获(IOException | NullPointerException e){ 错误(e); } } }
通过调用
doPost()
您还可以执行这一行:

user = new ImplUserDAO().findByLogin(req.getParameter("login"));
它将抛出一个
异常
或返回
null
或任何东西,因为您的
GET
请求没有包含该参数。如果要重用
doPost()
,则需要从会话或请求获取登录名:

String login = req.getParameter("login");
if(null == login) {
  login = (String)httpSession.getAttribute("uLogin");
}
或类似的

有关属性和参数的信息

在注释掉的代码中,您试图通过根据请求调用
setAttribute(“login”…
来解决此问题。虽然这是合法的,但您不能通过调用
getParameter()
来检索该值。相反,您必须调用'getAttribute()`同样-这与直接从会话检索没有多大区别:

//Retrieve Parameter (been send into the servlet from outside)
String login = req.getParameter("login");
if(null == login) {
  //Retrieve Attribute you put into the request in doGet()
  login = (String)req.getAttribute("login");
}
另一次编辑

您对
req.getParameter(“pass”)
也有同样的问题

您应该认真考虑将登录过程(从请求中检查用户名/口令)从其他功能(显示配置页)或<强>反转< /强>您的逻辑:登录,将用户设置为“代码< > DOPSTOST()/代码>,如果成功调用<代码> GGET()/代码>

完整示例代码

考虑以下更改,在一定程度上修复您的逻辑:

@WebServlet("/profile")
public class Profile extends HttpServlet {

    // Don't use member variables on Servlets - they get reused for all users!
    // private String login;
    // private HttpSession httpSession;
    // private User user;
    // private Role role;
    public static Logger LOGGER = LogManager.getLogger(Profile.class.getName());

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.setContentType("text/html");
    HttpSession httpSession = req.getSession();
    try (PrintWriter out = resp.getWriter()) {
        if (httpSession.getAttribute("userLoggedIn") == null) {
            out.println("<title>Login Page</title>");
            out.println("<p><a href=\"index\">Please follow the link to login</a></p>");            
        } 
        else {
            User user = httpSession.getAttribute("userLoggedIn");
            Role role = httpSession.getAttribute("userRole");

            out.println("<title>Profile page</title>");
            out.println("user id = " + user.getUserId());
            out.println("login = " + user.getLogin());
            out.println("password = " + user.getPassword());
            out.println("role = " + role.getRoleName());
            out.println("<form action=\"logout\" method=\"get\"/>" +
                    "<input type=\"submit\" value=\"Logout\"/>" +
                    "</form>");
            if("true".equals(httpSession.getAttribute("isAdmin")) {
                httpSession.setAttribute("isAdmin", true);
                out.println("<a href=\"admin\">Go to admin page</a>");
            }
        }
    } catch (IOException | NullPointerException e) {
        LOGGER.error(e);
    }
}

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String login = req.getParameter("login");
        User user = new ImplUserDAO().findByLogin(login);
        HttpSession httpSession = req.getSession();
        try (PrintWriter out = resp.getWriter()) {
            if (user != null && user.getPassword().equals(req.getParameter("pass"))) {
                Role role = new ImplRoleDAO().findById(user.getRoleId());
                httpSession.setAttribute("userLoggedIn", user);
                httpSession.setAttribute("userRole", role);
                if (role.getRoleName().equals("admin")) {
                    httpSession.setAttribute("isAdmin", true);
                }
                // Now refer to display part.
                goGet(req, resp);
            } else {
                out.println("Wrong login or password");
                out.println("<a href=\"index\">Please follow the link to login</a>");
            }
        } catch (IOException | NullPointerException e) {
            LOGGER.error(e);
        }
    }
}
@WebServlet(“/profile”)
公共类概要文件扩展了HttpServlet{
//不要在servlet上使用成员变量-它们会被所有用户重用!
//私有字符串登录;
//私有HttpSession HttpSession;
//私人用户;
//私人角色;
公共静态记录器Logger=LogManager.getLogger(Profile.class.getName());
@凌驾
受保护的void doGet(HttpServletRequest-req,HttpServletResponse-resp)抛出ServletException,IOException{
分别为setContentType(“文本/html”);
HttpSession HttpSession=req.getSession();
尝试(PrintWriter out=resp.getWriter()){
if(httpSession.getAttribute(“userLoggedIn”)==null){
out.println(“登录页面”);
out.println(“

”); } 否则{ User=httpSession.getAttribute(“userLoggedIn”); Role-Role=httpSession.getAttribute(“userRole”); out.println(“个人资料页”); out.println(“user id=“+user.getUserId()); out.println(“login=“+user.getLogin()); out.println(“password=“+user.getPassword()); out.println(“role=“+role.getRoleName()); out.println(“”)+ "" + ""); if(“true”).equals(httpSession.getAttribute(“isAdmin”)){ setAttribute(“isAdmin”,true); out.println(“”); } } }捕获(IOException | NullPointerException e){ 错误(e); } } @凌驾 受保护的void doPost(HttpServletRequest-req,HttpServletResponse-resp)引发ServletException,IOException{ 字符串login=req.getParameter(“login”); User User=new ImplUserDAO().findByLogin(登录); HttpSession HttpSession=req.getSession(); 尝试(PrintWriter out=resp.getWriter()){ if(user!=null&&user.getPassword().equals(req.getParameter(“pass”)){ Role-Role=new improledao().findById(user.getRoleId()); setAttribute(“userLoggedIn”,user); setAttribute(“用户角色”,角色); if(role.getRoleName().equals(“admin”)){ setAttribute(“isAdmin”,true); }