несколько действий (CRUD) в одном сервлете Java - PullRequest
1 голос
/ 01 марта 2012

Я хочу использовать один сервлет для четырех действий CRUD.Следующий сервлет хорошо работает для добавления данных, следуя url

http://localhost:8080/mobsurvey/register-company/?companyname=xyz&email=abc@abc.com&username=user&password=pass&description=xyz

ответ в json, как {"result": "true", "lastId": 2}

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

import com.google.gson.*; 
import com.saffroze.Event;




public class CompanyRegister extends HttpServlet {
Connection conn=null;
public CompanyRegister() throws InstantiationException, IllegalAccessException {

    conn = Dbhelper.getConnection();
    //      creatBookManagerTable();
}

public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {


    String companyname = req.getParameter("companyname");
    String email = req.getParameter("email");
    String usr = req.getParameter("username");
    String pwd = req.getParameter("password");
    String description = req.getParameter("description");



    PreparedStatement pst=null;
    String sql = "insert into company("+ "name,"+ "email,"+ "username,"+ "password,"+ "description)"+" values(?,?,?,?,?)";      

    try {

        PreparedStatement pstmt = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
        //String insertDataSql="insert into company(name,email,username,password,description) values('" + companyname + "','" + email + "','" + usr + "','" + pwd + "','" + description + "');";

        //Statement stmt;

        pstmt.setString(1,companyname);
        pstmt.setString(2,email);
        pstmt.setString(3,usr);
        pstmt.setString(4,pwd);
        pstmt.setString(5,description);

        Gson gson = new Gson();
        //resp.setContentType("application/json; charset=UTF-8");
        resp.setContentType("text/plain");
        pstmt.executeUpdate();
        ResultSet keys = pstmt.getGeneratedKeys();  

        keys.next();  
        int id = 0; 

        id = keys.getInt(1);  

        keys.close();  



        if(id>0){

            Event obj = new Event("true",id);

            resp.getWriter().println(gson.toJson(obj));     
        }else
        {
            int emptyid=0;
            Event obj = new Event("false",emptyid);


            resp.getWriter().println(gson.toJson(obj));


        }

    }

    catch(Exception e){

        e.printStackTrace();
    }

}

}

Я хочу использовать тот же сервлет для других действий, таких как удаление, просмотр и т. Д. По URL (он должен использовать только один вышеприведенный сервлет для действий)

http://localhost:8080/mobsurvey/view-company/?company_id=1

должен ответить на эти данные в json

В настоящее время web.xml

  <display-name>mobsurvey</display-name>
  <servlet>
 <servlet-name>CompanyRegister Servlet</servlet-name>
 <servlet-class>com.saffroze.CompanyRegister</servlet-class>

 </servlet>
 <servlet-mapping>
 <servlet-name>CompanyRegister Servlet</servlet-name>
 <url-pattern>/register-company/*</url-pattern>
 </servlet-mapping>

 <welcome-file-list>
 <welcome-file>index.html</welcome-file>
  </welcome-file-list>
 </web-app> 

Я новичок в Java-сервлете

Какие-либо предложения ?Спасибо.

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Вы можете добавить дополнительную информацию в свой URL.
Как параметры

?action=edit&id=1

А в вашем сервлете вы можете использовать параметр действия для принятия решения

String action = request.getParameter("action");
if(action.equal(...) { /* Your logic here */ }

Или вы можете реализовать свой собственный диспетчер для маршрутизации запроса с URL-адресом, подобным

company/edit/1

Или вы можете переопределить метод service () для поддержки PUT, DELETE, ... и сделать ваш сервлет RESTful. Но поддержка браузерами этих методов не очень хороша .

1 голос
/ 01 марта 2012

Не ответ на ваш вопрос на самом деле.Есть несколько способов сделать то, что вы хотите достичь, один из них - то, что выдвинул @hope_is_grim.Использование одного сервлета для ряда операций CRUD не является масштабируемым решением, ИМХО.Я был там, сделал это и позже переключился на чистые веб-сервисы RESTful, используя такие библиотеки, как Джерси или RESTEasy .Это делает код поддерживаемым, масштабируемым и читаемым.Чем раньше вы выберете, тем лучше.

Полезная тема

...