Тогда доступ к значению переменной spid через jstl:
${param["spid"]}
Показаны сообщения с ярлыком jsp. Показать все сообщения
Показаны сообщения с ярлыком jsp. Показать все сообщения
четверг, 22 июля 2021 г.
Получение значения параметра из URL-адреса с помощью JSTL
Пример url: "http://localhost:8080/index?param1=val1&spid=test".
четверг, 14 мая 2020 г.
Доступ к СУБД Firebird 3.0 через JSP под Tomcat
Пример доступа к БД Firebird 3.5 через JSP под Tomcat.
Чтобы научить Apache Tomcat 9 под Java 1.8 подключаться к базам Firebird 3.0, копируем из архива jaybird-4.0.0.java8.zip файлы jaybird-full-4.0.0.java8.jar, lib\antlr-runtime-4.7.2.jar, lib\connector-api-1.5.jar, lib\jna-5.5.0.jar в папку <tomcat>\lib.
Создаем web-приложение: JSP-страница, которая будет выводить содержимое таблицы "USER" из БД "c:/data/base.fdb" сервера "dbserver"
Листинг index.jsp:
Чтобы научить Apache Tomcat 9 под Java 1.8 подключаться к базам Firebird 3.0, копируем из архива jaybird-4.0.0.java8.zip файлы jaybird-full-4.0.0.java8.jar, lib\antlr-runtime-4.7.2.jar, lib\connector-api-1.5.jar, lib\jna-5.5.0.jar в папку <tomcat>\lib.
Создаем web-приложение: JSP-страница, которая будет выводить содержимое таблицы "USER" из БД "c:/data/base.fdb" сервера "dbserver"
<tomcat>\webapps\test_app\index.jsp
Листинг index.jsp:
<%@page import="java.sql.*" %>
<%Class.forName("org.firebirdsql.jdbc.FBDriver"); %>
<HTML>
<HEAD>
<TITLE>Database access through JSP</TITLE>
</HEAD>
<BODY>
<H1>Result of select query</H1>
<%
Connection connection = DriverManager.getConnection(
"jdbc:firebirdsql:dbserver/3255:c:/data/base.fdb",
"SYSDBA",
"masterkey");
Statement statement = connection.createStatement();
ResultSet resultset = statement.executeQuery("select id, name from user order by id asc");
%>
<TABLE BORDER="1">
<TR>
<TH>id</TH>
<TH>name</TH>
</TR>
<% while(resultset.next()){ %>
<TR>
<TD> <%= resultset.getString(1) %></TD>
<TD> <%= resultset.getString(2) %></TD>
</TR>
<% } %>
</TABLE>
</BODY>
</HTML>
среда, 25 сентября 2019 г.
JSP: "include file"
Проблема отображения кириллических символов из "center.html", при включении этой страницы в другую с помощью директивы "include file", приводила к некорректному отображению этих самых символов.
index.jsp:
Проблема решилась после добавления в "center.html" тега
index.jsp:
<%@include file="center.html"%>
Проблема решилась после добавления в "center.html" тега
<%@ page contentType="text/html; charset=utf-8" pageEncoding="UTF-8" %>
вторник, 9 июля 2019 г.
Не работает favicon
Проблема:
На одной из страниц не работала конструкция:
Причина:
в самом верху файла, еще до <HTML> была спрятана конструкция
Решение:
после переноса input внутрь <HTML> проблема с favicon решилась.
На одной из страниц не работала конструкция:
<link rel="shortcut icon" type="image/png" href="images/favicon.ico">.
Причина:
в самом верху файла, еще до <HTML> была спрятана конструкция
<input type="hidden" name=...>.
Решение:
после переноса input внутрь <HTML> проблема с favicon решилась.
пятница, 7 июня 2019 г.
понедельник, 25 февраля 2019 г.
Google Chrome: Uncaught ReferenceError: <JS function name> is not defined
Иногда после обновления веб-приложения (в котором используются JS) на стороне пользователя в интернет-браузере Google Chrome некоторые JS не работают, при этом в консоли видна ошибка:
Решение:
при обнаружении проблемы обновить кеш браузера с помощью Ctrl+F5.
Uncaught ReferenceError: <JS function name> is not defined
at HTMLAnchorElement.onclick (index.jsp:40)
Решение:
при обнаружении проблемы обновить кеш браузера с помощью Ctrl+F5.
суббота, 20 октября 2018 г.
В jenki сломалась sorttable
Перестала работать сортировка таблиц (функционал "sorttable"). Одновременно в консоли браузера (Ctrl+Shift+i) при загрузке главной страницы стала появляться ошибка:
Ошибка стала появляться, начиная с версии 0.8.
К ней приводят эти три строки (№№ 51-53):
Причину я так и не понял, но если убрать переносы строк, тогда ошибки нет и сортировка работает:
Исправлено в jenki 0.11.6.
sorttable.js:211 Uncaught TypeError: node.getAttribute is not a function
at Object.getInnerText (sorttable.js:211)
at Object.getInnerText (sorttable.js:236)
at Object.guessType (sorttable.js:170)
at Object.makeSortable (sorttable.js:87)
at sorttable.js:36
at Function.Array.forEach (sorttable.js:453)
at forEach (sorttable.js:492)
at HTMLDocument.init (sorttable.js:34)
getInnerText @ sorttable.js:211
getInnerText @ sorttable.js:236
guessType @ sorttable.js:170
makeSortable @ sorttable.js:87
(anonymous) @ sorttable.js:36
Array.forEach @ sorttable.js:453
forEach @ sorttable.js:492
init @ sorttable.js:34
Ошибка стала появляться, начиная с версии 0.8.
К ней приводят эти три строки (№№ 51-53):
<td style="width: 20px;">
<input type="button" class="btn-nice" value="${recnum}" onclick="window.open('spec.jsp?inID=${row.id}&name=${row.schemaname}','_self')"/>
</td>
Причину я так и не понял, но если убрать переносы строк, тогда ошибки нет и сортировка работает:
<td style="width: 20px;"><input type="button" class="btn-nice" value="${recnum}" onclick="window.open('spec.jsp?inID=${row.id}&name=${row.schemaname}','_self')"/></td>
Исправлено в jenki 0.11.6.
пятница, 9 марта 2018 г.
GET и POST
Пример передачи параметров с помощью метода GET:
<input type="button" value="Кнопка открытия второй страницы" onclick="window.open('secondpage.jsp?param1=${param1}','_self')"/>Пример передачи параметров с помощью метода POST:
<form action="secondpage.jsp" method="POST" target="_self">
<input type="hidden" name="param1" value="${param1}"/>
<input type="submit" name="btn1" value="Кнопка открытия второй страницы">
</form>
четверг, 8 марта 2018 г.
вторник, 6 марта 2018 г.
Пример Hello World + JSP + Java-classes
WEB-INF/classes/com/example/HelloWorld.java:
index.jsp:
package com.example;
public class HelloWorld
{
public static String hello;
// setter-method:
public static void setHello(String newhello) {
hello = newhello;
}
// getter-method:
public static String getHello() {
return hello;
}
}
index.jsp:
<%@ page import="com.example.HelloWorld"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Servlet example</title>
</head>
<body>
<%
HelloWorld.setHello("Hello World 2");
out.println(HelloWorld.getHello());
%>
</body>
</html>
Пример сервлета
На деле так никто, конечно, делать не будет, но в качестве примера пойдет:
index.jsp:
index.jsp:
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.sql.DatabaseMetaData"%>
<%@ page import="java.sql.ResultSet"%>
<%@ page import="java.sql.SQLException"%>
<%@ page import="java.sql.Statement"%>
<%@ page import="java.util.Properties"%>
<%@ page import="java.io.FileInputStream"%>
<%@ page import="java.io.File"%>
<%@ page import="java.io.IOException"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Servlet example</title>
</head>
<body>
<b><%
int count;
Properties props = new Properties();
props.load(new FileInputStream(new File(application.getRealPath("WEB-INF/classes/myapp.properties"))));
String dbUrl = props.getProperty("myapp.db.url");
String dbUser = props.getProperty("myapp.db.user");
String dbPass = props.getProperty("myapp.db.password");
String[] splt = dbUrl.split(":",3);
String dbType = splt[1].toUpperCase();
String query = "select count(*) from sysuser";
Properties conProps = new Properties();
conProps.put("user", dbUser);
conProps.put("password", dbPass);
conProps.put("charSet", "Cp1251");
Connection con = DriverManager.getConnection(dbUrl, conProps);
DatabaseMetaData meta = con.getMetaData();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
count = rs.getInt(1);
out.println("Count of users = " + count);
out.println("<br>dbType=" + dbType);
}
%></b>
</body>
</html>
понедельник, 5 марта 2018 г.
Import class in JSP
index.jsp:
MyClass.java:
MyAnotherClass.class file location:
<%@ page import="MyPackage.MyClass" %>MyClass.class file location:
...
<tomcat>\webapps\<MyWebApp>\WEB-INF\classes\MyPackage\MyClass.class
MyClass.java:
package MyPackage;
...
import com.example.MyAnotherClass;
MyAnotherClass.class file location:
<tomcat>\webapps\<MyWebApp>\WEB-INF\classes\com\example\MyAnotherClass.class
воскресенье, 18 декабря 2016 г.
JavaScript: сортировка таблицы
<script type="text/javascript" src="sorttable.js"></script>
...
<table class="sortable">
...
источник
+ошибка в работе при переносах строк в тэге "<td>"
суббота, 26 ноября 2016 г.
JSTL: Пример обработки двух кнопок одной формы
index.jsp:
checkbox.jsp:
отсюда
<form method="post" action="checkbox.jsp">
<P>Включите одну или несколько галочек:</p>
<P>Галочка 1
<input type="checkbox" name="mychkbox" value="Галочка 1"/></p>
<P>Галочка 2
<input type="checkbox" name="mychkbox" value="Галочка 2"/></p>
<P>Галочка 3
<input type="checkbox" name="mychkbox" value="Галочка 3"/></p>
<P>Галочка 4
<input type="checkbox" name="mychkbox" value="Галочка 4"/></p>
<P><input type="submit" name="button1" value="Кнопка 1" /></p>
<P><input type="submit" name="button2" value="Кнопка 2" /></p>
</form>
checkbox.jsp:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:choose>
<c:when test="${not empty paramValues.button1}">
<% // Проверяем, была ли нажата кнопка "Кнопка 1" %>
Вы нажали кнопку "Кнопка 1"
<c:choose>
<c:when test="${not empty paramValues.mychkbox}">
<% // Проверяем, были ли включены чекбоксы %>
и выбрали галочки:
<c:forEach items="${paramValues.mychkbox}" var="myvar">
<br><c:out value="${myvar}"/>
</c:forEach>
</c:when>
<c:otherwise>
, но не включили ни одной галочки.
</c:otherwise>
</c:choose>
</c:when>
<c:when test="${not empty paramValues.button2}">
<% // Проверяем, была ли нажата кнопка "Кнопка 2" %>
Вы нажали кнопку "Кнопка 2".
</c:when>
<c:otherwise>
<% // Заглушка на невозможный случай %>
Что-то не так. Если вы видите этот текст, обратитесь к администратору.
</c:otherwise>
</c:choose>
отсюда
четверг, 17 ноября 2016 г.
Вызов хранимой PL/SQL-процедуры с помощью JSTL
В базу была добавлена хранимая процедура:
Ее вызов из WEB-приложения организован следующим образом:
index.jsp (кроме остальной части) есть кнопка вызова страницы, вызывающей хранимую процедуру:
vacuum.jsp:
"create or replace procedure VACUUM as begin ... end"
Ее вызов из WEB-приложения организован следующим образом:
index.jsp (кроме остальной части) есть кнопка вызова страницы, вызывающей хранимую процедуру:
<form action="vacuum.jsp" method="POST">
<input type="submit" style="width:150px" value="Актуализировать" title="Убрать "мертвые души"">
</form>
vacuum.jsp:
<%@ page contentType="text/html; charset=utf-8" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<%//Антикракозябриковая кодировка
request.setCharacterEncoding("UTF-8");%>
<sql:update dataSource="${dbConnection}">
begin VACUUM; end;
</sql:update>
<%response.sendRedirect("index.jsp");%>
среда, 25 мая 2016 г.
Отображение в браузере содержимого текстового файла
Как отобразить в браузере содержимое текстового файла?
Например, лога импорта дампа - \\myserver\logs\restore.log.
Прямые ссылки (<a href="file://///myserver/logs/restore.log">show file</a>) не работают из-за ограничений безопасности браузеров (ссылка на странице отображается, но щелчок по ней ни к чему не приводит).
Решение с помощью JSTL:
Создаем jsp-страницу, например, "show_log.jsp", следующего содержания:
На главную страницу добавляем ссылку на "show_log.jsp". Теперь при щелчке по такой ссылке в браузере откроется страница с содержимым текстового файла "\\myserver\logs\restore.log".
Например, лога импорта дампа - \\myserver\logs\restore.log.
Прямые ссылки (<a href="file://///myserver/logs/restore.log">show file</a>) не работают из-за ограничений безопасности браузеров (ссылка на странице отображается, но щелчок по ней ни к чему не приводит).
Решение с помощью JSTL:
Создаем jsp-страницу, например, "show_log.jsp", следующего содержания:
<%@ page contentType="text/html; charset=utf-8" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%//Антикракозябриковая кодировка
request.setCharacterEncoding("UTF-8");%>
<pre><c:import url="file://///myserver/logs/restore.log" /></pre>
На главную страницу добавляем ссылку на "show_log.jsp". Теперь при щелчке по такой ссылке в браузере откроется страница с содержимым текстового файла "\\myserver\logs\restore.log".
вторник, 8 марта 2016 г.
Чтение файла параметров (properties-файл) через JSP с помощью <fmt:setBundle>
Файл параметров (key-value pair) можно расположить здесь (будет доступно только в рамках WEB-приложения):
Тогда в JSP-файле (например, index.jsp) обращение к файлу параметров можно обратится так:
(scope - используется для того, чтобы контекст о подключении к БД был доступен всем JSP-файлам в рамках данного WEB-приложения)
Листинг <tomcat>/webapps/<webapp>/WEB-INF/classes/myparams.properties:
<tomcat>/webapps/<webapp>/WEB-INF/classes/myparams.propertiesили здесь (будет доступно для всех WEB-приложений в рамках сервера:
<tomcat>/lib/myparams.properties
Тогда в JSP-файле (например, index.jsp) обращение к файлу параметров можно обратится так:
(scope - используется для того, чтобы контекст о подключении к БД был доступен всем JSP-файлам в рамках данного WEB-приложения)
<fmt:setBundle var="prop" basename="myparams"/>
<fmt:message bundle="${prop}" key="db.driver" var="dbDrv"/>
<fmt:message bundle="${prop}" key="db.url" var="dbUrl"/>
<fmt:message bundle="${prop}" key="db.user" var="dbUser"/>
<fmt:message bundle="${prop}" key="db.password" var="dbPswd"/>
<sql:setDataSource var="dbConnection" driver="${dbDrv}" url="${dbUrl}" user="${dbUser}" password="${dbPswd}" scope="application"/>
<sql:query var="result" dataSource="${dbConnection}" sql="select id, schemaname, azkversion, description from schemainfo" />
Листинг <tomcat>/webapps/<webapp>/WEB-INF/classes/myparams.properties:
db.driver=oracle.jdbc.driver.OracleDriver
db.url=jdbc:oracle:thin:@dbserver:1521:ORACLESID
db.user=MYSCHEMA
db.password=password
Доступ к параметрам JSP через EL-выражение
Получение значения переменной "str" в JSP можно заменить с этого:
И короче, и обработка значения "null" правильнее, т.к. сразу вот это получаем.
<%=request.getParameter("str");%>на EL-выражения:
${param.str}или так:
${param["str"]}
И короче, и обработка значения "null" правильнее, т.к. сразу вот это получаем.
понедельник, 7 марта 2016 г.
Обработка null у строковой переменной в JSP
Если
Чтобы пустая строка отобразилась в браузере пустой:
String str = nullто "page.jsp" с содержимым:
Переменная str = <%=str%>отобразиться в браузере так:
Переменная str = null
Чтобы пустая строка отобразилась в браузере пустой:
Переменная str =нужно в "page.jsp" воспользоваться EL-выражением:
Переменная str = ${str}
Labels:
скрипт,
скрипты,
el,
el-выражения,
el-expression,
expression,
expression language,
java,
jsp,
null,
script,
scripts,
string,
tomcat
пятница, 4 марта 2016 г.
Чтение файла параметров (properties-файл) через JSP
Листинг index.jsp
Листинг test.file
В браузере будет следующее:
<%@ page import="java.io.FileInputStream" %>
<%@ page import="java.util.Properties" %>
<%
FileInputStream file = new FileInputStream(request.getRealPath("test.file"));
Properties prop = new Properties();
prop.load(file);
String db_url = prop.getProperty("db.url");
%>
<html>
<head></head>
<body>
<%out.print("Test N 11");%>
<br>
<%out.print(request.getRealPath("/"));%>
<br>
<%out.print("From parfile: " + db_url);%>
</body>
</html>
Листинг test.file
db.driver=oracle.jdbc.driver.OracleDriver
db.url=jdbc:oracle:thin:@dbserver:1521:ORACLESID
db.user=MY_ORA_SCHEMA
db.password=pass
В браузере будет следующее:
Test N 11
/opt/apache-tomcat/webapps/my_app/
From parfile: jdbc:oracle:thin:@jdbc:oracle:thin:@dbserver:1521:ORACLESID
Подписаться на:
Сообщения (Atom)
Архив
-
►
2019
(44)
- декабря (2)
- октября (6)
- сентября (9)
- августа (1)
- июля (1)
- июня (2)
- мая (2)
- апреля (2)
- марта (2)
- февраля (9)
- января (8)
-
►
2018
(54)
- декабря (4)
- ноября (3)
- октября (6)
- сентября (4)
- августа (2)
- июля (2)
- мая (3)
- апреля (4)
- марта (11)
- февраля (6)
- января (9)
-
►
2017
(55)
- декабря (4)
- ноября (14)
- октября (1)
- сентября (3)
- августа (10)
- июля (2)
- июня (5)
- мая (2)
- апреля (3)
- марта (4)
- февраля (4)
- января (3)
-
►
2016
(111)
- декабря (12)
- ноября (4)
- октября (14)
- сентября (7)
- августа (7)
- июля (14)
- июня (12)
- мая (8)
- апреля (5)
- марта (16)
- февраля (10)
- января (2)
-
►
2015
(96)
- декабря (2)
- ноября (4)
- октября (3)
- сентября (6)
- августа (2)
- июля (2)
- июня (2)
- мая (11)
- апреля (14)
- марта (24)
- февраля (21)
- января (5)
-
►
2014
(72)
- декабря (18)
- ноября (16)
- октября (2)
- сентября (7)
- августа (4)
- июля (1)
- июня (4)
- мая (5)
- апреля (3)
- марта (3)
- февраля (6)
- января (3)
-
►
2013
(33)
- декабря (3)
- ноября (2)
- октября (3)
- сентября (2)
- августа (1)
- июля (1)
- июня (2)
- мая (5)
- апреля (2)
- марта (2)
- февраля (1)
- января (9)
-
►
2012
(181)
- ноября (6)
- октября (11)
- сентября (6)
- августа (5)
- июля (6)
- июня (25)
- мая (24)
- апреля (14)
- марта (20)
- февраля (38)
- января (26)
