目的:页面跳转
重定向302(response.sendRedirect("");):定位到新的网站资源位置
特点:
1 客户端行为
2 两次请求
3 浏览器地址改变
4 request数据丢失
5 “/项目名/资源”代表web站点的根路径
Html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>简单注册案例</title>
</head>
<body>
<form action="/registerDemo/registerServlet" method="post">
用户名:<input type="text" name="username" value="" /><br />
密码:<input type="password" name="password" /><br />
Eamil:<input type="text" name="email" /><br/>
<input type="submit" value="注册"/>
</form>
</body>
</html>
JAVA
package com.register.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/registerServlet")
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public RegisterServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1 设置编码 后期采用map实现
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
//2 读取数据
String username=request.getParameter("username");
String password=request.getParameter("password");
String email=request.getParameter("email");
// 3 验证数据
PrintWriter out=response.getWriter();
if (username==null||username.trim().equals("")) {
out.write("用户名不能为空!");
return;
}
if (password==null||password.trim().equals("")) {
out.write("密码不能为空!");
return;
}
if (email==null||email.trim().equals("")) {
out.write("email不能为空!");
return;
}
//4 保存数据库
Connection connection=null;
PreparedStatement pStat=null;
//注册驱动
try {
Class.forName("com.mysql.jdbc.Driver");
//获取连接
String url="jdbc:mysql://localhost:3306/javastudy?useSSL=false";
String user="root";
String pass="";
connection=DriverManager.getConnection(url, user, pass);
//创建命令
pStat=connection.prepareStatement("INSERT INTO db_user (username,PASSWORD,email) VALUE(?,?,?)");
pStat.setString(1, username);
pStat.setString(2, password);
pStat.setString(3, email);
int result=pStat.executeUpdate();
if (result>0) {
response.sendRedirect("/registerDemo/index.html");
out.write("注册成功");
}else {
out.write("注册失败");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (connection!=null) {
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (pStat!=null) {
try {
pStat.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
转发(getRequestDispatcher):只能转发到同一个web下的url,客户端感觉不到转发
特点:
1 服务端行为
2 1次请求
3 浏览器地址不变
4 request数据不丢失
5 转发同一个web应用
java:
package com.register.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 DispatcherServlet
*/
@WebServlet("/dispatcherServlet")
public class DispatcherServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DispatcherServlet() {
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
//1 设置编码 后期采用map实现
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
//2 读取数据
String username=request.getParameter("username");
String password=request.getParameter("password");
String email=request.getParameter("email");
// 3 验证数据
PrintWriter out=response.getWriter();
if (username!=null||username.trim().equals("111")) {
//转发
//获取转发器
RequestDispatcher dispatcher = request.getRequestDispatcher("/registerServlet");
//转发
dispatcher.forward(request, response);
return;
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>转发案例</title>
</head>
<body>
<form action="/registerDemo/dispatcherServlet" method="post">
用户名:<input type="text" name="username" value="" /><br />
密码:<input type="password" name="password" /><br />
Eamil:<input type="text" name="email" /><br/>
<input type="submit" value="注册"/>
</form>
</body>
</html>
关于路径问题:
重定向给浏览器的 所以加的是项目名 转发是服务端 所以不用加项目名称;