servlet 获取请求和发送响应

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lanse_l/article/details/89708505
  • 获取请求头数据
  • 获取请求行数据
  • 获取用户数据
//获取请求头数据
    //获取请求方式
    String method = req.getMethod();
    System.out.println("请求方式:" + method);
    //获取URL
	String url = req.getRequestURL().toString();
	System.out.println("URL:" + url);		
	//获取协议
	String agreement = req.getScheme();
	System.out.println("协议:" + agreement);
//获取请求行数据(键值对)
	//获取指定键的值
	String value = req.getHeader("Cookie");
	System.out.println(value);
	//获取所有的键
	Enumeration key = req.getHeaderNames();
	while(key.hasMoreElements()) {
		String k = (String)key.nextElement();
		String v = req.getHeader(k);
		System.out.println(k + ":" + v);
	}

发送响应 

//设置响应头
	resp.setHeader("key","123");//设置响应头,同键覆盖
	resp.addHeader("key","456");//设置响应头,同键不覆盖
	//设置编码格式
	resp.setHeader("content-type", "text/html;charset=utf-8");
	//resp.setContentType("text/html;charset=utf-8");
//设置响应状态码 
	resp.sendError(404,"我设置的error404");
//设置响应实体
	resp.getWriter().write("你好,我是Service");

Servlet 处理表单数据

  • String getParameter(String name):以字符串形式返回请求参数的值,或者如果参数不存在则返回 null
  • String[ ] getParameterValues(name):如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。
  • Enumeration getParameterNames():获取表单所有name参数,返回一个枚举。则可以以标准方式循环枚举,使用 hasMoreElements() 方法来确定何时停止,使用 nextElement() 方法来获取每个参数的名称

 编写一个表单,通过post方法提交

<form action="servlet/MyServlet" method="post">
	用户名:<input type="text" name="user"/><br/>
	密    码:<input type="password" name="password"/><br/>
	单选按钮:<input type="radio" name="nationality" value="China"/>中国
	<input type="radio" name="nationality" value="America"/>美国
	<input type="radio" name="nationality" value="French"/>法国<br/>
	复选框:<input type="checkbox" name="hobby" value="bascketball"/>篮球
	<input type="checkbox" name="hobby" value="football"/>足球
	<input type="checkbox" name="hobby" value="Table tennis"/>乒乓球<br/>
	<button type = "submit">提交</button>
</form>

表单界面显示

重写 doPost方法,在里面获取表单数据

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//设置响应内容类型
		resp.setContentType("text/html;charset=UTF-8");
		PrintWriter pw = resp.getWriter();

		String s1 = coding(req.getParameter("user"));//获取user的值
		s1 = "用户名:"+s1;
		String s2 = coding(req.getParameter("password"));
		s2 = s1 +"<br/>密码:"+s2;
		s1 = coding(req.getParameter("nationality"));
		s2 += "<br/>国籍:" + s1;
		String[] s = req.getParameterValues("hobby");//获取同名的多个值
		s2 += "<br/>爱好:";
		for(String temp:s) {
			s2 += coding(temp);
		}
		pw.write(s2);
		
		//获取全部的表单数据
		pw.write("<br><br>-----完整表单获取------<br>");
		Enumeration all = req.getParameterNames();
		while(all.hasMoreElements()) {
			String name = (String)all.nextElement();
			pw.write("<br>" + name+":");
			String values[] = req.getParameterValues(name);
			for(String temp:values) {
				pw.write(coding(temp));
			}
		}
	}

private String coding(String s) {  //处理编码为"utf-8"
    String res="";
    try {
	    res = new String(s.getBytes("ISO8859-1"),"utf-8");
    } catch (UnsupportedEncodingException e) {
	    e.printStackTrace();
    }
    return res;
}

获得返回的结果: 

练习——通过数据库验证登录信息是否正确

resp.setContentType("text/html;charset=utf-8");
PrintWriter pw = resp.getWriter();
//获取登录信息	
String user = req.getParameter("user");
String password = req.getParameter("password");
//声明JDBC对象
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
			//加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			System.out.println(1);
			//获取连接对象
			String url = "jdbc:mysql://localhost:3306/lcb?serverTimezone=GMT";
			conn = DriverManager.getConnection(url, "root", "lanse0305**");
			System.out.println(2);
			//创建sql命令
			String sql = "select * from Login where user=? and password=?";
			//创建sql命令对象
			ps = conn.prepareStatement(sql);
			System.out.println(3);
			//给占位符赋值
			ps.setString(1, user);
			ps.setString(2, password);
			//执行
			rs = ps.executeQuery();
			System.out.println(4);
			if( rs.next()) {
				pw.write("密码正确");
			}else {
				pw.write("密码错误!");
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			//关闭资源
			try {
				rs.close();
				ps.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

猜你喜欢

转载自blog.csdn.net/lanse_l/article/details/89708505