I have a homework which is a basic exercise of creating rock paper scissors with jsp and servlets.
On the index.html, I created a form to receive "Rock", "Paper" or "Scissors".
This goes into a Servlet which counts turns, defeats, wins, and ties.
Once you submit your move be it rock, paper or scissor, you will be directed to a JSP that will show a scoreboard and the server's move but on this JSP there's a form, one is a link to go back to the index.html and the turn, wins, defeats counter keeps on counting and then there's a button which is a reset button that should turn all values into 0, this is a different form on the jsp with a different action. My teacher suggested making two servlets but said that if I can make it with one it would be ok but that making two servlets would be easier.
Summary: How can I reset the variables on one servlet from another one?
index.html:
<html>
<head>
<title>Actividad 4</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h1>Rock Paper Scissors Game</h1>
<p>Choose your attack: </p>
<form method="post" action="move.do">
<select name="attack">
<option value="1">Rock</option>
<option value="2">Scissors</option>
<option value="3">Paper</option>
</select>
<button type="submit">Attack!</button>
</form>
</body>
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
30
Servlet Act 4
Servlet
Servlet Act 4
/move.do
<servlet>
<servlet-name>Servlet2 Act 4</servlet-name>
<servlet-class>Servlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet2 Act 4</servlet-name>
<url-pattern>/reset.do</url-pattern>
<init-param>
<param-name>turn</param-name>
<param-value>1</param-value>
</init-param>
</servlet-mapping>
First servlet:
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* #author maple
*/
#WebServlet(name = "Servlet Act 4", urlPatterns = {"/Servlet"})
public class Servlet extends HttpServlet {
static int turn = 1;
static int wins = 0;
static int defeat = 0;
static int ties = 0;
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet Servlet at " + request.getContextPath() + "</h1>");
out.println("</body>");
out.println("</html>");
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
#Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
#Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int attack = Integer.parseInt(request.getParameter("attack"));
int move = randMove();
String counter = "";
String decision = "";
//Checa el metodo randMove(), obtengo un numero aleatorio entre 1 a 3 que lo convierto en
//Rock = Piedra
//Scissor = Tijera
//Paper = Papel
switch(move) {
case 1: counter = "Rock";
break;
case 2: counter = "Scissor";
break;
case 3: counter = "Paper";
break;
}
//Este if comparo que si los dos son iguales, el piedra papel o tijera del servidor
//Y el piedra papel tijera del jugador para determinar el ganador.
if(attack == move) {
ties++;
decision = "It's a tie!";
} else if (attack == 1) {
switch(move){
case 2: decision = "Player wins!";
wins++;
break;
case 3: decision = "Server wins!";
defeat++;
break;
}
} else if (attack == 2) {
switch(move){
case 1: decision = "Server wins!";
defeat++;
break;
case 3: decision = "Player wins!";
wins++;
break;
}
} else if (attack == 3) {
switch(move) {
case 1: decision = "Player wins!";
wins++;
break;
case 2: decision = "Server wins!";
defeat++;
break;
}
}
//Esto es para mantener cuenta que turno es, que movimiento hizo, quien gano, cuantas veces
//gano quien y perdio quien.
request.setAttribute("turn", turn);
request.setAttribute("counter", counter);
request.setAttribute("winner", decision);
request.setAttribute("ties", ties);
request.setAttribute("wins", wins);
request.setAttribute("defeat", defeat);
if(turn < 5) {
turn++;
} else {
turn = 1;
ties = 0;
wins = 0;
defeat = 0;
}
RequestDispatcher view =
request.getRequestDispatcher("Scoreboard.jsp");
view.forward(request, response);
}
/**
* Returns a short description of the servlet.
*
* #return a String containing servlet description
*/
#Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
public static int randMove() {
int min = 1;
int max = 3;
Random rand = new Random();
int randomNum = rand.nextInt((max - min) + 1) + min;
return randomNum;
}
}
The JSP:
<%#page contentType="text/html" pageEncoding="UTF-8"%>
<%#page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Scoreboard</title>
</head>
<body>
<h1>Server: <%=request.getAttribute("counter")%></h1>
<h3>Round <%=request.getAttribute("turn")%> of 5</h3>
<p><%=request.getAttribute("winner")%></p>
<table>
<thead>
<tr>
<td></td>
<td>Win</td>
<td>Defeat</td>
<td>Tie</td>
</tr>
</thead>
<tbody>
<tr>
<td>Player</td>
<td><%=request.getAttribute("wins")%></td>
<td><%=request.getAttribute("defeat")%></td>
<td><%=request.getAttribute("ties")%></td>
</tr>
<tr>
<td>Server</td>
<td><%=request.getAttribute("defeat")%></td>
<td><%=request.getAttribute("wins")%></td>
<td><%=request.getAttribute("ties")%></td>
</tr>
</tbody>
</table>
<form method="get" action="reset.do">
<a type="button" href="index.html">Next round</button></a>
<button type="submit">Reset</button>
</form>
</body>
</html>
The variable turn, wins, defeat and ties are all static, so if you want change then in another servlet, just declare them as public, then you and modify them with code like
Servlet.turn = 0
but this is not correct way to maintenance the state at servlet, if you state across requests, you should save them to session with code like :
request.getSession().setAttribute("turn",0);
You can reset your variable in the doGet method of your servlet before you back to index.html page. Servlet attributes is good choice in your case. Servlet attributes defines three scope such as application Scope, session Scope, request Scope. However, you can use application Scope, session Scope to resolve your issue like below:
Application scope (application scope starts since a web application is started and ends since it is shutdown):
request.getServletContext().setAttribute("turn", "0");
Session scope (session scope starts when a client establishes connection with web application till client browser is closed):
session.setAttribute("turn", "0");
You can refer to the post Servlet Request Session Application Scope Attributes to see more detail about Servlet attributes.
Hope this help!
Related
I have created a registration form. And I don't know why now it doesn't work anymore.
Now I receive a 404 error:
Type Status Report
Message /HotelReservation/Registration
Description The origin server did not find a current representation
for the target resource or is not willing to disclose that one exists.
This is my
Registration.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package hotel;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* #author OOPs
*/
public class Registration extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String s1 = request.getParameter("ename");
String s2 = request.getParameter("nname");
String s3 = request.getParameter("pname");
String s4 = request.getParameter("usid");
String s5 = request.getParameter("gm");
PrintWriter out = response.getWriter();
try {
/* TODO output your page here. You may use following sample code.
out.println(s1);
out.println(s2);
out.println(s3);
out.println(s4);
out.println(s5);*/
// out.println(s1);
//concetivity...............
Class.forName("com.mysql.jdbc.Driver");
out.println("driver loaded");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/HotelReservation","root" ,"123456789");
out.println("Connect");
Statement st = con.createStatement();
out.println("conncetion successfull");
st.executeUpdate("insert into register (email,name,pass) values ('"+s1+"','"+s2+"','"+s3+"')");
out.println("<h1> Register sucsefulltttt </h1>");
response.sendRedirect("thankyou.jsp");
}catch(Exception e){
out.println("nahiiiiiiiiiiiii" +e);
}
finally {
out.close();
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
#Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
#Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* #return a String containing servlet description
*/
#Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
And this is my
registration.jsp
<%#page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Registration</title>
<style>
#import url( css/default.css);
</style>
</head>
<body>
<div id="container">
<div id="nav">
Home
Prenotazione
Camere
Login
Registrazione
</div>
<script>
function validate()
{
if(document.getElementById("ename").value=="")
{
alert("blank");
return false;
}
return true;
}
</script>
<h2>Registrazione</h2>
<form action="Registration" method="post" onsubmit="return validate();">
<div class="gender">
<label id="icon" for="name"><i class="icon-envelope "></i></label>
<input type="text" name="ename" id="ename" placeholder="Email" required/>
<br>
<br>
<label id="icon" for="name"><i class="icon-user"></i></label>
<input type="text" name="nname" id="nname" placeholder="Name" required/>
<br>
<br>
<label id="icon" for="name"><i class="icon-shield"></i></label>
<input type="password" name="pname" id="pname" placeholder="Password" required/>
<br>
<input class="button" type="submit" value="Sign UP" name="b1"> </input>
<input class="button" type=button onClick="location.href='login.jsp'" value="Login" name="b" > </input>
</form>
<div id="footer">
<h4>Hotel Reservation </h4>
Viale Marco Polo, 81 Roma
tel: +39 01 0000000 | info#hotelreservation.it
P.IVA 000000001
</div>
</div>
</body>
</html>
How can I solve it in your opinion? Thanks
EDIT:
This is my :
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Hotelbooking</display-name>
<servlet>
<servlet-name>Hotelbooking</servlet-name>
<servlet-class>hotel.Hotelbooking</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hotelbooking</servlet-name>
<url-pattern>/hotelbooking</url-pattern>
</servlet-mapping>
<display-name>Login</display-name>
<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>hotel.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<display-name>Logout</display-name>
<servlet>
<servlet-name>Logout</servlet-name>
<servlet-class>hotel.Logout</servlet-class>
</servlet>
<display-name>Registration</display-name>
<servlet>
<servlet-name>Registration</servlet-name>
<servlet-class>hotel.Registration</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Registration</servlet-name>
<url-pattern>/registration</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>home.html</welcome-file>
</welcome-file-list>
</web-app>
HTTP Status 404 – Not Found
Type Status Report
Message /HotelReservation/Registration
Description The origin server did not find a current representation
for the target resource or is not willing to disclose that one exists.
myProject
Write your doGet method to forward at registration.jsp like this
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getRequestDispatcher("/registration.jsp").forward(request, response);
}
Another thing in error message map showing /HotelReservation/Registration
but in web.xml file servlet mapping is /registration. So hit correct url
I'm working on one web app. I have problem when I want to test my servlet.
When I run my servlet error pops up -
HTTP Status 404 - Not Found.
I search another similar problems but i can't find solution. I think that there is no connection between my servlet and jsp file. Below my code:
GetServletController
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package Servlets;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* #author Adam
*/
public class GetServletController extends HttpServlet {
// private HandsDBUtil handsDBUtil;
//
// private ServletConfig config = getServletConfig();
// private ServletContext context = config.getServletContext();
//
// private String user = null;
// private String pass = null;
// private String c_name = null;
// private String url = null;
// #Override
// public void init() throws ServletException {
// super.init();
// Enumeration enumeration = context.getInitParameterNames();
// while (enumeration.hasMoreElements()) {
// String name = (String) enumeration.nextElement();
// switch (name) {
// case "url":
// url = context.getInitParameter(name);
// break;
// case "pass":
// pass = context.getInitParameter(name);
// break;
// case "user":
// user = context.getInitParameter(name);
// break;
// case "c_name":
// c_name = context.getInitParameter(name);
// break;
// }
// }
//
// handsDBUtil = new HandsDBUtil(user, pass, c_name, url);
//
// }
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/plain; charset=ISO-8859-2");
PrintWriter out = response.getWriter();
out.println("WOW");
HandsDBUtil handsDBUtil;
ServletConfig config = getServletConfig();
ServletContext context = config.getServletContext();
String user = null;
String pass = null;
String c_name = null;
String url = null;
Enumeration enumeration = context.getInitParameterNames();
while (enumeration.hasMoreElements()) {
String name = (String) enumeration.nextElement();
switch (name) {
case "url":
url = context.getInitParameter(name);
break;
case "pass":
pass = context.getInitParameter(name);
break;
case "user":
user = context.getInitParameter(name);
break;
case "c_name":
c_name = context.getInitParameter(name);
break;
}
}
handsDBUtil = new HandsDBUtil(user, pass, c_name, url);
out.println("wow");
out.println(user);
try {
//listHands(request, response);
List<Hand> hands = handsDBUtil.getHands();
System.out.println(hands);
request.setAttribute("HAND_LIST", hands);
RequestDispatcher dispatcher = request.getRequestDispatcher("getHands");
dispatcher.forward(request, response);
} catch (Exception ex) {
throw new ServletException(ex);
}
}
// private void listHands(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, Exception {
//
// List<Hand> hands = handsDBUtil.getHands();
//
// request.setAttribute("HAND_LIST", hands);
//
// RequestDispatcher dispatcher = request.getRequestDispatcher("getHands");
// dispatcher.forward(request, response);
//
// }
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
#Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
#Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* #return a String containing servlet description
*/
#Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
jsp
<%#page import="java.util.*, Servlets.GetServletController, Servlets.Hand" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Poker Hands List</title>
</head>
<form action="GetServletController"/>
<%
List<Hand> theHands = (List<Hand>) request.getAttribute("HAND_LIST");
%>
<body>
<%= theHands %>
<div id="wrapper">
<div id="header">
<h2>
Poker Hands List
</h2>
</div>
</div>
<div id="container">
<div id="content">
</div>
</div>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>url</param-name>
<param-value>jdbc:derby://localhost:1527/lab</param-value>
</context-param>
<context-param>
<param-name>c_name</param-name>
<param-value>org.apache.derby.jdbc.ClientDriver</param-value>
</context-param>
<context-param>
<param-name>user</param-name>
<param-value>lab</param-value>
</context-param>
<context-param>
<param-name>pass</param-name>
<param-value>lab</param-value>
</context-param>
<servlet>
<servlet-name>ServletTest</servlet-name>
<servlet-class>Servlets.ServletTest</servlet-class>
</servlet>
<servlet>
<servlet-name>GetServletController</servlet-name>
<servlet-class>Servlets.GetServletController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletTest</servlet-name>
<url-pattern>/ServletTest</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>GetServletController</servlet-name>
<url-pattern>/GetServletController</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>getHands.jsp</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>mainMenu.jsp</welcome-file>
</welcome-file-list>
</web-app>
Request dispatcher is used to dispatch request to any resources,such as HTML, Image, JSP, Servlet on the server. If you want to forward your request to a jsp you need to define like below
RequestDispatcher dispatcher = request.getRequestDispatcher("getHands.jsp");
In your case you are forwarding the request to a servlet.
RequestDispatcher dispatcher = request.getRequestDispatcher("getHands");
There is no such servlet defined in your web.xml
That's why you are getting 404 error
I'm starting off in NetBeans, and implementing a form which, when you press the "submit" button, performs validation and tells you if the data entered is correct. I haven't gotten to the validation part yet, for the moment all I'm trying to do is, when the "submit" button is clicked, a message pops up. I'm having trouble here, I have a feeling its a quick simple fix but I'm not finding anything on message boards or documentation.
EDIT - Thanks guys! was missing the "form" tag. I figured it would be simple, thanks again for your help everyone!
Here's my index.html file:
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
<head>
<title>Client Information</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div><h1>Client Information</h1><table border="1">
<tbody>
<tr>
<td>First Name</td>
<td><input type="text" name="FirstName" value="" size="50" /></td>
<td>Surname</td>
<td><input type="text" name="Surname" value="" size="50"/></td>
</tr>
<tr>
<td>Age</td>
<td><input type="number" name="Age" value="" min="0" max="120"/></td>
<td>Gender</td>
<td><input type="text" name="Gender" value="" size="1" maxlength="1"/></td>
</tr>
</tbody>
</table>
<input type="submit" value="Submit" name="validation" />
</div>
</body>
</html>
And here is the ClientInformationServlet.java file, most important is the processRequest method, and if (request.getParameter("validation")!= null) line is where I am trying to have the action take place.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package clientInformation;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* #author nicolasdubus
*/
#WebServlet(name = "ClientInformationServlet", urlPatterns = {"/clientinformationservlet"})
public class ClientInformationServlet extends HttpServlet {
/*
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Client Information</title>");
out.println("</head>");
out.println("<body>");
String sfirst = request.getParameter("FirstName");
String ssecond = request.getParameter("SurName");
String sAge = request.getParameter("Age");
String sGender = request.getParameter("Gender");
try {
Integer age = Integer.parseInt(sAge);
if (request.getParameter("validation") != null) {
System.out.println("<h1>Client information is valid</h1>");
out.println("<h1>Client</h1>");
System.exit(0);
}
} catch (IllegalArgumentException e) {
out.println("<h1>Client information is invalid, please verify entries</h1>");
}
out.println("<body>");
out.println("</html");
/* */
out.close();
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
#Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
#Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* #return a String containing servlet description
*/
#Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
The HTML specification states
The elements used to create controls generally appear inside a FORM
element, but may also appear outside of a FORM element declaration
when they are used to build user interfaces. This is discussed in the
section on intrinsic events. Note that controls outside a form cannot
be successful controls.
A <input> element for submit is a control. Therefore, if it appears outside a <form>, as you currently have it, clicking it won't do anything.
Nest your <input> elements (and whatever other display elements) within a <form> which specifies the action and method to use to submit your data.
You should add
<body><form action="/clientinformationservlet" method="POST">
....
</form></body>
inside the body.
If you want to submit then you should have a <form> in your htmml
e.g.
<form name="input" action="/clientinformationservlet" method="POST">
// your inputs
</form>
I am trying to enter a new user into my database with servlets.
I have a problem when I click submit button i registraion form. I get "The requested resource is not available." error. I cant figure it out.
Can you guys help me?
register.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sign Up</title>
</head>
<body>
<h1>Enter your information</h1>
<form method = "POST" action="RegisterServlet">
Username <br/>
<input type="text" name="username"/><br/>
Password <br/>
<input type="password" name="password"/><br/>
Email <br/>
<input type="text" name="email"/><br/>
First name <br/>
<input type="text" name="fname"/><br/>
Last name <br/>
<input type="text" name="lname"/><br/>
<input type="submit" value="Confirm" />
</form>
</body>
RegisterServlet doPost() method
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
#WebServlet(name = "RegisterServlet", urlPatterns = {"/RegisterServlet"})
public class RegisterServlet extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
#Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
/**
* Handles the HTTP <code>POST</code> method.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
#Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
String password = request.getParameter("password");
String email = request.getParameter("email");
String fname = request.getParameter("fname");
String lname = request.getParameter("lname");
String admin = "no";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mobmelbaza", "root", "");
String query = "insert into korisnici(user, pass, email, ime, prezime, admin)"
+ "values ('" + username + "','" + password + "','" + email + "','" + fname + "','" + lname + "', '" + admin + "')";
Statement st = con.createStatement();
boolean done = st.execute(query);
if (done == true) {
out.print("Sign Up sucessfull");
} else {
out.print("Failed");
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* Returns a short description of the servlet.
*
* #return a String containing servlet description
*/
#Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>servlet.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/RegisterServlet</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
As you said you are using annotation better remove the mapping from the web.xml
You can either have annotation based mapping like
#WebServlet(name = "RegisterServlet", urlPatterns = {"/RegisterServlet"})
or
<servlet>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>servlet.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/RegisterServlet</url-pattern>
</servlet-mapping>
you cannot have both at once
I am having a problem with request attributes in my jsp, I am using the mvc pattern and setting a request attribute and forwarding to a jsp from the servlet. The application is a banking application, the goal is to use the customer id to get the customer by customer id pass it to the Account class to collect all of the accounts of the user. I have this problem solved I can get the account information and process it without any issue. The problem I am having is when I close the page and run again from the beginning I find that when I get to the table it is still putting in the information from the previous request as well as the new information that I am requesting. Like So:
()
My code is as follows for the servlet that directs me to the jsp and the jsp that I use the information into.
AccountServlet.java:
package com.ChattBank.controller;
import com.ChattBank.business.Account;
import com.ChattBank.business.Accounts;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
*
* #author AARONS
*/
public class AccountServlet extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet AccountServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet AccountServlet at " + request.getContextPath() + "</h1>");
out.println("</body>");
out.println("</html>");
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
#Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//HttpSession session = request.getSession();
String action = request.getParameter("action");
if (action == null) {
request.getRequestDispatcher("/Welcome.jsp").forward(request, response);
} else if (action.equals("view")) {
Accounts acct = new Accounts();
ArrayList<Account> list = new ArrayList();
try {
acct.setCustAccounts(request.getParameter("id"));
list.addAll(acct.getCustAccounts());
System.out.println(request.getParameter("id"));
} catch (SQLException ex) {
Logger.getLogger(Accounts.class.getName()).log(Level.SEVERE, null, ex);
}
request.setAttribute("acctList", list);
request.getServletContext().getRequestDispatcher("/accounts.jsp").forward(request, response);
}
}
/**
* Handles the HTTP <code>POST</code> method.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
#Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action = request.getParameter("action");
String custId = request.getParameter("custID");
if (action == null) {
request.getRequestDispatcher("/Welcome.jsp").forward(request, response);
}
}
/**
* Returns a short description of the servlet.
*
* #return a String containing servlet description
*/
#Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
accounts.jsp:
<%--
Document : accounts
Created on : Jun 25, 2014, 12:24:38 AM
Author : Richard Davy
--%>
<%#page import="java.util.ArrayList"%>
<%#page import="com.ChattBank.business.Account"%>
<%#page import="com.ChattBank.business.Accounts"%>
<%#page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Your Accounts</title>
</head>
<body>
<%
ArrayList<Account> list = new ArrayList();
list.addAll((ArrayList)request.getAttribute("acctList"));
for (Account custAccount : list) {
System.out.println("From JSP: " + custAccount.getCustId() + " " + custAccount.getAcctNo() + " " + custAccount.getAcctType() + " " + custAccount.getBalance());
System.out.println("Getting Object From Section");
}
%>
<h1>You Made It Here!</h1>
<table border="1" width="2" cellspacing="5" cellpadding="2">
<thead>
<tr>
<th colspan="10">Your Chatt Accounts</th>
</tr>
</thead>
<tbody>
<% for (int i = 0; i < list.size(); i++){ %>
<tr>
<td colspan="2">Account: </td>
<td colspan="2"><%= list.get(i).getCustId() %></td>
<td colspan="2"><%= list.get(i).getAcctNo() %></td>
<td colspan="2"><%= list.get(i).getAcctType() %></td>
<td colspan="2"><%= list.get(i).getBalance() %></td>
</tr>
<% } %>
<% list.clear(); %>
</tbody>
</table>
<p>Thank you for your business!</p>
</body>
</html>
I am not really sure what is going on I started with session attributes and thought that was my issue, so I turned to using request attributes. But I am still facing the same issue. I was under the impression that the request attribute only lasted per that request but it seems that the information is still being carried through. Any suggestions?
The funny thing about this issue is that it wasn't anything to do with the request attribute variables. Since I was instantiating a list of objects in a class that list of objects was persisting and just being added to. I think this is mostly because I was using an ArrayList which is able to be appended to. Instead of re-writing the entire class to figure out some work around I included a try{}finally{} statement like so:
package com.ChattBank.controller;
import com.ChattBank.business.Account;
import com.ChattBank.business.Accounts;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
*
* #author AARONS
*/
public class AccountServlet extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet AccountServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet AccountServlet at " + request.getContextPath() + "</h1>");
out.println("</body>");
out.println("</html>");
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
#Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//HttpSession session = request.getSession();
String action = request.getParameter("action");
if (action == null) {
request.getRequestDispatcher("/Welcome.jsp").forward(request, response);
} else if (action.equals("view")) {
Accounts acct = new Accounts();
ArrayList<Account> list = new ArrayList();
try {
acct.setCustAccounts(request.getParameter("id"));
list.addAll(acct.getCustAccounts());
System.out.println(request.getParameter("id"));
//This was moved into the try block itself
request.setAttribute("acctList", list);
request.getServletContext().getRequestDispatcher("/accounts.jsp").forward(request, response);
} catch (SQLException ex) {
Logger.getLogger(Accounts.class.getName()).log(Level.SEVERE, null, ex);
//This is the added finally statement with the clearAccounts method
} finally {
acct.clearAccounts();
}
}
}
/**
* Handles the HTTP <code>POST</code> method.
*
* #param request servlet request
* #param response servlet response
* #throws ServletException if a servlet-specific error occurs
* #throws IOException if an I/O error occurs
*/
#Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action = request.getParameter("action");
String custId = request.getParameter("custID");
if (action == null) {
request.getRequestDispatcher("/Welcome.jsp").forward(request, response);
}
}
/**
* Returns a short description of the servlet.
*
* #return a String containing servlet description
*/
#Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
The clear accounts method in the Accounts class was very very simple:
/**
* Clears the current array list of accounts
*/
public void clearAccounts(){
this.custAccounts.clear();
}