HttpServletRequest
客户端每发出一次请求就会创建一次对象,用于接受页面参数
WebContent下面先写一个简单的form(可以新建文件夹用于放html文件)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="http://localhost:8080/WEB09/RequestDemo"method ="post">
<tr>
<td>用户名</td>
<td><input type ="text"name="account"/></td>
</tr><br>
<tr>
<td>密码</td>
<td><input type ="password"name="pwd"/></td>
</tr><br>
<input type="submit" value="提交">
</form>
</body>
</html>
再写一个简单的Servlet。
package com.request;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RequestDemo extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
//每次请求创建一个Request对象
// 获取html页面传递过来的
String account = request.getParameter("account");
String pwd = request.getParameter("pwd");
System.out.println(account+":"+pwd);
}
}
提交,输出,实现Request
form的action书写方式有三种(./还是../视情况而定)
<form action="http://localhost:8080/WEB09/Login"method ="post">
<form action="/WEB09/Login"method="post">
<form action="./Login"method="post">
登录页面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/WEB09/Login"method="post">
账户:<input type="text" name="name"/><br/>
密码:<input type ="password" name="pwd"/><br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>
因为要连接数据库,导入jar包(放入WEB-INF下的lib内即可,不用buildpath)
dbutils非必需。
c3p0.properties放入src内。(确定连接的数据库及相关数据,可改)
再新建Login用于接收(乱码处理)POST不会出现,GET可能会
// 接受页面的参数 tomcat接受数据使用的是iso8859-1编码解
String name= request.getParameter("name");
// get请求出现乱码
// byte[] bs = name.getBytes("iso8859-1");
// String name2 =new String(bs,"UTF-8");
完整Loginpackage com.request;
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.bean.User;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class Login extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
// 接受页面的参数 tomcat接受数据使用的是iso8859-1编码解
String name= request.getParameter("name");
// get请求出现乱码
// byte[] bs = name.getBytes("iso8859-1");
// String name2 =new String(bs,"UTF-8");
String pwd = request.getParameter("pwd");
// 操作数据库
// 1.要有jar配置文件
// 2.创建数据库连接池的对象
ComboPooledDataSource dataSource = new ComboPooledDataSource();
// 3.使用阿帕奇的工具类
QueryRunner runner = new QueryRunner(dataSource);
// 写sql操作数据库
String sql="select * from user where username= ? and password=? ";
try {
User user = runner.query(sql, new BeanHandler<User>(User.class), name, pwd);
if(null!=user){
request.getRequestDispatcher("/success.html").forward(request, response);
}else{
request.getRequestDispatcher("/login.html").forward(request, response);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
新建表单
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/WEB09/RequestDemo2" method ="post">
name:<input type="text" name="name"><br>
pwd:<input type="password" name="pwd"><br>
爱好:<input type="checkbox" name="hobby" value="play">玩
<input type="checkbox" name="hobby" value="sleep">睡
<input type="checkbox" name="hobby" value="run">跑
<input type="checkbox" name="hobby" value="eat">吃
<input type ="submit" value="提交">
</form>
</body>
</html>
将其提交到
public class RequestDemo2 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
// 接受多个值的参数
String[] values = request.getParameterValues("hobby");
for (String string : values) {
System.out.println("hobby=" + string);
// 获取所有的参数 并且不知道key(name)
Map<String, String[]> map = request.getParameterMap();
// 遍历map
Set<Entry<String, String[]>> set = map.entrySet();
// 遍历set
for (Entry<String, String[]> entry : set) {
String key = entry.getKey();
String[] value = entry.getValue();
for (String string2 : value) {
System.out.println(key + ":" + string2);
}
}
}
}
}
Request域对象
在3中写入
public class RequestDemo3 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
// 作为一个域对象,作用的范围是一次请求
// 1.向域中放数据
request.setAttribute("name", "yzp");
// 2.从域中取数据
String attribute = (String) request.getAttribute("name");
System.out.println(attribute);
request.getRequestDispatcher("/RequestDemo4").forward(request, response);
}
}
4中
public class RequestDemo4 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
// 再次访问Demo3写入的数据(null说明域的作用范围在一个文件)
String attribute = (String) request.getAttribute("name");
System.out.println(attribute);
}
}
ServletRequest域:作用范围是整个请求链(请求转发也存在);生命周期是在service方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束。
ServletContext域:作用范围是整个Web应用。当Web应用被加载进容器时创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟着销毁。