简体   繁体   English

将Value bean / java传递给servlet

[英]Pass Value bean/java to servlet

Here i come with a problem to pass value to servlet normally i have to get and set value in Bean class so it have to pass to Dbconnection class and servlet but i could't call bean/dbconnect method in servlet to insert value in databases.can some one guide to go right way to get pass in jsp 在这里,我遇到一个将值传递给servlet的问题,通常我必须在Bean类中获取并设置值,因此它必须传递给Dbconnection类和servlet,但是我无法在servlet中调用bean / dbconnect方法在数据库中插入值。可以一些指南正确地通过jsp吗

Bean-->dbconnect---servlet---register.jsp 豆- > DBCONNECT --- --- servlet的register.jsp

welcome.jsp: 的welcome.jsp:

<body>
<%  
Bean bean=(Bean)request.getAttribute("bean");  
out.print("Welcome, "+bean.getUsername());  
%>
<p>You are successfully logged in!</p>  
</body>           

Index.jsp: 的index.jsp:

<form action="Controller" method="post">
    User name:<input type="text" name="username">
    Password:<input type="password" name="password">
    <input type="submit" name="Login"> <a href="Register.jsp">Register</a>
</form>

Register.jsp Register.jsp

<form action="Controller" method="post">
User name:<input type="text" name="name" >
Password:<input type="password" name="pass">
Email-id<input type="text" name="emailid">
phone number:<input type="text" name="phone">
<input type="submit" value="submit"><a href="index.jsp">Login</a>
</form>

Bean.java Bean.java

package Databases;

public class Bean
{

    private   String username;
    private   String password;
    private   String emailid;
    private   String phone;
   /**
     * @return the username
     */
    public String getUsername()
    {
        return username;
    }
    /**
     * @param username the username to set
     */
    public void setUsername(String username)
    {
        this.username = username;
    }
    /**
     * @return the password
     */
    public String getPassword()
    {
        return password;
    }
    /**
     * @param password the password to set
     */
    public void setPassword(String password)
    {
        this.password = password;
    }
    /**
     * @return the emailid
     */
    public String getEmailid()
    {
        return emailid;
    }
    /**
     * @param emailid the emailid to set
     */
    public void setEmailid(String emailid)
    {
        this.emailid = emailid;
    }
    /**
     * @return the phone
     */
    public String getPhone()
    {
        return phone;
    }
    /**
     * @param phone the phone to set
     */
    public void setPhone(String phone)
    {
        this.phone = phone;
    }

}

Dbconnect.java Dbconnect.java

package Databases;

import java.io.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.Iterator;

public class Dbconnect
{
    public static void main(String args[]) throws ClassNotFoundException
    {
        Dbconnect db = new Dbconnect();
        db.dbconnect();
    }

    public Connection dbconnect() throws ClassNotFoundException
    {

        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mine", "root", "android");

        } catch (SQLException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;

    }

    public String user(Bean bean)
    {
        Connection con = null;
        PreparedStatement prep = null;
        try
        {
            con = dbconnect();
            String sql = "SELECT * user WHERE name = ? AND password = ?";
            prep = con.prepareStatement(sql);

            prep.setString(1, bean.getUsername());
            prep.setString(2, bean.getPassword());

        } 
        catch (Exception e)
        {
            System.out.println("cannot connect");
            e.printStackTrace();
        }
        return "user login";
    }

    public String insertDetail(Bean bean) throws SQLException
    {

        String sql = "insert into user(name,password,email,phone) values(?,?,?,?)";
        Connection con = null;
        PreparedStatement prep = null;

        try
        {
            con = dbconnect();
            prep = con.prepareStatement(sql);

        } catch (ClassNotFoundException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        prep.setString(1, bean.getUsername());
        prep.setString(2, bean.getPassword());
        prep.setString(3, bean.getEmailid());
        prep.setString(4, bean.getPhone());
        prep.executeUpdate();
        prep.close();

        return "successfully added";

    }
}

Controller.java Controller.java

    package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.mysql.jdbc.PreparedStatement;

import Databases.Dbconnect;

import Databases.*;

/**
 * Servlet implementation class Loginservlet
 */
public class Controller extends HttpServlet
{
    private static final long serialVersionUID = 1L;

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

    }

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

        response.setContentType("text/html");
        //PrintWriter out = response.getWriter();

