Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > JSP/Servlet


Автор: Hidrag 14.11.2006, 13:51
Хочу разобраться и научиться работать с JSP и Servlet'ами.
Придумал для этого вот такую задачу:
Открывается веб страница (JSP) на ней два поля для ввода логина и пароля и кнопка.
При нажатии на кнопку JSP страница отправляет данные в сервлет, который проверяет их корректность, если данные истинны то формируется страница "Истина" если нет, то формируется страница "Ложь".

Для проверки придумал вот такой простой класс:
Код

public class PassLog {
  private static final String login = "User";
  private static final String pass = "123";

  public static boolean check(String login; String pass) {
    if (login.equals(this.login) && pass.equals(this.pass) {
      retutn true;
    }; else return false;
  }
}

А теперь вопросы:
1. Как нарисовать на странице поля для ввода и кнопку.
2. Как передать введенные данные в сервлет для обработки
3. Как в сервлете получить эти данные и после обработки отправить результат в JSP
4. Как в JSP обработать результат и на основании его вывести ту или иную страничку.

Автор: tux 14.11.2006, 14:11
Hidrag, чтобы на твои вопросы ответить нужно целую книгу написать. Возьми какую-нибудь литературу по Servlets/JSP, почитай, попробуй написать то, что задумал. Если будут вопросы поконкретнее, спрашивай. Почитать можно http://ru.sun.com/java/j2ee/index.html и http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&target=main_panel&section=535.

Автор: Hidrag 14.11.2006, 14:18
Информации по этому тонны, там много всего и все размыто...

Если можно хотябы на словах, что куда...

Автор: tux 14.11.2006, 14:31
Цитата(Hidrag @  14.11.2006,  13:51 Найти цитируемый пост)
1. Как нарисовать на странице поля для ввода и кнопку.

Это в раздел по HTML, используятся обычные формы.

Цитата(Hidrag @  14.11.2006,  13:51 Найти цитируемый пост)
2. Как передать введенные данные в сервлет для обработки

При нажатии на кнопку браузер сам передает данные.

Цитата(Hidrag @  14.11.2006,  13:51 Найти цитируемый пост)
3. Как в сервлете получить эти данные и после обработки отправить результат в JSP

Чтобы получить - метод getParameter() класс javax.servlet.http.HttpServletRequest. Чтобы передать результат в JSP - метод setAttribute() того же класса.

Цитата(Hidrag @  14.11.2006,  13:51 Найти цитируемый пост)
4. Как в JSP обработать результат и на основании его вывести ту или иную страничку.

Страничка, видимо, и есть JSP, не знаю уж что под этим подразумеваешь. Полученные параметры скорее надо в сервлете обрабатывать.

Автор: Hidrag 17.11.2006, 10:00
На самом деле все оказалось не так сложно. Вводной информации по JSP и Servlet'ам очень много, но примеров их использования дальше  Hello World очень мало. Частично разобрался:
Вот так я вызываю из JSP страницы свой сервлет и передаю ему параметры:

Код

    <form action = MainServlet method="GET">
        <h1> <input type="text" name="Login" value="" /></h1>
        <h1> <input type="password" name="Pass" value="" /></h1>
        <h1> <input type="submit" name="but" value="Ok" /></h1> 


Мой сервлет обрабатывает данные и выводит результат в зависимости от обработки:
Код

package MyApp;

import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class MainServlet extends HttpServlet {
    
    private ServletConfig config;

    public void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        doGet(request,response);
   }
    
    public void init(ServletConfig config) throws ServletException {
        super.init();
        this.config = config;
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        String log = request.getParameter("Login");
        String pas = request.getParameter("Pass");
        Logon l = new Logon();
        boolean ans = l.Check(log,pas);
        PrintWriter out = response.getWriter();
        out.println("<title>Result</title>");
        HttpSession session = request.getSession();
        String s = session.toString();
        if (ans) {
            out.println("Ура!");
        } else out.println("Фиг вам!");
        out.close();
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    }
    
    public ServletConfig getServletConfig() {
        return config;
    }
    
    public String getServletInfo() {
        return "Short description";
    }
}


Остался такой вопрос: Как зделать чтобы мой сервлет вместо принтлайна 
Код

       if (ans) {
            out.println("Ура!");
        } else out.println("Фиг вам!");

открывал ту или иную JSP страницу и передавал ей некие параметры?

Автор: tux 17.11.2006, 10:24
Чтобы форварднуть на страницу JSP:
Код

request.getRequestDispatcher("page.jsp").forward(request, response);

Чтобы разделять какую-то информацию в сервлетах и JSP обычно используются атрибуты:
Код

request.setAttribute("var", "Уря");

На странице, соответственно:
Код

request.getAttribute("var");

Автор: Hidrag 18.11.2006, 12:17
Цитата

Чтобы разделять какую-то информацию в сервлетах и JSP обычно используются атрибуты:код Java

        request.setAttribute("var", "Уря");


На странице, соответственно:код Java

        request.getAttribute("var")


... а можно чуть подробней об этом? С примером, хотя бы на словах, как это применять?

P.S. Спасибо за ответы!

Автор: tux 18.11.2006, 14:54
Сервлет:
Код

public class SampleServlet extends javax.servlet.http.HttpServlet implements
        javax.servlet.Servlet {

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        request.setAttribute("hello", "Hello, world!");
        request.getRequestDispatcher("sample.jsp").forward(request, response);
    }

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

JSP:
Код

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello</title>
</head>
<body>
    <%
    String hello = (String) request.getAttribute("hello");
    %>
    <%=hello %>
</body>
</html>

Неужели станет понятнее?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)