系列文章:
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"
});
}