Day15-HttpServletRequest

HttpServletRequest请求

【1】request获取请求行信息

(1)获取请求方式

String method = request.getMethod();//打印post/get

(2)获取请求资源相关的内容

String requestURI = request.getrequestURI();///Demo/demo

String requestURL = request.getrequestURL();//http://loaclhost:/Demo/demo

(3)获取web应用名称

String contextPath = request.getContextPath();//web:Demo

(4)获取地址后的参数字符串

String queryString = request.getQueryString();//post为空,get显示内容

(5)获取用户访问的客户端IP地址

request.getRomoteAddr();//192.1.1.1


【2】获取请求头

(1)获取指定头

request.getHeader(String name);

(2)获取所有头的信息

Enumertion<String> headerNames = request.getHeaderNames();

while(headerNames .hasMoreElements()){//判断有没有

        String headerName = headeNames.nextElement();//获取一个请求头

        String headerValue = request.getHeader(headerName);//调用方法获取头内容

        //打印:如:User-Agent:xxx;

}

request头的作用:执行该次访问的来源,做防盗链,防止被人盗数据

String header = request.getHeader("referer");

if(header != null && header.startsWith("http://hoaclhost")){

respose.setContentType("text/html;charset=UTF-8");

respose.getWriter.writer("可显示的内容");

}else{

respose.getWriter.writer("盗链者");//也可以用重定向跳转到你先要跳转的网址

}


【3】request请求体

(1)获取单个表单的值(常用)

String name = request.getParameter(String ame);

(2)获取表单多个值(不常用)

String[] name = request.getParameterValues(String name);
for(String str : name){
   System.out.println(name);
}

(3)获取所有请求参数名称(几乎不用)

Enumeration<String> parameterNames = request.getParameterNames();
		while(parameterNames.hasMoreElements()){
			System.out.println(parameterNames.nextElement());
		}

(4)获取所有的参数封装到一个Map集合里

Map<String, String[]> parameterMap = request.getParameterMap();
		for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
			System.out.println(entry.getKey());
			for(String str : entry.getValue()){
				System.out.println(str);
			}
			System.out.println("---");
		}

【4】request的其他功能--转发和域

(1)request是一个域对象

Servlet1

/向request域中存储数据
		request.setAttribute("name", "tom");
		
		
		//servlet1 将请求转发给servlet2
		RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");
		//执行转发的方法
		dispatcher.forward(request, response);

Servlet2

//从request域中取出数据
		Object attribute = request.getAttribute("name");
		
		response.getWriter().write("hello haohao..."+attribute);
注意:request域的作用范围,一次请求中能获取值

【5】注册,登录案列

(1)注册

HTML代码

<form class="form-horizontal" style="margin-top: 5px;" action="/WEB15/register" method="post">
	<div class="form-group">
		<label for="username" class="col-sm-2 control-label">用户名</label>
		<div class="col-sm-6">
			<input type="text" class="form-control" id="username" name="username"
					placeholder="请输入用户名">
		</div>
	</div>
	<div class="form-group">
		<label for="inputPassword3" class="col-sm-2 control-label">密码</label>
		<div class="col-sm-6">
			<input type="password" class="form-control" id="inputPassword3" name="password"
					placeholder="请输入密码">
		</div>
	</div>
	<div class="form-group">
		<label for="confirmpwd" class="col-sm-2 control-label">确认密码</label>
			<div class="col-sm-6">
				<input type="password" class="form-control" id="confirmpwd"
								placeholder="请输入确认密码">
			</div>
	</div>
	<div class="form-group">
		<label for="inputEmail3" class="col-sm-2 control-label">Email</label>
		<div class="col-sm-6">
			<input type="email" class="form-control" id="inputEmail3" name="email"
				placeholder="Email">
		</div>
	</div>
	<div class="form-group">
		<label for="usercaption" class="col-sm-2 control-label">姓名</label>
		<div class="col-sm-6">
			<input type="text" class="form-control" id="usercaption" name="name"
				placeholder="请输入姓名">
		</div>
	</div>
	<div class="form-group opt">
		<label for="inlineRadio1" class="col-sm-2 control-label">性别</label>
		<div class="col-sm-6">
			<label class="radio-inline"> <input type="radio"
				name="sex" id="inlineRadio1" value=male>男
			</label> <label class="radio-inline"> <input type="radio"
				name="sex" id="inlineRadio2" value="female">女
		</label>
		</div>
	</div>
	<div class="form-group">
		<label for="date" class="col-sm-2 control-label">出生日期</label>
		<div class="col-sm-6">
			<input type="date" class="form-control" name="brithday">
		</div>
	</div>
	<div class="form-group">
		<label for="date" class="col-sm-2 control-label">验证码</label>
		<div class="col-sm-3">
			<input type="text" class="form-control" name="yzm">
		</div>
	</div>
	<div class="form-group">
		<div class="col-sm-offset-2 col-sm-10">
			<input type="submit" width="100" value="注册" name="submit">
		</div>
	</div>
