jsp向servlet传输数据

8 篇文章 0 订阅
7 篇文章 0 订阅

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

一、类似于登录页面的,即需要跳转到其他页面的
这种情况一般使用:<form action="将要跳转到的目标页面的名字(不用输入后缀名.jsp)" method="post">
举例:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>登录</title>
<style>
        	body{margin: 0;
        		 padding: 0;
        		 font-family: sans-serif;
        		 background-image: url(img/login_background.png);
        		 background-size: cover;
        		}
        	.box{
        		position: absolute;
        		top: 50%;
        		left: 50%;
        		transform: translate(-50%,-50%);
        		width: 400px;
        		padding: 40px;
        		background: rgba(0,0,0,.8);
        		box-sizing: border-box;
        		box-shadow: 0 15px 25px rgba(0,0,0,.5);
        		border-radius: 10px;
        	}
        	.box h2{
        		margin: 0 0 30px;
        		padding: 0;
        		color: #fff;
        		text-align: center;
        	}
        	.box .inputBox{
        		position: relative;
        	}
        	.box .inputBox input{
        		width: 100%;
        		padding: 10px,0;
        		font-size: 16px;
        		color: #fff;
        		letter-spacing: 1px;
        		margin-bottom: 30px;
        		border: none;
        		border-bottom: 1px solid #fff;
        		outline: none;
        		background: transparent;
        	}
        	.box .inputBox label{
        		position: absolute;
        		top: 0;
        		left: 0;
        		padding: 10px,0;
        		font-size: 16px;
        		color: #fff;
        		letter-spacing: 1px;
        		pointer-events: none;
        		transition: .5s;
        	}
        	.box .inputBox input:focus ~ label,
        	.box .inputBox input:valid ~ label
        	{
        		top: -18px;
        		left: 0;
        		color: #03a9f4;
        		font-size: 12px;
        		
        	}
        	.box input[type="submit"]{
        		background: transparent;
        		border: none;
        		outline: none;
        		color: #fff;
        		background: #03a9f4;
        		padding: 10px 20px;
        		cursor: pointer;
        		border-radius: 5px;
        		margin-left: 120px;
        	}
        </style>
</head>
<body>
<div class="box">
    		<h2>Login</h2>
    		<!-- 下面这句话很重要,由它决定跳转到哪个文件执行,并且说明了使用post方法,
    		所以不能只用点击事件来触发,点击事件没有说明使用的是post方法 ,
    		另外注意当使用get方法时,账号密码会暴露在地址栏中 -->
    		<form action="TestServlet" method="post">
    			<div class="inputBox">
    				<input type="text" name="Username" required="" />
    				<label>Username</label>
    			</div>
    			<div class="inputBox">
    				<input type="password" name="password" required="" />
    				<label>password</label>
    			</div>
    			<!-- 注意提交按钮不用设置成点击事件,直接使用form的action属性即可设置跳转到哪个页面 -->
    			<input type="submit" name="" value="submit" />
    		</form>
    	</div>
</body>
<!-- <script>
function login(){
	location.replace("LoginServlet");
}
</script> -->

</html>

使用这种方法需要注意的是,提交按钮的类型一定要是"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("<script>alert('账号/密码错误,请重新登录!');window.location.href='login.jsp'</script>");
			}
		}
	}
}


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

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script src="js/jquery-3.2.1.min.js"></script>
    	<!-- <script type="application/javascript"></script> -->
    	<script type="text/javascript"></script>//这条语句也可以不写
        <title>JSP Page</title>
    </head>
    <body>
    	<input type="button" value="ahead" onclick="ahead()"/>/注意使用ajax时候必须使用"button"类型
    	<input type="button" value="back" onclick="back()"/>
 	</body>
 	<script type="text/javascript">
	
 	function  ahead(){  
 		$.ajax({
		    type: "post",
		    url:"TestServlet", 
		    data:{
		    	 'ahead_flag':"1",//此处的“1”加不加双引号都可以,反正到了后台都是强制为字符串来处理
	        	 'back_flag':"0"
		    } ,
		    dataType: "json"
		 });
     }
	function  back(){  
 		$.ajax({
		    type: "post",
		    url:"TestServlet", 
		    data:{
		    	 'ahead_flag':"0",//此处的“1”加不加双引号都可以,反正到了后台都是强制为字符串来处理
	        	 'back_flag':"1"
		    } ,
		    dataType: "json"
		 });
     }
	</script>
</html>

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

<div class="switch"><img onclick="javascript:ahead();" class="switch" src="img/off.png"></div>

动作函数依然保持原样:

 	function  ahead(){  
 		$.ajax({
		    type: "post",
		    url:"TestServlet", 
		    data:{
		    	 'ahead_flag':"1",//此处的“1”加不加双引号都可以,反正到了后台都是强制为字符串来处理
	        	 'back_flag':"0"
		    } ,
		    dataType: "json"
		 });
     }
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值