Android + jsp

24 respostas
L

fala galera do código…
estou quebrando acabeça aqui,
estou tentando fazer esta comunicação,mas tá ruim…

meu codigo em android está assim:

public class MainActivity extends AppCompatActivity {

EditText Tusuario,Tsenha;
Button BAcessar;

public void onCreate(Bundle savedInstanceState){

    Log.i("validando", "lendo classe Main " );

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
    Tusuario = (EditText) findViewById(R.id.editUsuario);
    Tsenha = (EditText) findViewById(R.id.editSenha);
    BAcessar = (Button) findViewById(R.id.btAcessar);

    BAcessar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Log.i("MainActivity diz :", "onclick ok!! ");

            String urlPost = "http://192.168.0.23:8080/ProjetoWeb/autenticaAndroid.jsp";
            // String urlGet = "endereço da página de login";
            ArrayList<NameValuePair> parametrosPost = new ArrayList<NameValuePair>();

            parametrosPost.add(new BasicNameValuePair("usuario",Tusuario.getText().toString()));
            parametrosPost.add(new BasicNameValuePair("senha",Tsenha.getText().toString()));
            String respostaRetornada = null;
            String resposta = null;
            try{

                respostaRetornada = ConexaoHttpClient.executehttpPost(urlPost,parametrosPost);
                // respostaRetornada = ConexaoHttpClient.executehttpGet(urlGet);

                resposta = respostaRetornada.replaceAll("\\s+","");
                Log.i("MainActivity diz :", "executando executePost()!!!"+resposta);

                if(resposta != "usuario inválido")

                    mensagemExibir("Login", "usuario valido");

                else

                    mensagemExibir("Login", "usuario invalido");



            }catch(Exception e){

                Log.i("MainActivity diz :", "falha : " + e);
                Toast.makeText(MainActivity.this, "conexão falhada!!!" + e, Toast.LENGTH_LONG);
            }
        }

    });

}
public void mensagemExibir(String titulo,String texto){

    AlertDialog.Builder mensagem = new AlertDialog.Builder((MainActivity.this));
    mensagem.setTitle(titulo);
    mensagem.setMessage(texto);
    mensagem.show();

}

}

e o jsp assim…

<%@ page language=java contentType="text/html; charset=ISO-8859-1"

pageEncoding=ISO-8859-1%>

<%<a class="mention" href="/u/page">@page</a> import="java.sql.* " %>

<%

Connection conexao;

Statement statement;

ResultSet resultSet;

String login = request.getParameter(login);

String senha = request.getParameter(senha);

try{
Class.forName("org.postgresql.Driver");
   conexao = DriverManager.getConnection("jdbc:postgresql://xxxxxxxxx:xxxx/xxxxxxxxx","xxxxxxx", "xxxxxxx");
   statement = conexao.createStatement();
   String sql = String.format("SELECT * FROM xxxxxxxxxx  where login='?' And senha='?' ");

   resultSet = statement.executeQuery(sql);
   
   if(resultSet.next()){
	
	 resultSet.getString("login");
	 resultSet.getString("senha");
	
	   out.print("Validação ok!!!");
   }
   
   else{ out.print("usuario inválido");}

}catch(ClassNotFoundException Driver){

out.print("Driver não localizado:"+Driver);

}
catch(SQLException Fonte){

out.print("erro de conexão"+ Fonte);

}

%>

não sei como buscar o parametro no jsp…me ajudem por favor…
só consigo pegar dados do jsp, enviar com android não…

24 Respostas

darlan_machado

E por que não chama a servlet, que é o elemento responsável por processar requisições quando falamos em jsp? (eu sei que a jsp é uma servlet e você poderia utilizar o request.getParameter na própria jsp).

L

tanto o jsp como o sewrvelet são protegido por um filtro…então quando busco a requsição da url…o servelet abre o jsp, mas acho que não consigo direcionar para o servelet diretamnete sem autentiocação…eu não estou fazendo tudo no eclipse.
a parte android é feita no android Studio

sei que resquest.getParamter() é aceitavel pelo servelet em relação ao jsp,pelo método de direcinamento do setAttribute(), mas e para o android?
só não sei seu tirar o filtro para teste e buscar a url do servelet eu conseguirei executar este método com afinidade junto com o android…sei que no php usam o parametro $usuario=$_Post’(usuario’);
e funciona…