</form>

RegisterServlet类

                //设置request的编码---只适合post方式
		request.setCharacterEncoding("UTF-8");
		
		//get方式乱码解决
		//String username = request.getParameter("username");//乱码
		//先用iso8859-1编码 在使用utf-8解码
		//username = new String(username.getBytes("iso8859-1"),"UTF-8");
		
		//使用BeanUtils进行自动映射封装
		//BeanUtils工作原理:将map中的数据 根据key与实体的属性的对应关系封装
		//只要key的名字与实体的属性 的名字一样 就自动封装到实体中
		Map<String, String[]> properties = request.getParameterMap();
		User user = new User();
		try {
			BeanUtils.populate(user, properties);
		} catch (IllegalAccessException | InvocationTargetException e) {
			e.printStackTrace();
		}

		//现在这个位置 user对象已经封装好了
		//手动封装uid----uuid---随机不重复的字符串32位--java代码生成后是36位
		user.setUid(UUID.randomUUID().toString());

		//3、将参数传递给一个业务操作方法
		try {
			regist(user);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		//4、认为注册成功跳转到登录页面
		response.sendRedirect(request.getContextPath()+"/login.jsp");
		

	}

	//注册的方法
	public void regist(User user) throws SQLException{
		//操作数据库
		QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
		String sql = "insert into user values(?,?,?,?,?,?,?,?,?,?)";
		
		runner.update(sql,user.getUid(),user.getUsername(),user.getPassword(),user.getName(),
				user.getEmail(),null,user.getBirthday(),user.getSex(),null,null);
	}

用户类:User//要实现get和set

private String uid;
	private String username;
	private String password;
	private String name;
	private String email;
	private String sex;
	private String birthday;



(2)登录

login.jsp代码

<div><%=request.getAttribute("LoginInfo")==null?"": request.getAttribute("LoginInfo")%></div>
	<form class="form-horizontal" action="/WEB15/login" method="post">
		<div class="form-group">
			<label for="username" class="col-sm-2 control-label">用户名</label>
			<div class="col-sm-6">
				<input type="text" class="form-control" id="username" name="username"
					placeholder="请输入用户名">
			</div>
		</div>
		<div class="form-group">
			<label for="inputPassword3" class="col-sm-2 control-label">密码</label>
			<div class="col-sm-6">
				<input type="password" class="form-control" id="inputPassword3" name="password"
					placeholder="请输入密码">
			</div>
		</div>
		<div class="form-group">
			<div class="col-sm-offset-2 col-sm-10">
				<input type="submit" width="100" value="登录" name="submit">
			</div>
		</div>
</form>
LoginServlet代码
                request.setCharacterEncoding("UTF-8");
		
		//1、获得用户名和密码
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		//2、调用一个业务方法进行该用户查询
		User login = null;
		try {
			login = login(username,password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		//3、通过user是否为null判断用户名和密码是否正确
		if(login!=null){
			//用户名和密码正确
			//登录成功 跳转到网站的首页
			response.sendRedirect(request.getContextPath());
		}else{
			//用户名或密码错误
			//跳回当前login.jsp
			//使用转发 转发到login.jsp  向request域中存储错误信息
			request.setAttribute("loginInfo", "用户名或密码错误");
			request.getRequestDispatcher("/login.jsp").forward(request, response);
		}
		
	}
	
	public User login(String username,String password) throws SQLException{
		QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
		String sql = "select * from user where username=? and password=?";
		User user = runner.query(sql, new BeanHandler<User>(User.class), username,password);
		return user;
	}

【6】总结

1,request获取行的内容

request.getMethod();//post,get

request.getRequestURI();///Demo/demo

request.getRequestURL();//http://loaclhost:8080/Demo/demo

request.getContentPath();//web名称

request.getRemoteAddr();//客户端IP

2,request获取头内容

request.getHeader();

3,request获得体(请求参数)
String request.getParameter(name)
Map<String,String[]> request.getParameterMap();
String[] request.getParameterValues(name);
注意:客户端发送的参数 到服务器端都是字符串

获得中文乱码的解决:
post:request.setCharacterEncoding(“UTF-8”);
get:

                parameter = new String(parameter.getBytes(“iso8859-1”),”UTF-8”);

4,request转发和域

request.getRequestDispatcher(转发的地址).forward(req,resp);
request.setAttribute(name,value)
request.getAttribute(name)


猜你喜欢

转载自blog.csdn.net/wssc63262/article/details/81049632