Примери за JSP програма: Форма за регистрация и вход
⚡ Умно обобщение
Примерите за JSP програми тук изграждат три модула - регистрационна форма, форма за вход и излизане и страница за обработка на формуляри - всеки от които свързва JSP изглед към сървлет контролер, така че MVC разделянето да остане видимо за начинаещи.
Тези разработени примери показват как да се разработват примерни програми с JSP и как да се имплементира MVC архитектура около тях. Изградени са три модула по ред:
- Форма за регистрация
- Форма за влизане и излизане
- JSP формуляр
Как да създадете регистрационен формуляр в JSP
Във формуляр за регистрация имаме формуляр за попълване на всички данни, които включват име, потребителско име, парола, адрес, телефонен номер и др.
Този формуляр ни помага да се регистрираме в приложението. Той събира всички наши данни и ги съхранява в база данни или кеш.
В този пример ще вземем „Guru „Регистрационна форма“, която има следните полета:
- Име
- Фамилия
- Потребител
- Парола
- Адрес
- Номер за контакт
След попълване на всички тези данни имаме бутон за изпращане; при щракване върху този бутон всички данни се изпращат към сървлета.
Пример 1: Register_1.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!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=ISO-8859-1"> <title>Guru Registration Form</title> </head> <body> <h1>Guru Register Form</h1> <form action="guru_register" method="post"> <table style="with: 50%"> <tr> <td>First Name</td> <td><input type="text" name="first_name" /></td> </tr> <tr> <td>Last Name</td> <td><input type="text" name="last_name" /></td> </tr> <tr> <td>UserName</td> <td><input type="text" name="username" /></td> </tr> <tr> <td>Password</td> <td><input type="password" name="password" /></td> </tr> <tr> <td>Address</td> <td><input type="text" name="address" /></td> </tr> <tr> <td>Contact No</td> <td><input type="text" name="contact" /></td> </tr></table> <input type="submit" value="Submit" /></form> </body> </html>
Обяснение на кода:
Code Ред 11: Тук вземаме формуляр, който има действие, т.е. сървлетът, към който ще бъде подадена заявката, а името на сървлета е guru_register.java. Заявката ще бъде обработена чрез POST метода.
Code Ред 14-16: Тук приемаме входния тип като текст, а името е собствено_име.
Code Ред 18-20: Тук приемаме входния тип като текст, а името е last_name.
Code Ред 22-24: Тук приемаме входния тип като текст, а името е потребителско име.
Code Ред 26-28: Тук приемаме типа на въвеждане като парола (това скрива паролата, докато се въвежда) и името като парола.
Code Ред 30-32: Тук приемаме входния тип като текст и името като адрес.
Code Ред 34-36: Тук приемаме типа на въвеждане като текст и името като контакт.
Code Ред 37: Тук вземаме бутон от тип submit, чиято стойност също е Submit. При щракване върху този бутон действието се прехвърля към съответния servlet guru_register, където всички стойности на параметрите се предават в заявката.
Забележка: атрибутът на таблицата в Code Ред 12 гласи style="with: 50%"Правилното CSS свойство е width, така че списъкът се възпроизвежда точно както е публикуван, но таблицата няма да бъде оразмерена, докато тази печатна грешка не бъде поправена във вашето собствено копие.
Пример 2: Guru_register.java
package demotest; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class guru_register */ public class guru_register extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String first_name = request.getParameter("first_name"); String last_name = request.getParameter("last_name"); String username = request.getParameter("username"); String password = request.getParameter("password"); String address = request.getParameter("address"); String contact = request.getParameter("contact"); if(first_name.isEmpty() || last_name.isEmpty() || username.isEmpty() || password.isEmpty() || address.isEmpty() || contact.isEmpty()) { RequestDispatcher req = request.getRequestDispatcher("register_1.jsp"); req.include(request, response); } else { RequestDispatcher req = request.getRequestDispatcher("register_2.jsp"); req.forward(request, response); } } }
Обяснение на кода:
Code Ред 14: Тук дефинираме сървлета guru_register, който разширява HttpServlet.
Code Ред 18: Това е методът doPost(), който се извиква, когато укажем POST като атрибут на метода във формата JSP по-горе.
Code Ред 20-25: Тук извличаме стойностите от заявката, т.е. собствено_име, фамилия, потребителско_име, парола, адрес и контакт, използвайки request.getParameter.
Code Ред 27-32: Тук използваме условие if, при което проверяваме дали някой от параметрите, извлечени от заявката, е празен. Ако някой параметър е празен, контролът въвежда това условие ( first_name.isEmpty() || last_name.isEmpty() || username.isEmpty() || password.isEmpty() || address.isEmpty() || contact.isEmpty()) и ние извличаме обект RequestDispatcher от обекта request, който изпраща заявката обратно към register_1.jsp. Тук включваме и обектите request и response.
Code Ред 33-37: Този клон се изпълнява, когато никой от параметрите не е празен. Извличаме обект RequestDispatcher от обекта request, който препраща заявката към register_2.jsp. Тук препращаме обектите request и response.
Разликата между двата клона е важна: include() изпълнява register_1.jsp и връща контрола на сървлета, докато forward() предава заявката към register_2.jsp и не се връща.
Пример 3: Register_2.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!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=ISO-8859-1"> <title>Guru Success Page</title> </head> <body> <a><b>Welcome User!!!!</b></a> </body> </html>
Обяснение на кода:
Code Ред 10: Тук показваме приветственото съобщение. Този JSP се извиква, когато всички параметри са попълнени.
Когато изпълните горния код, получавате следния изход.
Изход:
Страницата за регистрация показва шестте обозначени полета с един бутон „Изпращане“, както е показано по-долу.
След като всяко поле е попълнено и е щракнато върху „Изпрати“, guru_register препраща към register_2.jsp и се появява страницата за успех.
Когато кликнем върху register_1.jsp, получаваме формуляр с име, фамилия, потребителско име, парола, адрес и контакт. След като всички данни са попълнени и бутонът за изпращане е кликнат, получаваме съобщението „Добре дошъл, потребителю“.
Как да създадете формуляр за вход и излизане в JSP
Подобно на регистрационната форма, сега ще изградим форма за вход и излизане.
В този пример сме взели формуляр за вход с две полета, „потребителско име“ и „парола“, и бутон за изпращане.
Когато кликнем върху бутона за изпращане, получаваме приветствено съобщение с бутон за излизане.
Когато кликнем върху бутона за излизане, се връщаме към формата за вход.
Пример 1: Register_3.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!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=ISO-8859-1"> <title>Guru Login Form</title> </head> <body> <form action="guru_login" method="post"> <table style="with: 50%"> <tr> <td>UserName</td> <td><input type="text" name="username" /></td> </tr> <tr> <td>Password</td> <td><input type="password" name="password" /></td> </tr> </table> <input type="submit" value="Login" /></form> </body> </html>
Обяснение на кода:
Code Ред 10: Тук вземаме формуляр, чието действие е сървлетът guru_login.java. Методът, чрез който се предават данните, е POST.
Code Ред 13-16: Тук приемаме поле за въвеждане „потребителско име“, което е от типа текст.
Code Ред 17-20: Тук приемаме поле за въвеждане „парола“, което е от типа password.
Code Ред 22: Тук вземаме бутон „изпращане“ със стойност „Вход“. При щракване върху него, контролът преминава към сървлета guru_login, където и двете полета се прочитат с помощта на обекта request.
Пример 2: Guru_login.java (сервлет)
package demotest; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class guru_login */ public class guru_login extends HttpServlet { public guru_login() { super(); // TODO Auto-generated constructor stub } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String username = request.getParameter("username"); String password = request.getParameter("password"); if(username.isEmpty() || password.isEmpty() ) { RequestDispatcher req = request.getRequestDispatcher("register_3.jsp"); req.include(request, response); } else { RequestDispatcher req = request.getRequestDispatcher("register_4.jsp"); req.forward(request, response); } } }
Обяснение на кода:
Code Ред 5-9: Тук импортираме необходимите класове в кода.
Code Ред 14: Тук декларираме сървлета guru_login, който разширява HttpServlet.
Code Ред 21: Тук използваме метода doPost(), защото формулярът използва метода POST.
Code Ред 23-24: Тук четем параметри, използвайки обекта на заявката, т.е. потребителско име и парола.
Code Ред 25-29: По този начин използваме условие „if“, което проверява дали потребителското име и паролата са празни. Ако някое от тях е празно, получаваме обект RequestDispatcher, който изпраща контрол обратно към register_3.jsp с обектите request и response.
Code Ред 30-34: Този клон се изпълнява, ако и двата не са празни; след това препраща заявката към register_4.jsp с обектите request и response.
Пример 3: Register_4.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!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=ISO-8859-1"> <title>Guru Logged In</title> </head> <body> <table style="with: 50%"> <tr><td> <% String username = request.getParameter("username"); %> <a>Welcome <% out.println(username); %> User!!!! You have logged in.</a></td></tr> <tr></tr><tr><td></td><td></td><td><a href="register_3.jsp"><b>Logout</b></a></td></tr> </table> </body> </html>
Обяснение на кода:
Code Ред 12: Тук получаваме параметъра „потребителско_име“ от обекта на заявката в обекта String username. Това работи, защото forward() запазва оригиналната заявка и следователно нейните параметри непокътнати.
Code Ред 13: Тук имаме приветствено съобщение с потребителското име.
Code Ред 14: Тук имаме линка за излизане, който връща потребителя обратно към register_3.jsp.
Когато изпълните горния код, получавате следния изход.
Изход:
Отварянето на register_3.jsp показва двете полета за идентификационни данни и бутон за вход.
След като щракнете върху бутона „Вход“, ще получите съобщението по-долу, заедно с линк за излизане.
Щракването върху връзката „Изход“ ви връща към страницата за вход, показана тук.
Забележка: Този пример сравнява само празни стойности, така че всяко потребителско име, което не е празно, се приема. Входът в производствения режим трябва да проверява идентификационните данни спрямо хранилище и да съхранява паролите хеширани, никога в обикновен текст.
Обработка на JSP формуляр с помощта на getParameter()
Формулярите са често срещан метод за събиране на входни данни при уеб обработка. Трябва да изпратим информация до уеб сървъра и след това да прочетем тази информация обратно от страната на сървъра.
Има два често използвани метода за изпращане и връщане на информация към уеб сървъра.
Метод GET:
- Това е методът по подразбиране за предаване на информация от браузър към уеб сървър.
- Изпраща кодираната информация, добавена към страницата URL, разделени със символ ?.
- Също така има ограничение за размер; класическото ръководство е приблизително 1024 знака на заявка, въпреки че реалният таван се определя от браузъра и сървъра, а не от HTTP спецификацията.
- Трябва да избягваме изпращането на пароли и чувствителна информация чрез метода GET.
Метод POST:
- POST е по-надеждният метод за изпращане на информация до сървъра.
- Изпраща информацията като отделно тяло на съобщението, а не в адресната лента.
- Тъй като стойностите никога не се появяват след ? в URL, те не се съхраняват в историята на браузъра или в регистрационните файлове за достъп до сървъра.
- Обикновено се използва за изпращане на чувствителна информация.
JSP обработва данни от формуляри, използвайки следните методи:
- getParameter(): използва се за получаване на стойността на един параметър на формуляр.
- getParameterValues(): използва се за връщане на множество стойности на параметър.
- getParameterNames(): използва се за получаване на имената на всички параметри.
- getInputStream(): използва се за четене на двоичните данни, изпратени от клиента.
Пример:
В този пример сме взели формуляр с две полета, „потребителско име“ и „парола“, и бутон за изпращане.
Action_form.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!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=ISO-8859-1"> <title>Guru Form</title> </head> <body> <form action="action_form_process.jsp" method="GET"> UserName: <input type="text" name="username"> <br /> Password: <input type="text" name="password" /> <input type="submit" value="Submit" /> </form> </body> </html>
Action_form_process.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!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=ISO-8859-1"> <title>Insert title here</title> </head> <body> <h1>Form Processing</h1> <p><b>Welcome User:</b> <%= request.getParameter("username")%> </p> </body> </html>
Обяснение на кода: Action_form.jsp
Code Ред 10: Тук сме дефинирали форма, чието действие се обработва от друга JSPВ атрибута action добавяме JSP-то, към което формулярът трябва да бъде изпратен чрез GET метода.
Тук използваме метода GET, за да предадем информацията, т.е. потребителско име и парола.
Code Ред 11-14: Тук приемаме полета като потребителско име и парола, които са текстови полета, и получаваме входните данни от потребителя.
Този вход може да бъде извлечен с помощта на метода getParameter. Също така имаме бутон за изпращане, който предава стойностите на полетата в action_form_process.jsp.
Action_form_process.jsp
Code Ред 14: Тук получаваме стойностите на входните полета от action_form.jsp, използвайки метода getParameter на обекта на заявката.
Когато изпълним горния код, получаваме следния изход.
Изход:
Action_form.jsp първо рендира формата с две полета, показана по-долу.
След изпращане, action_form_process.jsp повтаря прочетеното потребителско име с getParameter().
Когато изпълним action_form.jsp, получаваме формуляр с две полета, потребителско име и парола, и бутон за изпращане. След въвеждане на потребителско име и парола, кликваме върху „изпращане“ и заявката се обработва от следващата страница, която връща страницата за обработка на формуляри с приветствено съобщение.
Бележка към версията: И двата сервлета по-горе импортират javax.servlet, което е правилно за Tomcat 9 и по-стари версии. Jakarta EE 9 преименува API, така че на Tomcat 10 или по-нова версия всеки импорт на javax.servlet става jakarta.servlet или приложението трябва да бъде конвертирано с инструмента за миграция на Apache Tomcat за Jakarta EE.







