Я работал над веб-проектом, используя следующие функции:
Форма входа: люди могут войти и загрузить файл; (Camel: Jetty, Http, JDBC)
Форма загрузки; загрузить сервлет: если люди могут войти; можете загрузить XML-файл на FTP или веб-сервер; (Верблюд: файл)
3. Файл проверен моим файлом .xsd; (Верблюд: валидатор)
- Файл проверен моим файлом схемы .xsl; (Верблюд: XSLT)
Я создал веб-проект моей любимой IDE (IntelliJ IDEA Jetbrains );
Я описываю часть моего сценария с исходным кодом и надеюсь, что это полезно ☺
1) index.html
<form action="http://0.0.0.0:8080/hello" method="post">
<fieldset title="Login" >
username:<input type="text" id="user" name="user"/>
password:<input type="password" id="pass" name="pass" />
<input type="submit" id="submit" value="submit"/>
</fieldset>
Сначала вы должны создать базу данных и таблицу входа; затем добавьте пример данных;
например, добавьте эти файлы:
2) schema.sql
DROP TABLE IF EXISTS CONTACT;
CREATE TABLE CONTACT (
ID INT NOT NULL AUTO_INCREMENT
, NAME VARCHAR(40) NOT NULL
, USERNAME VARCHAR(40) NOT NULL
, PASSWORD VARCHAR(60) NOT NULL
, VERSION INT NOT NULL DEFAULT 0
, UNIQUE UQ_CONTACT_1 (USERNAME)
, PRIMARY KEY (ID));
3) test-data.sql
insert into contact (name, username, password) values ('ali', 'aliti', '123');
insert into contact (name, username, password) values ('shahab', 'shahab', '147');
insert into contact (name, username, password) values ('farhad', 'farhad', '159');
4) config spring-context.xml
Затем вы можете использовать встроенные базы данных, такие как derby, H2, mysql или другие. Добавьте ниже конфигурацию в ваш весенний конфигурационный файл:
<jdbc:embedded-database id="dataSource" type="H2">
<jdbc:script location="classpath:schema.sql"/>
<jdbc:script location="classpath:test-data.sql"/>
</jdbc:embedded-database>
5) camel-context.xml
Теперь вы можете запустить свой проект; прежде чем сделать это, вы должны добавить этот маршрут в контекст верблюда:
<route>
<from uri="jetty:http://0.0.0.0:8080/hello"/>
<setBody>
<simple>
select * from contact where USERNAME = '${in.header.user}' and PASSWORD = '${in.header.pass}'
</simple>
</setBody>
<to uri="jdbc:dataSource"/>
<process ref="loginProcessor"/>
<log message=">>>header: ${in.header.name}"/>
<choice>
<when>
<simple>${in.header.name} == null</simple>
<to uri="jetty://http://localhost:9090/fail.html?bridgeEndpoint=true"/>
</when>
<otherwise>
<to uri="jetty://http://localhost:9090/file.html?bridgeEndpoint=true"/>
</otherwise>
</choice>
Когда вы запускаете наш проект; Страница index.html была показана, и вы можете поместить текстовые поля с именем пользователя и паролем и отправить свою форму.
На самом деле Верблюд слушал этот порт и получил информацию о вашей почте.
Вы можете получить эту информацию с помощью заголовка Camel, например, «$ {in.header.user}».
Как видите, я установил свой запрос на выборку в теле Camel, таким образом, результат выбора также сохраняется в теле Camel.
Я хочу прочитать свой результат и получил некоторые решения, по этой причине я добавляю процессор Camel, как показано ниже:
6) LoginProcessor.java
public class LoginProcessor implements Processor {
public void process(Exchange exchange) throws Exception {
int size = ((ArrayList) exchange.getIn().getBody()).size();
if (size > 0) {
Object name = ((LinkedHashMap) (((ArrayList) exchange.getIn().getBody()).get(0))).get("NAME");
System.out.println("welcome user: " + name);
exchange.getOut().setHeader("name",name);
} else {
System.out.println("user or pass are invalid. ");
exchange.getOut().setHeader("name",null);
}
}
}
В LoginProcessor я проверил тело и правильность ввода имени пользователя и пароля; Добавьте свойство заголовка Camel и назовите его «name» именем поля таблицы. В противном случае установите нулевое значение в свойстве заголовка Camel.
Вернуться к XML-файлу контекста Camel и продолжить маршрут.
Если заголовок Camel равен нулю; перенаправить пользователя на страницу fail.html; в противном случае перенаправьте на страницу, которая получает файл от пользователя (file.html).
Примечание: свойство bridgeEndpoint
Вы устанавливаете конечной точкой http значение bridgeEndpoint, что означает, что URL-адрес запроса будет обновляться с помощью URI запроса.