So this is my project:
Where Registro.java is:
package Ejer2;
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;
import javax.servlet.http.HttpSession;
import javax.servlet.*;
#SuppressWarnings("deprecation")
#WebServlet(urlPatterns="/Registro")
public class Registro extends HttpServlet implements SingleThreadModel{
private static final long serialVersionUID = 1L;
public Registro() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
HttpSession session=req.getSession(true);
Usuario miuser=(Usuario)session.getValue(session.getId());
if(miuser==null){
miuser=new Usuario(req.getParameter("user"),req.getParameter("password"));
session.putValue(session.getId(),miuser);
}
res.setContentType("text/html");
String user=req.getParameter("user");
//String pass = req.getParameter("pass");
PrintWriter toClient = res.getWriter();
toClient.println("<html>");
toClient.println("<title>REGISTRO REALIZADO</title>");
toClient.println("Usuario "+user+" registrado con exito");
toClient.println("</html>");
toClient.close();
}
}
And registro.html is:
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Registro</title>
</head>
<body>
<form action="/Ejer2/Registro" method="POST">
<input type=hidden name=registro value=resultadoRegistro>
<BR><BR>Username: <input type=text name=user>
<BR><BR>Password: <input type=password name=pass>
<BR><BR><input type=submit value="Enviar"><input type=reset>
</form>
</body>
</html>
When I run registro.html everything goes as expected:
But when I enter an username and a password it doesnt work:
4
It seems as if it doesnt find the Registro.java. I have tried changing the action="/Ejer2/Registro" to many other things like just /Registro orthe full http://... but still doesnt work.
This is my web.xml:
What can be the problem?
I guess you are missing servlet mapping in your web.xml. You need to register your servlet in web.xml (open web.xml file and at the bottom change tab to see actual source code not designer) add following code and you should be good to go
<servlet>
<servlet-name>RegistroServlet</servlet-name>
<servlet-class>Ejer2.Registro</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegistroServlet</servlet-name>
<url-pattern>/Registro</url-pattern>
</servlet-mapping>
I also suggest you to step back and start with basic java before attemping to write web application. You have several newbie issueses with your code:
1) name of packages should start with lower case !
2) also url mapping should be with lower case like this /registro
in your form action change url to match urlmapping. In your case it's
form action="/Registro" ...
Ejer2 is name of package it has nothing to do with url mapping. Hope it helps to resolve your problem
Related
This question already has answers here:
Servlet returns "HTTP Status 404 The requested resource (/servlet) is not available"
(19 answers)
Closed 2 years ago.
I'm trying to write a simple servlet and it's not working and I can't figure out why. The code is very simple but somehow it's not working, and it's driving me nuts.
Here's the index.jsp file:
<%# page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaEE</title>
</head>
<body>
<h1>Hello JavaEE World</h1>
<form action="helloServlet" method="post">
Enter a number: <input type="text" name="number" size="5" />
<input type="submit" value="Call Servlet" />
</form>
</body>
</html>
And here's the servlet file:
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;
#WebServlet("helloServlet")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public HelloServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter write = response.getWriter();
write.println("OMG");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String number = request.getParameter("number");
PrintWriter write = response.getWriter();
write.println("Number: " + number);
write.flush();
}
}
But somehow it's not working. I provided the pictures below if anyone care.
Servlet File
index.jsp File
index.jsp on Browser
Error image when submitting form
Pom.xml if anyone care
Try changing the annotation to this:
#WebServlet(name = "helloServlet", urlPatterns = { "/helloServlet" })
I am having when using apache tomcat with java. The problem might be in the web.xml but I dont know how to fix it. This is my project explorer:
So the thing is that when I run registro.html everything goes as expected:
But when I click on enviar the 404 appears:
So this is my code in registro.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Registro</title>
</head>
<body>
<form action="/Ejer2/Registro" method="POST">
<input type=hidden name=registro value=resultadoRegistro>
<BR><BR>Username: <input type=text name=user>
<BR><BR>Password: <input type=password name=pass>
<BR><BR><input type=submit value="Enviar"><input type=reset>
</form>
</body>
</html>
And this is my Registro.java:
package Ejer2;
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;
import javax.servlet.http.HttpSession;
import javax.servlet.*;
#SuppressWarnings("deprecation")
#WebServlet(urlPatterns="/Registro")
public class Registro extends HttpServlet implements SingleThreadModel{
private static final long serialVersionUID = 1L;
public Registro() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
HttpSession session=req.getSession(true);
Usuario miuser=(Usuario)session.getValue(session.getId());
if(miuser==null){
miuser=new Usuario(req.getParameter("user"),req.getParameter("password"));
session.putValue(session.getId(),miuser);
}
res.setContentType("text/html");
String user=req.getParameter("user");
//String pass = req.getParameter("pass");
PrintWriter toClient = res.getWriter();
toClient.println("<html>");
toClient.println("<title>REGISTRO REALIZADO</title>");
toClient.println("Usuario "+user+" registrado con exito");
toClient.println("</html>");
toClient.close();
}
}
And this my web.xml:
I don't know what to do, thanks in advance.
Im getting an error i dont know why. I have this project:
And when i execute registro.html it works nicely:
But when i submit the post in the code i think it doesnt reach Registro.java
the code in registro.html is:
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Registro</title>
</head>
<body>
<form action="http://localhost:8080/Ejer2/Registro.java" method="POST">
<input type=hidden name=registro value=resultadoRegistro>
<BR><BR>Username: <input type=text name=user>
<BR><BR>Password: <input type=password name=pass>
<BR><BR><input type=submit value="Enviar"><input type=reset>
</form>
</body>
</html>
and in Registro.java this one:
package Ejer2;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.*;
#SuppressWarnings("deprecation")
public class Registro extends HttpServlet implements SingleThreadModel{
private static final long serialVersionUID = 1L;
public Registro() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
HttpSession session=req.getSession(true);
Usuario miuser=(Usuario)session.getValue(session.getId());
if(miuser==null){
miuser=new Usuario(req.getParameter("user"),req.getParameter("password"));
session.putValue(session.getId(),miuser);
}
res.setContentType("text/html");
String user=req.getParameter("user");
//String pass = req.getParameter("pass");
PrintWriter toClient = res.getWriter();
toClient.println("<html>");
toClient.println("<title>REGISTRO REALIZADO</title>");
toClient.println("Usuario "+user+" registrado con exito");
toClient.println("</html>");
toClient.close();
}
}
What is the problem?
You can't use or call like Registro.java directly inside the html action rather you need to map the url pattern for your Registro servlet class as shown below:
#WebServlet(urlPatterns="/Registro")
public class Registro extends HttpServlet implements SingleThreadModel{
//Add your code here
}
Now use the above configured urlPattern as the action in your registro.html, shown below:
<form action="/Registro" method="POST">
Also, the other important point is that you don't need SingleThreadModel for the servlet classes in general (because all the requests will be served using the same servlet instance), but if you are using SingleThreadModel on purpose you can leave it as is.
This question already has answers here:
Servlet returns "HTTP Status 404 The requested resource (/servlet) is not available"
(19 answers)
Closed 7 years ago.
I have written a servlet program for login page ..am using tomcat server...after i run on the server am getting the above mentioned error...
Below is my servlet code.
package demo;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
static private String dbUrl="jdbc:mysql://localhost:3306/employee";
static private String dbUn="root";
static private String dbPwd="root";
static private Connection ConObj;
static private Statement StmtObj;
static private ResultSet RsObj;
public void service(HttpServletRequest request,HttpServletResponse response)throws IOException
{
try {
Class.forName("com.mysql.jdbc.driver");
ConObj=DriverManager.getConnection(dbUrl, dbUn, dbPwd);
StmtObj=ConObj.createStatement();
response.setContentType("text/html");
PrintWriter out=response.getWriter();
out.write("<html><body>");
out.write("<h2>");
String ActLogName=request.getParameter("Logname");
String ActPwd=request.getParameter("Pwd");
String SqlQuery="select * from users where username='"+ActLogName+"' and password='"+ActPwd+"'";
RsObj=StmtObj.executeQuery(SqlQuery);
if(RsObj.next()==true)
{
String ExpLogName=RsObj.getString("username");
String ExpPwd=RsObj.getString("password");
if(ActLogName.equals(ExpLogName)&& ActPwd.equals(ExpPwd))
{
out.write("Login Success");
}
}
else
{
out.write("Login Failed");
}
out.write("</h2>");
out.write("</body></html>");
}
catch (ClassNotFoundException|SQLException exp) {
exp.printStackTrace();
}
finally{
try {
RsObj.close();
StmtObj.close();
ConObj.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Below is my html code
<!DOCTYPE html>
<html>
<head>
<title>login page</title>
</head>
<body>
<form action="http://localhost:8080/FlipKart/loginpage">
LoginName :<input type="text" name="Logname"><br>
Password :<input type="password" name="Pwd"><br>
<input type="submit" value="Login">
<input type="button" value="cancel">
</form>
</body>
</html>
Below is my web.xml code
<web-app>
<servlet>
<servlet-name>loginserv</servlet-name>
<servlet-class>LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginserv</servlet-name>
<url-pattern>/loginpage</url-pattern>]
</servlet-mapping>
</web-app>
Can somebody help me to the resolve this issue..
Thanks in advance..:)
You are overriding the wrong method, override doPost() instead and modify your form to include method="post" like this :
public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException
{
//...
}
and this
<form action="http://localhost:8080/FlipKart/loginpage" method="post">
Also, if you don't want to always include the full path of the context manually, you can read this.
Did you restart the server after making the package name change? Tomcat reads web.xml only on startup.
Besides, make sure your classes are under webapps/WEB-INF/classes folder.
It looks to me as though your application context needs to be changed. Perhaps it is being set to root. So it is not hitting /FlipKart
Look at this stackoverflow link for more information on setting the application context.
That is for tomcat 7. I know you can edit the META-INF/context.xml for previous versions. If you don't have that folder and file just create it.
EDIT
Check your tomcat log to see where it is getting deployed or if something caused it to not get deployed at all. If you're running from an IDE, you may be able to see from the console.
Wrong reference to class in web.xml
Use full name of Class with package name
<servlet>
<servlet-name>loginserv</servlet-name>
<servlet-class>demo.LoginServlet</servlet-class>
</servlet>
i have a simple jsp page with one anchor tag which will call the servlet page:
The following is the jsp code
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Download Data</title>
</head>
<body>
View data in following format:<br>
MS-Excel
</body>
</html>
This is my servlet page :
package com.primeki.devlopment.usm.view;
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;
#WebServlet("/ExcelServlet")
public class Filedownload extends HttpServlet {
private static final long serialVersionUID = 1L;
public Filedownload() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/vnd.ms-excel");
PrintWriter out = response.getWriter();
out.println("Name\tJob\tSalary");
out.println("Raj\tAccountant\t20000");
out.println("Vinay\tAccountant\t20000");
out.println("Rajesh\tAccountant\t20000");
out.println("\tTotal:\t=sum(c2:c3)");
out.close();
}
}
I am getting an error when i am clicking the anchor tag ...
i want to make an excel sheet to get download by click on the anchor tag .. but i am getting an error ... plz help in this....
I may be mistaken because I am new in Java EE but it seems that MS-Excel anchor is redirecting to Filedownload while your servlet is #WebServlet("/ExcelServlet").
Try changing your anchor to MS-Excel
You have named your WebServlet "/ExcelServlet" which means that it weill respond on requests made to http://{server}/{app-name}/ExcelServlet and you have a link with href = "Filedownload"