Reputation: 11
I have a jsp page where there are two variables which are flag variables....I want to pass these variables to a servlet. How should I pass these variables to a servlet?
This is my jsp page.
<html>
<head>
<title>Student Registration Form</title>
<style type="text/css">
h3{font-family: Calibri; font-size: 22pt; font-style: normal; font-weight: bold; color:SlateBlue;
text-align: center; text-decoration: underline }
table{font-family: Calibri; color:white; font-size: 11pt; font-style: normal;
text-align:; background-color: SlateBlue; border-collapse: collapse; border: 2px solid navy}
table.inner{border: 0px}
</style>
</head>
<body>
<h3>Create Category</h3>
<form action="insert_category" method="POST">
<table align="center" cellpadding = "10">
<tr>
<td>Category Name</td>
<td><input type="text" name="category_name" maxlength="30"/>
(max 30 characters a-z and A-Z)
</td>
</tr>
<%
int flag=1;
int operation=1;
request.setAttribute("flag", String.valueOf(flag));
request.setAttribute("operation", String.valueOf(operation));
%>
<tr>
<td>Category Code</td>
<td><input type="text" name="category_code" maxlength="30"/>
(max 30 characters a-z and A-Z)
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="Submit">
<input type="reset" value="Reset">
</td>
</tr>
</table>
</form>
</body>
</html>
Servlet
package com.kunal.servlet;
import java.io.IOException;
import java.sql.*;
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;
/**
* Servlet implementation class CreateCategory
*/
@WebServlet("/CreateCategory")
public class InsertCategory extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public InsertCategory() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String category__name=request.getParameter("category_name");
String category_code=request.getParameter("category_code");
int flag=(int)request.getAttribute("flag");
int operation=(int)request.getAttribute("operation");
if(flag==1 && operation==1)
{
String connectionURL = "jdbc:mysql://localhost:3306/agro";
Connection connection = null;
long catcode=Integer.parseInt(category_code);
try {
// Load the database driver
Class.forName("com.mysql.jdbc.Driver");
// Get a Connection to the database
connection = DriverManager.getConnection(connectionURL, "root", "");
//Add the data into the database
//String sql = "insert into sample values(?,?)";
PreparedStatement pst = connection.prepareStatement("INSERT into tbl_category VALUES(?,?,?)");
pst.setString(1,null);
pst.setString(2,category__name);
pst.setLong(3,catcode);
int numRowsChanged = pst.executeUpdate();
if(numRowsChanged!=0){
System.out.println("Successfull execution");
RequestDispatcher rd = request.getRequestDispatcher("adminhome.jsp");
rd.forward(request, response);
}
else{
System.err.println("Problem with the insertion query");
}
pst.close();
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
catch(SQLException e){
e.printStackTrace();
}
catch (Exception e){
e.printStackTrace();
}
finally {
// Always close the database connection.
try {
if (connection != null) connection.close();
}
catch (SQLException ignored){
}
}
}
}
}
I cannot use getParameters() method because these are simply two variables. Is there any way to pass these to servlet? I am getting a NullPointerException
StackTrace
Aug 12, 2014 1:22:10 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Aug 12, 2014 1:22:11 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Agro' did not find a matching property.
Aug 12, 2014 1:22:11 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
Aug 12, 2014 1:22:11 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
Aug 12, 2014 1:22:11 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-nio-8009"]
Aug 12, 2014 1:22:11 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
Aug 12, 2014 1:22:11 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 673 ms
Aug 12, 2014 1:22:11 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Aug 12, 2014 1:22:11 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/8.0.9
Aug 12, 2014 1:22:11 PM org.apache.jasper.servlet.TldScanner scanJars
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Aug 12, 2014 1:22:11 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-8080"]
Aug 12, 2014 1:22:11 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-nio-8009"]
Aug 12, 2014 1:22:11 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 675 ms
Aug 12, 2014 1:22:25 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [InsertServlet] in context with path [/Agro] threw exception
java.lang.NullPointerException
at com.kunal.servlet.InsertCategory.doPost(InsertCategory.java:42)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:655)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Upvotes: 1
Views: 20091
Reputation: 4639
If you want to passed flag
and operation
parameter at the time of form submit than you can store it in hidden field, so that when you submit form it will send with your form parameter.
<form action="insert_category">
<input type="hidden" name="flag" value="1">
<input type="hidden" name="operation" value="1">
....rest of your code
</form>
at server side you get this parameter by request.getParameter()
like below :
int flag=(int)request.getParameter("flag");
int operation=(int)request.getParameter("operation");
OR
you may store this parameter in session
and get value from session on server side for example :
in you JSP :
<%
session.setAttribute("flag", String.valueOf(flag));
session.setAttribute("operation", String.valueOf(operation));
%>
On server side in servlet :
HttpSession session = request.getSession();
int flag=(int)session.getAttribute("flag");
int operation=(int)session.getAttribute("operation");
May this will help you.
Upvotes: 4
Reputation: 46841
Simply include
or import
a Servlet in the JSP and pass the values as request parameters.
Try to avoid Scriplet instead use JavaServer Pages Standard Tag Library or Expression Language that is more easy to use and less error prone.
JSP:
<jsp:include page="/myServlet?flag=1&operation=1"/>
OR
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:import url="/myServlet?flag=1&operation=1"/>
Servlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(request.getParameter("flag"));
System.out.println(request.getParameter("operation"));
}
If you are using form then it should be
<form action="${pageContext.servletContext.contextPath}/insert_category"
OR set it in request
attribute
JSP:
<c:set var="flag" value="1" scope="request"/>
<c:set var="operation" value="1" scope="request"/>
<c:import url="/test2"/>
Setvlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(request.getAttribute("flag"));
System.out.println(request.getAttribute("operation"));
}
Upvotes: 2
Reputation: 8946
You have many options like request scope, session scope etc try something like this
request.setAttribute("flag", flag);
request.setAttribute("operation", operation);
And get the attributes like this
int flag = Integer.parseInt(request.getAttribute("flag"));
int operation = Integer.parseInt(request.getAttribute("operation"));
Similarly you can use session
object to set and get attributes
Edit: your form action url is insert_category
so change
@WebServlet("/CreateCategory")
to
@WebServlet("/insert_category")
and as you are using annotation based url mapping I hope you dont have the mapping in web.xml
Upvotes: 0