        String name = request.getParameter("name");
        String pass = request.getParameter("pass");
        String email = request.getParameter("emailid");
        String pn = request.getParameter("phone");
        System.out.println("Name :" + name);
        System.out.println("pass :" + pass);
        System.out.println("emailid :" + email);
        System.out.println("phone:" + pn);


        Bean bean=new Bean();  
        bean.setUsername(name);  
        bean.setPassword(pass);  
        bean.setEmailid(email);
        bean.setPhone(pn);

        request.setAttribute("bean",bean);  

        request.getRequestDispatcher("index.jsp");
        request.getRequestDispatcher("Register.jsp");


    }



}

web.xml web.xml中

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>WebprojectTry</display-name>
  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>Controller</display-name>
    <servlet-name>Controller</servlet-name>
    <servlet-class>servlet.Controller</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Controller</servlet-name>
    <url-pattern>/Controller</url-pattern>
  </servlet-mapping>
</web-app>

Ok, you can browse complete code at my GitHub account . 好的,您可以在我的GitHub帐户上浏览完整的代码。 It is working but I would personally used JPA for persistence. 它正在工作,但是我个人将JPA用于持久性。

Let start with controller, which contains doPost method. 让我们从包含doPost方法的控制器开始。 It just takes request parameters, constructs some bean and calls DAO to persist it to database. 它只需要请求参数,构造一些bean并调用DAO将其持久化到数据库中。 Once done, it sets a bean as request attribute and dispatches call to jsp. 完成后,它将bean设置为request属性,并将调用分派到jsp。 It means that once you open this jsp again, this bean will be not gone. 这意味着一旦再次打开该jsp,该bean就不会消失。 Use session to store it across multiple calls. 使用会话将其存储在多个呼叫中。

public class Controller extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("name");
        String phone = request.getParameter("phone");
        // todo check parameters

        User user = new User(name, phone);
        DAO dao = new DAO();
        dao.saveUser(user);
        request.setAttribute("USER", user);// consider using session
        // TODO handle errors

        RequestDispatcher dispatcher = request.getRequestDispatcher("register/index.jsp");
        dispatcher.forward(request, response);
    }
}

web.xml is easy: web.xml很简单:

<servlet>
    <servlet-name>RegistrationController</servlet-name>
    <servlet-class>cz.literak.sandbox.so.register.Controller</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>RegistrationController</servlet-name>
    <url-pattern>/RegistrationController</url-pattern>
</servlet-mapping>

DAO uses old plain JDBC to store the object in database table. DAO使用旧的普通JDBC将对象存储在数据库表中。 I would favour using DataSource instead. 我更愿意使用DataSource。

static {
    try {
        Class.forName("org.mariadb.jdbc.Driver");

// Class.forName("com.mysql.jdbc.Driver"); // Class.forName(“ com.mysql.jdbc.Driver”); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch(ClassNotFoundException e){e.printStackTrace(); } } }}

public User findUser(String phone) {
    // todo
    return null;
}

//  DDL: CREATE TABLE user (name VARCHAR(100), phone VARCHAR(100))
public boolean saveUser(User user) throws ServletException {
    try (
         Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "secret");
         PreparedStatement ps = con.prepareStatement("INSERT INTO user VALUES(?,?)"))
    {
        ps.setString(1, user.getName());
        ps.setString(2, user.getPhone());
        return ps.execute();
    } catch (SQLException e) {
        throw new ServletException("DB operation failed", e);
    }
}

And finally jsp. 最后是jsp。 It just checks if USER exists and then either displays registration form or welcome message. 它只是检查USER是否存在,然后显示注册表格或欢迎消息。

<c:choose>
    <c:when test="${USER == null}">
        <form action="${pageContext.request.contextPath}/RegistrationController" method="post">
            <table>
                <tr>
                    <td>User name</td>
                    <td><input type="text" name="name" ></td>
                </tr>
                <tr>
                    <td>Phone</td>
                    <td><input type="text" name="phone"></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" value="submit"></td>
                </tr>
            </table>
        </form>
    </c:when>
    <c:otherwise>
        Welcome <c:out value="${USER.name}"/>
    </c:otherwise>
</c:choose>

I hope that you will not delete this question as it took me substantial amount of time to answer. 我希望您不要删除此问题,因为我花了很多时间来回答。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM