Request
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1、获得单个表单值
String username = request.getParameter("username");
System.out.println(username);
String password = request.getParameter("password");
System.out.println(password);
//2、获得多个表单的值
String[] hobbys = request.getParameterValues("hobby");
for(String hobby:hobbys){
System.out.println(hobby);
}
//3、获得所有的请求参数的名称
Enumeration<String> parameterNames = request.getParameterNames();
while(parameterNames.hasMoreElements()){
System.out.println(parameterNames.nextElement());
}
System.out.println("------------------");
//4、获得所有的参数 参数封装到一个Map<String,String[]>
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("---------------------------");
}
}
1.获得单个表单的值,比如姓名,性别之类,只需要request.getParameter("名字");返回一个String
2.获得多个表单的,比如复选框,比如爱好,有复选框,很多个爱好,那么
Enumeration<String> parameterNames = request.getParameterNames();
while(parameterNames.hasMoreElements()){
System.out.println(parameterNames.nextElement());
}
返回值是一个Map类型,Map<String, String[]>
比如这里可能就是,爱好对应的足球,篮球,乒乓球,所以后面可能是String[]数组
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("---------------------------");
}
request可以再request域里面存储东西,具体操作是
添加属性:request.setAttribute(“name”,"tom");
将请求转发,从本链接发到另一个地方RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");
执行转发的方法:dispatcher.forward(request,response);
这里是将本request和response作为参数传过去,传到servlet2,让那个Servlet去处理。里面存储着这里获得的信息
假如有个界面叫做A,里面有个超链接指向B,但是B不希望除了A还有界面可以访问到它。可以用到referer
//对该新闻的来源的进行判断
String header = request.getHeader("referer");
if(header!=null&&header.startsWith("http://localhost")){
//是从我自己的网站跳转过来的 可以看新闻
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("中国确实已经拿到100块金牌....");
}else{
response.getWriter().write("你是盗链者,可耻!!");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1、获得请求方式
String method = request.getMethod();
System.out.println("method:"+method);
//2、获得请求的资源相关的内容
String requestURI = request.getRequestURI();
StringBuffer requestURL = request.getRequestURL();
System.out.println("uri:"+requestURI);
System.out.println("url:"+requestURL);
//获得web应用的名称
String contextPath = request.getContextPath();
System.out.println("web应用:"+contjq
extPath);
//地址后的参数的字符串
String queryString = request.getQueryString();
System.out.println(queryString);
//3、获得客户机的信息---获得访问者IP地址
String remoteAddr = request.getRemoteAddr();
System.out.println("IP:"+remoteAddr);
}
1.设置request的编码,只适合post方式,get不行
request.setCharacterEncoding("UTF-8");优点,一行搞定
2.get方式处理,方法,需要找到原因,然后编码解码的方式去解决,示意图
看到这个图就很简单了,request按照ISO8859-1方式解码。
那么我们可以先把王五,用ISO8859-1的方式去编码,然后再选择UTF-8的方式去解码
//例如
String name = request.getParamater("name");
//此时是乱码
name = new String(name.getBytes("iso8859-1"),"utf-8");
//先用ISO8859-1编码,后用UTF-8解码
response.setContextType("text/html;charset=UTF-8");
当然大多数情况下,是不会用到get的,都是用post方式,所以基本都是用setCharacterEncoding();
作用,一个人的信息,通过表单提交,有名字,有性别,有学号,有很多,这样的话我们每一个都获取一下太蛮烦了,所以我们想到能不能把所有的东西放一起。
很简单,前面提到过有一个request.getParamaterMap();
Map<String ,String[]> properties = request.getParamaterMap();
所有的信息都封装在这里了,封装的目的是简单。用到JavaBean,创建一个User
Map<String, String[]> properties = request.getParameterMap();
User user = new User();
try {
BeanUtils.populate(user, properties);
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
用这种方式,记住,是BeanUtils 的populate方法,如上daima
假如说想每次都生成一个不一样的数字,那么就可以用UUID,用法是
注意UUID是32位的,但是UUID再java里面,有四个杠!所以java里面是36位的
36位的varchar(),所以varchar不得低于36.否则会出现问题
如果register界面提交成功,处理了以后也没有问题了,那么就可以跳转到login界面
转发步骤是:RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2"); //获得转发器,参数是路径
dispatcher.forward(request,response);//将这两个发送出去
另外:如果地址没有变化,就意味着,如果用户想要刷新,则会回到原来的界面。这很影响用户体验,所以建议使用重定向
response.setRedirect(request.getContextPath()+"/login.jsp");
request.getContextPath()可以动态的获取--当前工程的名称!!!!也就是说如果要改名字的话,就不需要在代码里再重新改了。
推荐阅读
-
详解Django中Request对象的相关用法
-
java 获取request中的请求参数代码详解
-
javascript asp教程第八课--request对象
-
JSP内置对象:Request和Response的简单介绍及使用
-
AngularJS的ng Http Request与response格式转换方法
-
jsp Request获取url信息的各种方法对比
-
从request中获取json数据的方法
-
Spring中如何获取request的方法汇总及其线程安全性分析
-
The JSON request was too large to be deserialized
-
413 Request Entity Too Large