jsp向servlet传输数据

系列文章:
ESP8266的AP模式与STA模式简单测试
简单的Java服务器和客户端的通信
STM32 ESP8266和Java服务器透传模式下的双向通信
jsp向servlet传输数据
Servlet向JSP传递数据以及JSP页面DIV定时局部刷新
JSP向Servlet传递数据以及与STM32、ESP8266通信过程

一、类似于登录页面的,即需要跳转到其他页面的
这种情况一般使用:


举例:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>




登录



Login

使用这种方法需要注意的是,提交按钮的类型一定要是"submit"。注意不需要再把提交按钮添加一个点击事件了,因为使用这种方法本身就带有自动跳转的功能,控制跳转的目的地是由action来控制的。
servlet端的代码:

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

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 LoginServlet
 */
//@WebServlet是采用注入的方式表示这是一个Servlet类,采用此方法比较方便,因为此方法不用再去配置web.xml文件
@WebServlet("/validate")
public class validate extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public validate() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
    //doGet响应get请求,doPost响应post请求,为了保证不管在login.jsp中选择post方法还是get方法,在这里都能有所回应,所以
    //这里只在doPost中写相应的代码,而在doGet中直接调用doPost函数即可
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {	
		doPost(request, response);
//		response.getWriter().append(info);	
	}

	private void alert(String string) {
		// 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
		//从login页面中获取用户名和密码
		String name = request.getParameter("Username");
		String password = request.getParameter("password");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html");
		if(name == null || password == null || name.equals("") || password.equals("")) {
			response.getWriter().append("账号/密码不能为空");
			return;
		}else {
			if(name.equals("sdsfddfd") && password.equals("dfsdgfg")) {
				RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/ControlSystem.jsp");//如果登陆成功,则跳转到指定的页面
				dispatcher.forward(request, response);
			}else {
				//response.sendRedirect("login.jsp");//直接重定向到登录页面,无任何提示信息
				
				//有登录失败的提示信息,但是跳到了一个新页面,点击确定之后重新回到登录页面回到指定页面
				PrintWriter out = response.getWriter();
				out.print("");
			}
		}
	}
}


二、不跳转页面,只是点击按钮,然后jsp向servlet传输数据
这种情况就需要使用ajax技术,注意ajax()方法是jquery中的,而不是javascript中的。
举例:



    
        
        
    	
    	//这条语句也可以不写
        JSP Page
    
    
    	/注意使用ajax时候必须使用"button"类型
    	
 	
 	

servlet端的代码:

package servlet;

import java.io.IOException;
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
 */
//@WebServlet是采用注入的方式表示这是一个Servlet类,采用此方法比较方便,因为此方法不用再去配置web.xml文件
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
    //doGet响应get请求,doPost响应post请求,为了保证不管在login.jsp中选择post方法还是get方法,在这里都能有所回应,所以
    //这里只在doPost中写相应的代码,而在doGet中直接调用doPost函数即可
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {	
		doPost(request, response);
	}

	private void alert(String string) {
		// 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 ahead_flag = request.getParameter("ahead_flag");
		String back_flag = request.getParameter("back_flag");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html");
		System.out.println("收到ajax请求");
		System.out.println(ahead_flag);
		System.out.println(back_flag);
	}
}

注意使用Ajax技术时的数据格式

$.ajax({
		    type: "post",
		    url:"TestServlet", 
		    data:{
		    	 'ahead_flag':"0",//此处的“1”加不加双引号都可以,反正到了后台都是强制为字符串来处理
	        	 'back_flag':"1"
		    } ,
		    dataType: "json"//预期服务器返回来的数据格式,而不是此处将要发送的数据格式
		 });

type就是说明请求的方式是post还是get
url就是说目标页面,即你希望把数据传到的那个页面的名字,不用加后缀.java
data:就是数据,如果只有一个数据,那么可以写成:

$.ajax({
		    type: "post",
		    url:"TestServlet", 
		    data:"ahead_flag=1",
		    dataType: "json"
		 });

dataType就是预期服务器将要返回来的数据类型,而不是此处将要发送的数据类型。
另外注意点击的按钮也可以以图片的形式展现:

动作函数依然保持原样:

 	function  ahead(){  
 		$.ajax({
		    type: "post",
		    url:"TestServlet", 
		    data:{
		    	 'ahead_flag':"1",//此处的“1”加不加双引号都可以,反正到了后台都是强制为字符串来处理
	        	 'back_flag':"0"
		    } ,
		    dataType: "json"
		 });
     }

你可能感兴趣的:(网络,HTML,JAVA)