这里写目录标题
1 HttpServletRequest 对象
HttpServletRequest 对象代表客户端浏览器的请求,当客户端浏览器通过 HTTP 协议访问服务器时,HTTP 请求中的所有信息都会被 Tomcat 所解析并封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。
1.1 获取请求数据
<body>
<form action="getInfo.do" method="post">
姓名:<input type="text" name="username"/><br>
爱好:<input type="checkbox" name="userlike" value="sport">体育
<input type="checkbox" name="userlike" value="sport">音乐
<input type="submit" value="ok">
</form>
</body>
</html>
public class GetRequersDataServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
PrintWriter out = resp.getWriter();
out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
out.println("<HTML>");
out.println("<HEAD><TITLE> ITBZ </TITLE></HEAD>");
out.println("<BODY>");
out.println("username:"+username+"<br/>");
out.println("</BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
- getParameter只能取单个数据,复选框选不了。
1.2 获取复选框数据
public class GetRequersDataServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String[] userlikes = req.getParameterValues("userlike");
List<String> strings = Arrays.asList(userlikes);
PrintWriter out = resp.getWriter();
out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
out.println("<HTML>");
out.println("<HEAD><TITLE> ITBZ </TITLE></HEAD>");
out.println("<BODY>");
out.println("username:"+username+"<br/>");
out.println("hobbies:"+strings+"<br/>");
out.println("</BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
1.3 获取所有提交数据的key
public class GetRequersDataServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Enumeration<String> parameterNames = req.getParameterNames();
List<String> keys = new ArrayList<>();
while(parameterNames.hasMoreElements()){
keys.add(parameterNames.nextElement());
}
PrintWriter out = resp.getWriter();
out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
out.println("<HTML>");
out.println("<HEAD><TITLE> ITBZ </TITLE></HEAD>");
out.println("<BODY>");
out.println("Keys:"+keys+"<br/>");
out.println("</BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
1.4 使用 Map 结构获取提交数据
req.getParameterMap()
获取请求中所有的数据并存放到一个 Map 结构中,该方法返回一个 Map,其中 key 为 String 类型 value为 String[]类型。
public class GetRequersDataServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Map<String, String[]> parameterMap = req.getParameterMap();
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
out.println("<HTML>");
out.println("<HEAD><TITLE> ITBZ </TITLE></HEAD>");
out.println("<BODY>");
Iterator<Map.Entry<String,String[]>> iterator = parameterMap.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String,String[]> entry = iterator.next();
out.println("Keys:"+entry.getKey()+" Value:"+Arrays.asList(entry.getValue())+"<br/>");
}
out.println("</BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
2.资源访问方式
2.1 绝对路径
绝对路径访问资源表示直接以”/”作为项目的 Content Path。该方式适用于以”/”作为项目的 Content Path
<form action="/getInfo.do" method="post">
2.2 相对路径
相对路径访问资源表示会相对于项目的 Content Path 作为相对路径。该方式适用于为项目指定的具体的 Content
<form action="getInfo.do" method="post">
3. 获取请求头信息
public class GetRequestHeaderServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String header = req.getHeader("Accept-Language");
Enumeration<String> headerNames = req.getHeaderNames();
PrintWriter out = resp.getWriter();
out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
out.println("<HTML>");
out.println("<HEAD><TITLE> ITBZ </TITLE></HEAD>");
out.println("<BODY>");
while(headerNames.hasMoreElements()){
String key = headerNames.nextElement();
String value = req.getHeader(key);
out.println("Key:"+key+" Value: "+value+"<br/>");
}
out.println("</BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
3.1获取请求头案例
/**
* 需求:编写一个Servlet,如果浏览器的语言是zh-CN,显示“你好,聪明的中国人!”,
* 如果浏览器的语言设置为en-US,那么则显示“Hello,American”。
*/
public class LanguageServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String header = req.getHeader("accept-language");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
out.println("<HTML>");
out.println("<HEAD><TITLE> ITBZ </TITLE></HEAD>");
out.println("<BODY>");
if(header.indexOf("zh-CN") != -1){
out.println("你好,聪明的中国人!");
}else if(header.indexOf("en-US") != -1){
out.println("Hello,American");
}else{
out.println("对比起,不支持该语言");
}
out.println("</BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}