powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java 1.6 + Struts 1.3.8 + Tomcat + MySQL
1 сообщений из 1, страница 1 из 1
Java 1.6 + Struts 1.3.8 + Tomcat + MySQL
    #37629973
Lihman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте Гуру!

Можно к Вам обратиться за разъяснениями?

Я новичек в Java, пытаюсь постичь связку Java 1.6 + Struts 1.3.8 + Tomcat + MySQL
не спрашивайте почему именно 1.3.8 - таков проект и надо именно эти версии

Пытаюсь создать примитивное Приложение

Пользователь заходит на Приложение, попадает на индексную страницу, или
если выставлено в web.xml, то куда выставлено
Код: xml
1.
2.
3.
4.
    
<welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
</welcome-file-list>


===========<index.jsp>=============
Код: java
1.
<jsp:forward page="/StrutsTest.do"/>

===========<index.jsp>=============
как я понял, реально нужна только одна эта строчка, остальные не значащие и не выполняются (или выполняются, но игнорируются)

так же в web.xml указано
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>


что наш сервлет имеет имя "action" и будет иметь класс org.apache.struts.action.ActionServlet
так же будут у него параметры инициализации с именем "config" и лежат они в ...struts-config.xml
вот за что отвечает load-on-startup - пока не разбирался

тут же, делается связь, что все URL попадающие под правило "*.do"
будут обработаны сервлетом "action"

в struts-config.xml нужно описать 2 раздела связь с формой и карту действий
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    <form-beans>
        <form-bean name="beanName1"
                   type="src.java.com.velial.StrutsTestActionForm"/>
        <form-bean name="listMySQLActionForm"
                   type="src.java.com.velial.ListMySQLActionForm">
            <form-property name="mTel" type="java.lang.String[]"/>
        </form-bean>
    </form-beans>

    <action-mappings>
        <action
                name="beanName1"
                path="/StrutsTest"
                type="src.java.com.velial.StrutsTestAction">
            <forward name="success" path="/strutsTest.jsp"/>
        </action>
        <action path="/ListTel"
                name="listMySQLActionForm"
                type="src.java.com.velial.ListMySQLAction">
            <forward name="success" path="/listTel.jsp"/>
        </action>
    </action-mappings>


бин-форма с именем "beanName1" имеет тип src.java.com.velial.StrutsTestActionForm
тут указывается, какой класс использовать для обработки этой бин-формы
по аналогии описываю бин-форму с именем "listMySQLActionForm" и соответственно типом
тут я пытаюсь указать, что есть у моей бин-формы будет свойство с имением "mTel" типа "java.lang.String[]"

в карте-действий описываю для первой бин-формы путь URL на который будет срабатывать
и тип, так же описываю, что в случае успешного выполнения надо перейти по URL "/strutsTest.jsp"
по аналогии описываю действия для бин-формы "listMySQLActionForm"
и куда переходить

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
import org.apache.struts.action.ActionForm;

public class StrutsTestActionForm extends ActionForm{
    private String msg;

    public StrutsTestActionForm()
    {
        super();
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg + "__ActionForm";
    }
}


Создаю класс, как наследник от ActionForm
создаю внутри класса приват-переменную и к ней 2 метода
геттер и сеттер, в сеттере модифицирую строку, которая ложиться в переменную
(чтобы видеть что прошло через этот сеттер)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

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

public class StrutsTestAction extends Action{
    private final static String SUCCESS = "success";

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        StrutsTestActionForm stForm = (StrutsTestActionForm) form;
        stForm.setMsg("Struts Test Msg");
        return mapping.findForward(SUCCESS);
    }
}


в классе-Действии описываю, что надо создать экземпляр Формы,
и установить Форме методом сеттер некую строку
и делаю возврат с маркером "успешно", на этот маркер
отреагирует и перейдет сервак, согласно struts-config.xml
в strutsTest.jsp

===========<strutsTest.jsp>=============
Код: java
1.
2.
3.
    <html:form action="/StrutsTest">
        <html:text property="msg"/>
    </html:form>


===========<strutsTest.jsp>=============
в этом файле собственно и будет вывод
описав tag-lib-ы, можно использовать их
описываю например форму и вывожу переменную "msg"

запускаю - все работает!
в поле ввода появляется строка+модификатор из ActionForm


Теперь решил усложнить пример
надо взять простейший SELECT из MySQL
(select id,fio,tel from tel)

подготовил класс-форму

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
public class ListMySQLActionForm extends ActionForm {
    private String tmp;
    private List listTel;

    public String getTmp() {
        return tmp;
    }

    public void setTmp(String tmp) {
        this.tmp = tmp;
    }

    public List getListTel() {
        Connection connection = null;
        String url = "jdbc:mysql://localhost:3306/";
        String dbname = "test";
        String driver = "com.mysql.jdbc.Driver";
        String userName = "root";
        String password = "";

        String sql = "select id,fio,tel from tel";
        ResultSet resultSet;
        List listTel = new ArrayList();
        try
        {
            Class.forName(driver).newInstance();
            connection = (Connection) DriverManager.getConnection(url + dbname, userName, password);
            Statement statement = connection.createStatement();

            statement.executeQuery(sql);
            resultSet = statement.getResultSet();
            while (resultSet.next())
            {
                listTel.add(resultSet.getInt("id"));
                listTel.add(resultSet.getString("fio"));
                listTel.add(resultSet.getString("tel"));
            }
            resultSet.close();
            statement.close();
            connection.close();
        }
        catch (Exception e)
        {
            listTel = new ArrayList();
        }
        return listTel;
    }

    public void setListTel(List listTel) {
        this.listTel = listTel;
    }
}


все аналогично, но только теперь не в сеттере, а в геттере сделал запрос на MySQL
может надо делать как-то по другому????
или обязательно объявить переменную и с ней геттерами и сеттерами работать?


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class ListMySQLAction extends Action {
    private final static String SUCCESS = "success";

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        ListMySQLActionForm listMySQLActionForm = (ListMySQLActionForm) form;
        listMySQLActionForm.setTmp("Tmp variable");
        List mysqlList = listMySQLActionForm.getListTel();
        request.setAttribute("mysqlTel",mysqlList);
        return mapping.findForward(SUCCESS);
    }
}


в классе-действии опять делаю форму и переменной-списка назначаю список из Формы
вот вопрос " Как передать данные из этого Контроллера в Вид "?
правильно я делаю через request.setAttribute("mysqlTel",mysqlList) ?????

Как я понял ActionForm - это Модель, Action - это Котроллер,
ну а *.jsp - это уже Вид из стандартной модели MVC, так?

в JSP-виде-приемнике listTel.jsp
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean" %>
<%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %>
<%@ taglib prefix="logic" uri="http://struts.apache.org/tags-logic" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html>
<head><title>ListTel</title></head>
<body>
<h1>ListTel</h1>
<html:form action="/ListTel">
    <html:text property="listTel"/>
</html:form>

<logic:iterate name="mysqlTel" property="mysqlTel" id="lTel">
    <bean:write name="lTel"/>
</logic:iterate>
</body>
</html>


и вот тут начинаются чудеса!!!!
я никак не могу поймать ГДЕ_МОЙ_СПИСОК listTel ?????
как его надо описать?
где я ловлю косяки????
я уже и так и эдак пробовал (привел все варианты)
все равно не работают
как надо???

Заранее спасибо!!!
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Java 1.6 + Struts 1.3.8 + Tomcat + MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]