如何将参数从一个 servlet 传递到另一个?
How to pass parameter from on servlet to another?
我可以从 html 文件中获取参数;但我无法将这些参数发送到其他 Servlet..
我真正想要做的是,在一个 servlet 中获取用户名和密码,然后将这些值发送到另一个 servlet 进行身份验证,然后相应地重定向....
而且我是新手,我盲目地尝试了很多东西,但无法完成工作....
这是我的第一个 Servlet:
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
response.setContentType("text/html");
String uname=request.getParameter("uname");
String pass=request.getParameter("pass");
PrintWriter out=response.getWriter();
if(uname!=null && pass!=null){
ServletContext sc=getServletContext();
RequestDispatcher r=sc.getRequestDispatcher("/Authentication");
response.sendRedirect("Authentication");
} else {
out.println("Error");
}
这是我的第二个 Servlet:
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
PrintWriter out = response.getWriter();
response.setContentType("text/html");
String uname=(String)request.getAttribute("uname");
String pass=(String)request.getAttribute("pass");
int p=pass.hashCode();
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/aed","root","passwordmysql");
Statement st=con.createStatement();
ResultSet rs;
rs=st.executeQuery("select * from logids where userName='" + uname + "' and pass='" + p +"'");
if(rs.next()){
response.sendRedirect("home.html");
}else{
response.sendRedirect("Error.html");
}
}
catch(SQLException i){
i.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我是新手,我很确定我犯了错误......
从表单获取参数后,您需要在会话级别设置属性以供其他 servlet 使用。所以在以下声明之后:
String uname=request.getParameter("uname");
String pass=request.getParameter("pass");
添加以下内容:
request.getSession().setAttribute("uname", uname);
request.getSession().setAttribute("pass", pass);
然后在 servlet2 中,像这样访问它:
String uname= (String)request.getSession().getAttribute("uname");
String pass= (String)request.getSession().getAttribute("pass");
参考文档:link
forwarding servlet lets you to forward the current servlet context
objects(their parameters are forwarded username , password)
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
response.setContentType("text/html");
String uname=request.getParameter("uname");
String pass=request.getParameter("pass");
PrintWriter out=response.getWriter();
if(uname!=null && pass!=null){
ServletContext sc=getServletContext();
RequestDispatcher r=sc.getRequestDispatcher("/Authentication");
response.forward("Authentication");
} else {
out.println("Error");
}
第二个 servlet
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
PrintWriter out = response.getWriter();
response.setContentType("text/html");
String uname=(String)request.getParameter("uname");
String pass=(String)request.getParameter("pass");
int p=pass.hashCode();
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/aed","root","passwordmysql");
Statement st=con.createStatement();
ResultSet rs;
rs=st.executeQuery("select * from logids where userName='" + uname + "' and pass='" + p +"'");
if(rs.next()){
response.sendRedirect("home.html");
}else{
response.sendRedirect("Error.html");
}
}
catch(SQLException i){
i.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
NOTE : place your data access codes seperately
我可以从 html 文件中获取参数;但我无法将这些参数发送到其他 Servlet..
我真正想要做的是,在一个 servlet 中获取用户名和密码,然后将这些值发送到另一个 servlet 进行身份验证,然后相应地重定向....
而且我是新手,我盲目地尝试了很多东西,但无法完成工作....
这是我的第一个 Servlet:
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
response.setContentType("text/html");
String uname=request.getParameter("uname");
String pass=request.getParameter("pass");
PrintWriter out=response.getWriter();
if(uname!=null && pass!=null){
ServletContext sc=getServletContext();
RequestDispatcher r=sc.getRequestDispatcher("/Authentication");
response.sendRedirect("Authentication");
} else {
out.println("Error");
}
这是我的第二个 Servlet:
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
PrintWriter out = response.getWriter();
response.setContentType("text/html");
String uname=(String)request.getAttribute("uname");
String pass=(String)request.getAttribute("pass");
int p=pass.hashCode();
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/aed","root","passwordmysql");
Statement st=con.createStatement();
ResultSet rs;
rs=st.executeQuery("select * from logids where userName='" + uname + "' and pass='" + p +"'");
if(rs.next()){
response.sendRedirect("home.html");
}else{
response.sendRedirect("Error.html");
}
}
catch(SQLException i){
i.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我是新手,我很确定我犯了错误......
从表单获取参数后,您需要在会话级别设置属性以供其他 servlet 使用。所以在以下声明之后:
String uname=request.getParameter("uname");
String pass=request.getParameter("pass");
添加以下内容:
request.getSession().setAttribute("uname", uname);
request.getSession().setAttribute("pass", pass);
然后在 servlet2 中,像这样访问它:
String uname= (String)request.getSession().getAttribute("uname");
String pass= (String)request.getSession().getAttribute("pass");
参考文档:link
forwarding servlet lets you to forward the current servlet context objects(their parameters are forwarded username , password)
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
response.setContentType("text/html");
String uname=request.getParameter("uname");
String pass=request.getParameter("pass");
PrintWriter out=response.getWriter();
if(uname!=null && pass!=null){
ServletContext sc=getServletContext();
RequestDispatcher r=sc.getRequestDispatcher("/Authentication");
response.forward("Authentication");
} else {
out.println("Error");
}
第二个 servlet
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
PrintWriter out = response.getWriter();
response.setContentType("text/html");
String uname=(String)request.getParameter("uname");
String pass=(String)request.getParameter("pass");
int p=pass.hashCode();
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/aed","root","passwordmysql");
Statement st=con.createStatement();
ResultSet rs;
rs=st.executeQuery("select * from logids where userName='" + uname + "' and pass='" + p +"'");
if(rs.next()){
response.sendRedirect("home.html");
}else{
response.sendRedirect("Error.html");
}
}
catch(SQLException i){
i.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
NOTE : place your data access codes seperately