【问题标题】:How to save data in variables defined in Java class using servlet and JSP?如何使用 servlet 和 JSP 将数据保存在 Java 类中定义的变量中?
【发布时间】:2014-04-26 17:48:07
【问题描述】:

我在 STS 中创建了一个 Maven 项目。在项目中,我有 1 个 jsp 文件和 1 个 servlet。 jsp 要求用户输入用户名和密码,然后 servlet 获取值,以 HTML 格式显示。但我也有 1 个 java 类。我希望将 jsp 文件中输入的数据存储在 java 类中定义的 2 个变量中,但我无法这样做。我尝试了几件事,但无法理解如何去做。

HelloServlet:

public class HelloServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;

public HelloServlet() {
    super();

protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

    PrintWriter out = response.getWriter();
    out.println("<title>My Intro Servlet!</title>");

    out.println("<h1>Welcome " + request.getParameter("name") + " "
            + "Password: " + request.getParameter("Password") + "!</h1>");
    out.println("<p><a href = http://localhost:9080/HelloWorldWeb/Hello.jsp>"
            + "<input type = submit value = Back /></a></p>");

    String User = request.getParameter("Name");
    String Password = request.getParameter("Password");

    User user1 = new User();

    user1.setUser(request.getParameter("name"));
    user1.setPassword(request.getParameter("Password"));

    System.out.println(User);
}

protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
       }
}

用户 Java 类:

public class User {

private String user;
private String password;

public User() { 
}

public String getUser() {
    return user;
}

public void setUser(String user) {
    this.user = user;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
    }
}

仅限 JSP 表单:

    form action="hello.html" method="GET"
doGet Name: <input type="text" name="name"> 
doGet Password: <input type="Password" name="Password" />
<input type="submit" value="Submit" />
    <input type="reset" value="Reset">

XML 文件:

    <display-name>HelloWorldWeb</display-name>
    <session-config>
    <session-timeout>30</session-timeout>
    </session-config>
    <welcome-file-list>
    <welcome-file>Hello.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
    <description></description>
    <display-name>HelloServlet</display-name>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.javavids.webapp.HelloWorldWeb.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/hello.html</url-pattern>
    </servlet-mapping>
    </web-app>

【问题讨论】:

  • 在用户类中,无论我做什么,都会出错。这就是为什么它是空的。
  • 你想将参数从表单发送到java类吗?
  • 是的,我希望 servlet 显示输入的数据以及需要向 java 类发送参数。
  • 首先在form方法中使用post...然后action给一个servlet...
  • 好的,我将使用 post 并在操作中使用“hello.html”,因为当我创建 servlet 时,我将映射 url 更改为“hello.html”而不是“HelloServlet”。

标签: java jsp maven servlets session-scope


【解决方案1】:

您的 servlet 类应该在提交操作上被调用。你为什么要这样做。

 form action="hello.html" method="GET"

改成

 form action="/servletclass" method="POST"

在 Servlet 内部使用 RequestDispatcher 将控制权转发给 hello.html

【讨论】:

  • 我在 servlet 映射中添加了 html.html,这就是我使用 hello.html 的原因。每当调用 hello.html 时,实际上都会调用 servlet。我这样做是因为我的教授提供的教程。
  • 您在谈论 url 映射,这不是现实中应有的方式。为什么您使用 jsp、servlet 而不是像 Struts 这样的任何框架。也用你的 web.xml 更新问题
  • 我添加了xml文件,由于我还没有研究过,所以我没有使用过Struts框架。我需要用我在课堂上学习的任何东西来实现我的目标。
  • 请在您的问题解决后开始接受答案。很多人在这里帮助您找到了一个合适的解决方案。这就是为什么有一个接受选项的原因。
  • 好的,您是否希望我们所有人完成您的所有作业并用勺子喂您。我们在这里只是为您提供建议,您必须自己找到解决方案。没有什么是免费的,请继续接受您的回答没有人要求你不要那样做,这样说话是非常冒犯的。这是对 SO 社区中所有试图在这里帮助你的人的评论
【解决方案2】:
user1.setUser(request.getParameter("name"));
    user1.setPassword(request.getParameter("Password"));

在这一行之后尝试打印

System.out.println("Name "+user1.getUser()+"  password " +user1.getPassword)

【讨论】:

    【解决方案3】:

    将 method="get" 更改为 method="post" 和:

    String name = request.getParameter("name");
    String passWord = request.getParameter("Password");
    User user = new User();
    user.setUser(name);
    user.setPassword(passWord);
    System.out.println(user.getUser + "----" +user.getPassword);
    

    【讨论】:

    • 我需要将数据存储在 Java 类而不是 servlet 中。该怎么做?
    • 你想把它保存到某个地方吗?
    • 是的,我想将它保存到 User.java 中定义的 2 个变量中。
    • 当你设置变量时,已经保存了。如果你想看到它,只能在运行时。另一种方法是使用 jdbc 和数​​据库,如 mySql 或 oracle 或 jdo。
    • 变量保存在servlet中还是保存在java类中?
    【解决方案4】:

    这是解决方案。

    HelloServlet:

    public class HelloServlet extends HttpServlet {
           private static final long serialVersionUID = 1L;
    
    public HelloServlet() {
        super();
    }
    
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
    
        String user = request.getParameter("name");
        String password = request.getParameter("Password");
    
        PACKAGENAME.User.setUser(user);
        PACKAGENAME.User.setPassword(password);
        request.setAttribute("log", user);
        request.setAttribute("pass", password);
        boolean result = PACKAGENAME.User.Auth(user, password);
        System.out.println(result);
    
        if(result == true) {
            RequestDispatcher rd = request.getRequestDispatcher("Welcome.jsp");
            rd.forward(request, response);
            System.out.println();
        } else {
            System.out.println();
            response.sendRedirect("Hello.jsp");
           }
    }
    
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
        }
    }
    

    用户 Java 类:

    public class User {
    
    public static String User;
    public static String Password;
    
    public User() { 
    }
    
    public static String getUser() {
        return User;
    }
    
    public static void setUser(String user) {
        User = user;
    }
    
    public static String getPassword() {
        return Password;
    }
    
    public static void setPassword(String password) {
        Password = password;
    }
    
    public static boolean Auth(String user, String password){
    
        if(Password.equals("123456") && User.equals("mansoor")){
            System.out.println("Password: " + Password);
            return true;   
        }
        else {
            return false; 
          }  
       }
    }
    

    Welcome.jsp:

    <body>
    <h1>Welcome ${log}!</h1>
    </body>
    

    你好.jsp:

    <body>
    <form action="HelloServlet" method="POST">
    Name: <input type="text" name="name"> 
    Password: <input type="Password" name="Password" />
    <input type="submit" value="Submit" />
        <input type="reset" value="Reset">
    </form>
    </body>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 2010-10-31
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      相关资源
      最近更新 更多