darlan_machado

Cara, fica bem complicado de tentar orientar quando você omite informações. Em nenhum momento você havia mencionado um filtro ou qualquer mecanismo de autenticação.
O $_POST[‘qualquerCoisa’]; do PHP tem o papel semelhante ao request.getParameter(“qualquerCoisa”) do java. Se vai ser GET, é no método doGet da servlet e se for post no doPost (e assim por diante), o funcionamento é o mesmo.

Preciso entender qual é a ideia, exatamente, pois, da forma que está fazendo, creio que não seja a melhor abordagem.

javaflex

Também não entendi a complicação de usar JSP.

http://www.veereshr.com/Android/AndroidToServlet

L

o problema é quando eu tento chamar o script pelo servelet ele precisa da pagina jsp,
só que eu não posso informar nada pelo jsp porque quem informa o envio é o android…
eu consegui validar o login com o request.getParameter() invocando o banco de dados…
obrigado…valeu

javaflex

Nao tem script, tem a URL que voce configura para apontar pro seu servlet.

L

quando digo script,me refiro ao código que o método doPost do servelet captura do jsp.
no meu caso, quem envia a url é o androi e seu eu enviar a url do servelet não dá em nada.
de qualquer forma tenho que criar um servelt só para poder acrescentar o jsp no filtro…valeu

javaflex

Ok, se prefere fazer assim vai em frente.

darlan_machado

Cara, isso é absurdamente terrível de se fazer (não sei por que raios ainda se permite tais coisas).
Veja, a JSP é, na verdade, uma Servlet. Tudo o que coloca nela, pode ser colocado em uma Servlet sem maiores dificuldades.
O que você está fazendo, embora seja permitido pela tecnologia, é uma coisa bizarra. Funciona? Sim, mas não quer dizer que esteja certo, nem que seja o melhor caminho. Em resumo, é gambiarra.

javaflex

Eu sinceramente não sei da onde vem esses ensinamentos.

L

então me mostre como criaria o codigo acima numa servelet…não entendo
oque quer dizer…

L

eu acho que além de proteger o codigo não amostrando o código fonte, até agora foi a única maneira que consegui fazer isso…vou tentar descobrir oque está tentando me dizer…

darlan_machado

Cara, de novo, insisto que JSP é uma Servlet por que é!
Proteger o código fonte? Se você criar um web service você protege teu código fonte da mesma maneira. Se criar uma servlet também. Não entendo em que nível você quer proteger, ainda mais colocando a coisa mais abominável no desenvolvimento java: scriptlets.
Enfim, é uma opção tua. Você faz como achar melhor. Não tenho como opinar sobre isso, agora, que não é a melhor solução, garanto que não é.

javaflex

Já te passei um exemplo.

darlan_machado

Primeiro que o código acima nunca deveria estar numa servlet (como eu disse, não sei a razão pela qual ainda se permite tal bizarrice). Esse código interage com o banco de dados, o que está totalmente fora do escopo de uma classe como uma servlet que, entende-se, deve aceitar requisições e retornar alguma coisa.

L

cara , tenho a percepção de que você está interpretando mal uma criação de total liberdade como a linguagem.Desde o primeiro momento , você só soube criticar e julgar os meus métodos e as ferramentas java como scriplet e não deu solução nenhuma…eu já alterei meu código e consegui rodar ,eu tento várias formas até conseguir oque eu quero fazer,se não der erro, não vejo mal nisso, se eu precisar pago mais caro por alguma coisa eu pago devido a minha nescescidade, e assim é o código na minha opinião, tem coisa que funciona para alguns e outras não, assim,acho que não importa o jeito que se faça algo,eu tenho como fazer este código acima de mil maneiras.Quando criei essa dúvida no site não foi para aparecer ou desmereçer alguém e sim para te ajuda construtivas,dicas para fazer funcionar um código a princípio…
desde já te agradeço…encerro aqui minhas deixas…valeu

darlan_machado

Quem está interpretando mal a linguagem, a tecnologia e o que eu disse é você.
Veja, eu sempre deixei claro que se fosse eu, faria diferente. Você tem total direito de fazer como quiser, errado, bizarro ou correto. A escolha é tua.
Acontece que eu estou te dizendo que a melhor solução seria trocar isso que você quer fazer por uma estrutura mais adequada e menos deselegante.
Basta você pesquisar um pouco mais (entendo que a falta de vontade em aceitar uma sugestão se dê por desconhecimento dos recursos, padrões e boas práticas da linguagem).

Vamos exemplificar de outro jeito: você está numa estrada, vê que o pneu furou. Precisa trocar o mesmo para seguir viagem. Você tem o estepe, o macaco e não tem a chave de roda, mas tem um alicate e está há 5 km do posto mais próximo, onde pode comprar uma chave de roda.
Você até pode conseguir desaparafusar a roda com o alicate, mas, garanto que o esforço será muito maior que utilizar uma chave de roda.
Ir e voltar até o posto pode parecer mais cansativo, mais complicado e demorado. Só que, veja só,com o alicate você vai levar o dia todo, talvez mais, até conseguir fazer o que precisa. Ir até o posto e comprar a chave de roda é uma caminhada de mais ou menos 2 horas (ida e volta).

Você está escolhendo trocar a roda com o alicate. Você já poderia ter pesquisado sobre web services, sobre DAO, sobre MVC e não fez (que seria ir até o posto e comprar a chave de roda).

Se quiser insistir em fazer essa coisa bizarra, pelo menos adeque o código às boas práticas.
Interação com banco de dados deve ser isolada em uma classe especialista.
A requisição deve ser recebida por uma servlet
A JSP só deverá conter regras para apresentação de dados
Use JSTL ao invés de scriptlet.

L

a única chave de roda que consegui até agora foi essa…veja…

só tenho que trocar isso por um método doinbackground();

if (android.os.Build.VERSION.SDK_INT > 9) {

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

StrictMode.setThreadPolicy(policy);

}
L

darlan_machado ,
analizando a estrutura agora , oque acha!
eu tenho a classe de conexão do driver e classe do banco separadamente,
aquilo era para ter certeza se funcionaria e agora observe…
se eu fizer pelo método doPost do servelet não teria como, sabe porque,
porque o servelet não dá out.print() para ele mesmo, ele precisa de um jsp para isso,
então eu teria que colocar no doPost do servelt e depois dá um request.getAtribute(metodo) e em seguida
dá um requestDispachster() para o jsp que seria a saida para o App…

se existir uma saida para o doPost direto da servelet, obviamente teria que receber uma url
do aplicativo e direcionar a saida dele,não sei,…você sabe alguma coisa sobre isso.

tipo assim:

@WebServlet("/TesteServlet")

public class TestServlet extends HttpServlet {

private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("Iniciando! ");
    resp.setContentType("text/plain;charset=UTF-8");
//recebendo os dados

DataInputStream in = new DataInputStream((InputStream) req.getInputStream());

String usuario = in.readUTF();

String email = in.readUTF();

String senha = in.readUTF();

String regID = in.readUTF();
//apresentando os dados

System.out.println("usuario: " + usuario);

System.out.println("email: " + email);

System.out.println("senha: " + senha);

System.out.println("id: " + regID);
//retornando os dados para confirmar no aparelho que foi enviado com sucesso

OutputStream out = resp.getOutputStream();

DataOutputStream dos = new DataOutputStream(out);

dos.writeUTF(usuario);

dos.writeUTF(email);

dos.writeUTF(senha);

dos.writeUTF(regID);

dos.writeUTF(fim);

dos.close();

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

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

@Override
public String getServletInfo() {
    return "Short description";
}

private void processRequest(HttpServletRequest request, HttpServletResponse response) {
    throw new UnsupportedOperationException("Not yet implemented");
}

}

javaflex

É disso que precisa?

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter writer = response.getWriter();
        writer.println("teste");
    }
L

mas foi isso q fiz, esse método só funciona para mim na condição(booleana) interna
mas se faço ele receber dados do android studio ele não fornesse a saida no navegador

javaflex

Você está atendendo navegador ou app Android? Ambos podem consumir a mesma requisição.

L

atendo…??não entendi.há…
recebo dados do app e gero a saida no navegador,só q com jsp eu consigo

javaflex

*atendendo

Criado 25 de fevereiro de 2018
Ultima resposta 28 de fev. de 2018
Respostas 24
Participantes 3