javaWeb项目之Servlet学习笔记----HttpServletRequest请求对象

Javaweb Servlet基础学习记录(5)—重定向与请求转发(请求转发与重定向对HttpServletRequest对象属性的存取) Javaweb Servlet的应用学习记录(5)—重定向与请求转发(3) 阅读详情

https://www.cnblogs.com/fjdingsd/p/4856172.html

 

常用方法 

通过getMethod方法获得的是客户端访问该web应用的Http请求方式。

代码和结果如下:

1     String requestMethod = request.getMethod();
2     System.out.println(requestMethod);    

  

 

  想获取客户端发来的HTTP请求头中的内容可以使用如下方法:

getDateHeader()

getHeader(String)

getHeaderNames()

getHeaders(String)

getIntHeader(String);

这些方法在各个特定的情况下能有不同的用途,体现出获取客户端请求头方式的多样性。

  如通过getHeader(String)可以获取指定请求头的数据内容:

1     String connectionState = request.getHeader("Connection");
2     System.out.println(connectionState);

 

而通过getHeaderNames()可以获取发送的所有请求头,例:

Enumeration e = request.getHeaderNames();
    while(e.hasMoreElements()) {
      String headerName = (String) e.nextElement();
      String headerValue = request.getHeader(headerName);
      System.out.println(headerName+":"+headerValue);
    }

  

而通过getHeaders(String)方法获取的是某个同名头的内容,适用于当某个请求头有多个内容时使用。

 

介绍完获取请求行和请求头,下面介绍获取请求数据中内容的方法:

getPatameter(String)

getParameterNames()

getParameterValues(String)

getParameterMap()

和getInputStream()

      

  使用getPatameter(String)方式可以获取请求数据中指定的数据值

代码如下:

1     String value = request.getParameter("username");
2     System.out.println(value);

通常可以在浏览器地址URL后直接写入参数数据来模拟GET方式:

  

最终在控制台得到:

  

 

  通过getParameterNames()可以获取多个参数:

Enumeration e = request.getParameterNames();
    while(e.hasMoreElements()) {
        String paramName = (String)e.nextElement();
        String paramValue = request.getParameter(paramName);
        System.out.println(paramName+":"+paramValue);
    }

  

  

 

  使用getParameterValues(String)有助于获取当请求数据参数名有相同时的情况:

比如下面这种情况:

  

代码:

1     String[] values = request.getParameterValues("username");
2     for(int i=0;i<values.length;i++) {
3         System.out.println(values[i]);
4     }

在控制台观察:

  

(注意:像getPatameter(String)、getParameterValues(String)等等这样的方法,都要小心空指针异常,可能的原因在于并没有这样的参数,还有一种就是在URL后没有任何参数传入,所以要特别注意,应该加入健壮性判断。这也是编程过程中会碰到传入参数都应该注意的问题。)

 

  使用getParameterMap()可以获取以请求数据中参数和参数值作为的键值对的Map集合。这样我们就能同时获取键值对。假设有如下情况:

  

代码为:

Map<String,String[]> map = request.getParameterMap();
  for(Map.Entry<String, String[]> entry :map.entrySet()) {
        String paramName = entry.getKey();
        for(int i=0;i<entry.getValue().length;i++){
            String paramValue = entry.getValue()[i];
            System.out.println(paramName+":"+paramValue);
        }
    }

如果请求数据参数为:

  

那么在控制台上看到的则是:

  

 

  以上说明了常用的获取数据的方式,还有一种属于request响应对象的getInutStream方法,而这个方法一般只用于大容量的数据获取,比如文件上传,将在之后的篇章中介绍。

 

下面介绍其他常用方法

  通过getRequestURI方法和getRequestURL可以获取http请求服务器资源的URI和URL,关于URI和URL的区别可以通过获取后的字符串来查看:

代码:

1     String fileURI = request.getRequestURI();
2     System.out.println("URI: "+fileURI);
3 
4     StringBuffer fileURL = request.getRequestURL();
5     System.out.println("URL: "+fileURL.toString());

访问该Servlet,得到:

  

可以看出URI只包括在服务器中的web应用名和资源对外访问路径(虚拟目录)。

 

  通过getQueryString()方法可以获取URL上由GET方式带来的参数:

若代码为:

1     System.out.println(request.getQueryString());

而我在访问这个Servlet的URL上添加:“?username=fjdingsd&password=123”:

  

那么当访问这个Servlet之后,在MyEclipse的控制台将看到:

  

 

  通过getRemoteAddr方法可以获取访问该web应用的客户端IP地址。

代码:

1 System.out.println(request.getRemoteAddr());

 

  而通过getRemoteHost方法获取的是访问该web应用的客户端主机名,如果没有在DNS服务器上注册的则是获取IP地址。这里说的主机名是指在DNS上注册的,比如www.baidu.com,那么通过该方法如果从该主机上来访问,则获取到的是:baidu.com。

常用功能

在上一篇《Servlet的学习(十)》中介绍了HttpServletRequest请求对象的一些常用方法,而从这篇起开始介绍和学习HttpServletRequest的常用功能。

 

  使用HttpServletRequest可以防止盗链行为,什么是盗链行为,比如说在一个别的网站上超链接,指向我们的网页中的某个数据,这样从他的网页上就可以直接进入到我的某个页面,无需从我的指定路口进入:

例如在一个简单的1.html文件中加入了我的【myservlet】web应用下的某个Servlet访问的超链接:

  

如果我的Servlet中代码仅仅为为访问输出数据,例如:

1     response.setContentType("text/html;charset=utf-8");
2     String data ="银魂真是一部好动漫";
3     response.getWriter().write(data);

那么点击这个超链接肯定会访问到这个Servlet:

  

那么我们如果不想被比人直接通过地址访问或者超链接访问怎么办呢:

  记得学习HTTP协议中的“referer”请求头吗,这个请求头是告诉服务器该请求是从哪个URL发来的,那么我们就可以根据这个URL来判断是否是我们允许的请求地址来控制服务器是否将响应发送回去。

代码如下:

String reqUrl = request.getHeader("referer");
    if(reqUrl==null || !reqUrl.startsWith("http://localhost:8080/myservlet/index.jsp")){
        response.sendRedirect("/myservlet/index.jsp");
        return ;
    }
        
    response.setContentType("text/html;charset=utf-8");
    String data ="银魂真是一部好动漫";
    response.getWriter().write(data);

在if判断中判断是否为空是防止直接将该web资源以输入URL地址直接访问,而另一个判断是防止访问该web资源不是从指定的地方来访问进来。

  通过该代码,如果我们继续在1.html页面中点击超链接,则会自动跳转到我们设置好的index.jsp中:

而如果我们直接在浏览器中访问Servlet也是会跳到这个页面的。

  只有在index.jsp中点击我们设置好的超链接,才能访问到:

 

  接下来,我们来讨论的使用HttpServletRequest响应对象来获取表单数据,这是非常重要的知识点,表单提交的数据根据提交方式的不同会放置在不同位置,例如采用POST方式则会将这些数据放置在HTTP请求数据实体中,无论采用哪种方式,都是可以用响应对象的getParameter(String)等等方式获取,这点在《Servlet的学习(十)》中已经介绍。

  现在,我们在需要新创建一个HTML页面编写我们的表单代码,和一个Servlet作为服务器端接收表单提交的数据,将Servlet命名为ServletRequest,而表单的传送服务器和选择HTTP方式如下:

1     <form action="/myservlet/servlet/ServletRequest" method="post">

先来看

1     <input type="text" name="user" /> 
2     <input type="password" name="password" /> 

这两种常见的输入字符情况。

当然还需要在表单中提供具有提交功能的标签才能提交,我们选择

1     <input type="submit" value="提交" >

这样的提交方式,效果如下:

  

在表单中这两个都可以直接通过getParameter(String)方法获取用户输入的数据,代码如下:

1     String username = request.getParameter("user");
2     String password = request.getParameter("password");

只要我们在用户名和密码中输入数据,再点击提交,就可以将用户名和密码中的数据传递给服务器:

  

同时,由原来的表单的HTML页面会自动跳转到该Servlet的页面上。

  对于text和password两种表单方式的健壮性判断:

依据:

1,如果表单中用户名和密码不填,那么直接提交后会是传递给服务器空字符串。

2,如果不是在表单,而是知道了平常表单提交后会跳转的Servlet页面,那么直接输入该Servlet地址则是传递Null给服务器

因此必须加入健壮性语句:

1     String username = request.getParameter("user");
2     if(username!=null && !username.trim().equals("")) {
3         System.out.println("user:"+username);
4     }

password部分代码同理。

 

  接下来是单选按钮,比如性别选择:

1 性别   <input type="radio" name="gender" value="male"/>男
2       <input type="radio" name="gender" value="female"/>女   

只有<input type=”radio”>标签中的”name”属性一样,才能具有单选的功能,同时”name”属性也是在Servlet中获取用户单选数据的重要参数,代码:

1     String gender = request.getParameter("gender");

如果单选没有选择任何选项,则提交会返回null,所以需加入健壮性语句:

1     String gender = request.getParameter("gender");
2     if(gender != null) {
3         System.out.println(gender);
4     }

 

  接下来是下拉列表,下拉列表可以是作为选择城市,如:

复制代码

1 城市<select name="city">
2     <option value="none">--选择城市--</option>
3     <option value="beijing">北京</option>
4     <option value="shanghai">上海</option>
5     <option value="hangzhou">杭州</option>
6     <option value="amoy">厦门</option>
7 </select>

复制代码

由<select>标签中的”name”属性作为Servlet中服务器获取客户端发来的下来列表数据的重要参数,代码如下:

1     String city = request.getParameter("city");
2     System.out.println(city);

由于下拉列表会默认选择其第一个<option>标签的内容,所有即使我们没有进行任何选择,也是会传递值得,这里可以无需健壮性判断。

 

  接下来是复选框,复选框可以是一些所学技能,或者兴趣爱好,如:

1   爱好    <input type="checkbox" name="hobby" value="sing">唱歌
2         <input type="checkbox" name="hobby" value="surf">冲浪
3         <input type="checkbox" name="hobby" value="swim">游泳

由<input type=”checkbox”>标签中的name属性决定了这些复选框是否属于同一个复选框组,也是同时也是作为Servlet中获取表单复选框的数据的重要参数,由于多个参数使用同一个参数名,所以必须使用getParameterValues(String)方法来获取所有的被勾选的复选框,代码如下(包含健壮性):

1     String[] hobbies = request.getParameterValues("hobby");
2     for(int i=0;hobbies!=null&&i<hobbies.length;i++) {
3         System.out.println(hobbies[i]);
4     }

如果没有勾选任何一个复选框,则不会向服务器Servlet传送任何数据。所以如果直接接收可能会发生空指针异常,必须判断是否接收到的字符串数组有数据(hobbies!=null)。

 

重要:

  现在,我们再重新回到<input type="text" name="user" /> 上,如果我们输入的是中文数据,点击提交之后会是怎样?

  

在控制台看到的结果:

  

结果就是出现了中文乱码问题。这是浏览器在发送时通常要看当时的编码,如:

  

或者:

  

但是!!

在Servlet收到request请求对象发来的数据时,通过getParameter方法是默认查询“ISO-8859-1”码表的,所以造成了编码不一致!

解决方式也很简单,只要在Servlet中将获取的request对象选择正确的解码方式即可,只要在代码前添加一句:

1     request.setCharacterEncoding("UTF-8");

就可以获取表单中正确的中文数据了:

  

注意,对于响应对象的setCharacterEncoding方法只对HTTP协议的POST方式有效,对GET方式无效。

 

  如果我们将表单提交方式改为GET,那么提交表单中有中文数据的话依然在Servlet中会出现乱码。

如果想使GET方式也不会出现中文乱码,并没有好的捷径方法。先要通过getParameter获取请求数据(这时在Servlet中以ISO8859码表进行解码),然后再通过ISO8859进行编码成字节数组,最后通过创建字符串对象的方式选择UTF-8解码表解出最开始客户端编码的数据。

代码如下:

1     String userTemp = request.getParameter("user");
2     String username = new String(userTemp.getBytes("ISO8859-1"),"utf-8");

即可。

  当然这种方式对POST方式也是有效的。

 

  另外一种对GET方式是修改Tomcat中的配置文件(这种方式只适合GET方式,用POST方式还是会乱码)。通过Tomcat服务器的首页,选择“Configuration”查看配置文档,选择“Connector”下的“HTTP”:

  

在这个文档中有一个URIEncoding属性,是指可以在server.xml文件中配置这个属性,如果没有这个属性,则Tomcat默认采用ISO8859-1编码:

  

通过在server.xml文件中的<connector>标签中添加设置即可:

  

由于是在Tomcat中修改server.xml文件,所以服务器需要重启。

  经过这种方式,就无需在代码中再设置任何编码表,所有在服务器端都会采用“URIEncoding”属性设置的码表。但这个方式不建议使用。

 

  同样在“Configuration”的配置文档中的“Connector”下的“HTTP”说明文档中,有useBodyEncodingForURI这么个属性:

  

当在server.xml文件中的<connector>标签中添加设置了这个属性,还未完成:

  

还必须在Servlet中同时调用了响应对象的setCharacterEncoding方法,就能再次使GET方式不会出现乱码:

1     request.setCharacterEncoding("utf-8");
2     String username = request.getParameter("user");

同样,这种配置server.xml文件的方式依然不建议采用。

 

  最后说明一点,在HTML编程中,我们也可以使用超链接来提交数据,当然这样的方式属于HTTP中的GET方式,原理类似于在浏览器地址URL后手动添加参数,比如如下代码:

1     <a href="/myservlet/servlet/ServletRequest?user=银魂" >用户名为中文</a>

跟随的参数为中文!!

两种解决方式:

1,在这个超链接上必须将这个中文进行URL编码,必须在JSP中进行编写(在后面的篇章中会介绍如何使用);

2,或者使用上述GET处理中文乱码的第一种方式,进行双次编码:

1     String userTemp = request.getParameter("user");
2     String username = new String(userTemp.getBytes("ISO8859-1"),"utf-8");

也是可以的。

首先来看RequestDispatcher对象的“转发”功能:

  在《Servlet的学习(五)》中说过,使用ServletContext对象的getRequestDispatcher方法可以获得转发对象RequestDispatcher对象,将请求进行转发给其他的Servlet或者JSP处理,同时在该篇的结尾,也注明了其实使用ServletContext的方式不适合实际开发,因为ServletContext对象是web域对象,在web应用部署的整个生命周期内,是作为所有Servlet的共同拥有者,这就导致了在多线程情况下会引起ServletContext对象中用于转发的数据产生线程安全问题:一个Servlet利用ServletContext在转发给JSP过程中,而另一个线程中的Servlet使用ServletContext将这个转发的数据给覆盖,这样导致原先该转发给JSP的数据并不是我们期待的。

  而Request请求对象也是域对象,虽然这个域对象的生命周期并没有ServletContext那么长,但是如果采用Request对象的转发还是能持续到别的Servlet处理时的。使用Request请求对象来处理转发的最大的好处就是在多线程中,每一个线程都有自己的Request请求对象,这就不会像ServletContext对象一样是线程所共有的,因此不会产生线程安全问题。

  那么我们将《Servlet的学习(五)》中使用ServletContext对象来转发的例子改为使用HttpServletRequest请求对象来转发:

  在【myservlet】web工程下创建一个名为“ServletRequest1”的Servlet和一个show.jsp

在ServletRequest1中将数据转发给show.jsp,代码为:

复制代码

1     public void doGet(HttpServletRequest request, HttpServletResponse response)
2             throws ServletException, IOException {
3 
4         String data = "Ding love LRR";
5         request.setAttribute("data", data);
6         RequestDispatcher dispatcher = request.getRequestDispatcher("/show.jsp");
7         dispatcher.forward(request, response);
8     }

复制代码

而在show.jsp中接收这个数据(属性),并封装在HTML中:

复制代码

1 <font size="100px" color="red">
2         <% 
3             String data = (String)request.getAttribute("data");
4             out.write(data);
5         %>
6 </font>

复制代码

在浏览器中访问这个Servlet,会看到:

  

当然,还是跟之前一样,转发功能不会使浏览器的地址发生变化。

  最后再说一句,转发功能之所以这么重要,主要原因在于在MVC设计模式下,都是Servlet处理用户请求的,并产生用户想看的数据,然后转交给JSP显示,在转交给JSP显示时,会把数据存在Request域对象里带给JSP。

 

         转发功能还有一些要注意的地方:

如果在调用RequestDispatcher对象的forward方法之前,将Servlet程序通过Response响应对象写出数据之后如果关闭流或刷新流,这是将缓存的数据发送给了客户端,相当于向客户端提交了数据,那么再使用Request请求对象来转发将会抛出IllegalStateException异常:

  如我们在上述Servlet中的代码前加入向该Servlet写入数据:

PrintWriter writer = response.getWriter();
    writer.write("Long live sd");
    writer.close();    //或writer.flush(),这步相当于向客户端提交了响应
        
    request.setAttribute("data", "Ding love LRR");
    RequestDispatcher dispatcher = request.getRequestDispatcher("/show.jsp");
    dispatcher.forward(request, response);

那么我们在浏览器将只能访问响应提交的数据,而不能看到转发后的页面:

  

同时服务器后台报错,抛出IllegalStateException异常:

  

从提示也可以看出,在转发之前不能提交Response响应(Cannot forward after response has been committed)。

 

而如果我们将Response的输出流不关闭,或者放最后关闭,则可以看到转发还是成功的:

复制代码

1     PrintWriter writer = response.getWriter();
2     writer.write("Long live sd");
3         
4     request.setAttribute("data", "Ding love LRR");
5     RequestDispatcher dispatcher = request.getRequestDispatcher("/show.jsp");
6     dispatcher.forward(request, response);
7         
8     writer.close();  //response的输出流在转发之后再关闭

复制代码

可以访问到要转发的页面(show.jsp代码在上面),同时服务器后台也不报错:

  

这是因为通过write方法写入的数据还在Response对象的缓冲区中,我们知道如果使用了close()或flush()都会将缓存的数据立马真正输出,那就相当于已经想客户端提交了响应,之后如果再转发肯定会抛出异常。而如果我们没有输出数据(没有提交响应),那么转发功能正常,而原先通过Response响应对象写入缓冲区中的数据将会被清空,但是通过设置响应头字段信息的内容将保持有效(例如在转发之前写的response.setContentType方法等)。

另外,如果我们在转发之后再继续通过Response对象写出数据,也是没有用的,因为转发就相当于已经将请求和响应提交给客户端了,看到的还是转发的页面,不过这时候服务器后台不会报错就是了。

  总结,在第一次【转发】之前或之后向客户端写出数据或者再次转发都是不合理的。建议在转发语句后直接跟一个return是非常理智的选择。

 

  另外,如果在转发一次之后再转发还是会发生IllegalStateException异常,因为转发一次就相当于向服务器提交一次Response响应了:

1     request.getRequestDispatcher("/index.jsp").forward(request, response);
2         
3     request.getRequestDispatcher("/1.html").forward(request, response);

在浏览器中只能看到最开始转发的那个页面:

  

同时服务器后台抛出IllegalStateException异常:

  

这种问题在使用if条件语句时要特别注意。

 ==========================================================================

接下来看RequestDispatcher对象的“包含”功能:

  RequestDispatcher对象的include方法用于将一些web资源(如Servlet,JSP,HTML等)包含在Response响应对象中。

  举个例子,在【myservlet】中创建一个【public】文件夹,里面再创建“header.html”和“footer.html”,另外创建一个Servlet

在header.html页面中代码为:

  

在footer.html页面中代码为:

  

而在Servlet中代码为:

1     request.getRequestDispatcher("public/header.html").include(request, response);
2     response.getWriter().write("long live sd  <br />");
3     request.getRequestDispatcher("public/footer.html").include(request, response);

访问该Servlet后发现:

  

原来响应写入HTML是使用OutputStream,与JSP不同()(《Servlet的学习之Response响应对象(3)》)

那么代码只好改为:

1     request.getRequestDispatcher("/public/header.html").include(request, response);
2     response.getOutputStream().write("long live sd <br />".getBytes());
3     request.getRequestDispatcher("/public/footer.html").include(request, response);

那么再次访问该Servlet:

  

注意:被包含的Servlet(如上例中的Servlet)不能改变响应对象中的响应头和响应状态码,如果在包含的Servlet中含有这样企图更改的句子,则会被服务器忽略。

 ==========================================================================

最后来总结下RequestDispatcher的forward转发和Response的sendRedirect重定向的区别:

  1,forward转发只能将请求转发给该web应用中的web资源。

    sendRedirect重定向除了能重定向到该web应用中的资源外,还能重定向到同一个主机(或服务器)上的其他web应用中的资源,甚至可以使用绝对URL重定向到其他主机(或服务器)上得资源。

 

  2,创建RequestDispatcher对象时指定的相对URL以“/”开头,相当于当前web应用程序的根目录,也就是说在该“/”之后代表当前web应用所在目录下的内容,例如:

request.getRequestDispatcher("/index.jsp")

    如果是调用HttpServletResponse.sendRedirect方法的相对URL以“/”开头,则是相对整个服务器存放web应用的根目录,例如以Tomcat的【webapps】目录为重定向目录的根目录,如:response.sendRedirect(“/myservlet/index.jsp”),其中”myservlet”是web工程名,同时也是web应用所在目录名,存放于Tomcat的【webapps】目录下。

 

  3,调用RequestDispatcher对象的转发forward方法进行转发过程结束后,浏览器地址栏中的URL地址不会发生改变。

    而调用HttpServletResponse.sendRedirect重定向方法则在访问过程结束后,浏览器地址栏中的URL地址将会变成重定向资源的路径。

 

  4,RequestDispatcher对象的转发forward方法的调用者和被调用者共享相同的request请求对象和response响应对象,它们属于同一个访问请求和响应过程。

    而HttpServletResponse.sendRedirect重定向方法的调用者和被调用者使用各自的request请求对象和response响应对象,它们属于两个独立的访问请求和响应过程。

 

有一个例子可以比较形象的说明转发和重定向的不同:

  转发:A向B借钱,B说没有,但是B帮A向C借钱。

  重定向:A向B借钱,B说没有,B让A重新向C借钱。

JAVAWEB——Servlet 阅读详情

相关推荐

Mac本地部署OpenClaw:从零搭建企业级知识库AI助手

大语言模型(LLM)作为当前人工智能的核心技术,通过其强大的自然语言理解和生成能力,正在深刻改变信息交互方式。其原理是基于海量数据训练的深度神经网络,能够根据上下文预测并生成连贯文本。这一技术的核心价值在于,它能够作为智能中枢,理解和执行复杂指令,从而将通用AI能力转化为解决特定业务问题的生产力。在工程实践中,通过AI Agent框架(如OpenClaw)将LLM与外部工具和知识系统连接,是实现其价值的关键。这涉及到**本地部署**与**私有化**部署,以确保数据安全与成本可控。具体应用场景包括企业知识库问

weixin_33402252的博客 377

servlet的getParameterMap

一直以为getParameterMap只是获取url后面的queryString,但是今天看到公司接口代码里,一个服务写着方法是POST的服务方法,结果方法里却写上getParameterMap,就在想,这尼玛不是跟GET没区别吗。突然觉得这个代码是不是有点low逼。后来一想,已经跑了这么久,而且一直在用的接口服务应该不会这么low吧。于是去看了,getParameterMap的JAVA DOC,...

mojinchuan的专栏 1263

PHP 对接建行生活订单推送接口

php对接建行订单推送

qq_43647026的博客 560

servlet之request.getparameterMap方法的使用

request.getparameterMap方法 返回Map<String,String[]>集合 Map<String, String[]>返回值名= req.getParameterMap(); 使用BeanUtils类的populate(Object,Map)方法来封装。 BeanUtils.populate( Object bean, Map properties ), 这个方法会遍历map<key, value>中的key,如果bean中有这...

一瓶旺仔通个宵 1540

BSW: Dcm模块配置--28服务

这个章节讲解下UDS中的28服务(Communcation Control)的配置,顾名思义,对当前ECU的通讯状态进行变更,主要设置应用报文,网络管理报文的收发控制,通常应用在刷写APP软件时,降低总线负载。这里首先要提醒的一点是,28服务几乎不需要手写代码,只有在客户需求要求前置条件不满足时报特定NRC时才需要填充代码。实际配置中主要涉及的模块有DCM,BSWM,ComM,RTE.2.BswM模块的配置。3.ComM模块的配置。1.DCM模块的配置。

Forever_Oct的博客 3086

RK3568开发板Debian系统屏幕旋转终极指南:从临时调整到永久设置

本文提供了RK3568开发板在Debian系统下实现屏幕旋转的完整解决方案。从使用xrandr命令进行临时调整,到修改X11配置文件实现永久设置,详细讲解了操作步骤与核心原理。指南还涵盖了多屏异显配置、触摸屏坐标校准等进阶技巧,帮助开发者彻底解决显示方向问题。

weixin_29181861的博客 389

Servlet request的常见方法和response的用法

request对象的类是HttpServletRequest,提供了很多有实用价值的方法,把之前遇到过的常见方法总体看一遍 一些常见方法 主要是用来查看信息,显示在控制台上,request的信息显示在服务端: request.getRequestURL(): 浏览器发出请求时的完整URL,包括协议 主机名 端口(如果有)" request.getRequestURI(): 浏览器发出请求的资源名部分,去掉了协议和主机名" request.getQueryString(): 请求行中的参数部分,只能显示以ge

yooppa的博客 797

代码实现 —— 基于 STM32 的可见光通信系统课程设计

基于STM32F103ZET6,源码如需移植,需要修改定时器捕获通道引脚,及定时器,如果你也有这个课设任务,希望对你有所帮助。

不善挽留 1万+

request.getParameter() 和request.getAttribute() 区别

【相同点】 1.都是HttpServletRequest类中的方法 2.都是用来传递数据用的 【不同点】 1.方法成对 只有getParameter(),没有setParameter() setAttribute()和getAttribute()是一对; 2.请求方式 getParameter():响应的是两个web组件之间为链接(重定向)关系时,如get和post表单提交请求,传递请求参数...

SKY的专栏 289

本地Qwen + ComfyUI 制作AI漫剧完整保姆级教程(2026年3月最新版)

本文介绍了一个零成本、本地化AI漫剧制作方案,整合Qwen大模型和ComfyUI工作流。Qwen负责剧本创作、分镜设计和提示词生成,ComfyUI处理图像生成、角色一致性保持和动态视频制作。该方案支持8GB显存设备运行(推荐12GB),包含详细安装指南和完整制作流程:从Ollama安装Qwen模型,到ComfyUI配置及必备节点安装,再到分镜生成、角色固定、批量出图和视频合成。文章还提供了常见问题解决方案和优化技巧,全流程1-2小时即可完成3分钟竖屏漫剧制作,适合新手和日更创作者。

posstos的博客 5542

上机任务一:空气质量指数 (air quality index,AQI是定量描述空气质量状况的指数。为了更好地了解和人们身体健康息息相关的天气状况,本书模拟生成500条某地区天气数据,一行样本对应一天

调整后的R平方为0.4308,考虑了模型中的自由度,它略低于多重R平方,说明模型的解释能力可能有限。总的来说,新的模型相对于之前的模型在AIC值上更优,包含了最高温度(X2)和最低温度(X3)这两个重要的预测因子,并且对AQI的解释能力较好。在表中,Df表示自由度,Sum Sq表示总平方和,Mean Sq表示均方(总平方和除以自由度),F value表示F统计量,Pr(>F)表示对应的p值。在分析这些结果时,需要关注系数的显著性(p值),系数的方向(正向或负向影响),以及系数的大小(估计值)。

Mrrunsen的博客 723

java web传递参数_Javaweb的八种传值方式

1.表单提交html自带的from方法,简单易懂,便于操作,依靠于标签中的type="submit"进行表单传输,或者根据js进行控制提交表单。其中由method属性决定以post或者get方式进行提交。jsp代码:账号:密码:java代码(根据name属性获取参数):String user = request.getParmeter("user_name");String user = requ...

weixin_32467749的博客 4086

ICV:Metal Fill Insertion流程

如果不想删除先前加的metal fill,可以使用signoff_create_metal_fill -mode add命令,当使用这个mode后,工具不会fix density问题,哪怕设置了signoff.create_metal_fill.fix_density_errors,设置这个mode后可以使用以下option控制metal fill 的插入。默认情况下,signoff_create_metal_fill是会删掉已经加进去的metal/via fill再重新加的。

m0_61544122的博客 1133

Servlet基础之HttpServletRequest详解

本文主要讲解了一个Http请求所经历的过程,以及Http请求的三部分内容,分别为请求行、请求头和请求体,以及如何通过HttpServletRequest获取对应的信息,通常来讲Servlet获取客户端数据的数据是第一步,因此HttpServletRequest对象是非常重要的,对其中的方法做到熟练掌握也可让我们在开发的过程中更加的得心应手。

丹丹的后花园 6万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

JavaWeb之Servlet详解

zxc412728的博客 9220

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JavaWeb 核心:HttpServletRequest 请求行、请求头、请求参数完整梳理

本文全面梳理了JavaWeb中HttpServletRequest对象的三大核心组成部分:请求行、请求头和请求参数。请求行包含请求方法、URI和协议版本,可通过getMethod()、getRequestURI()等方法获取;请求头传递客户端环境信息,如User-Agent、Cookie等,使用getHeader()方法读取;请求参数则通过GET或POST方式传递键值对数据,可用getParameter()系列方法获取。文章详细介绍了各组件的定义、获取方式、典型应用场景及注意事项,并提供了示例代码,为Jav

2201_75355172的博客 1609

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

HttpServletRequest请求对象详解(一篇就够了!!!)

本章节主要学习HttpServletRequest请求对象、HttpServletResponse响应对象相关方法,收录于JavaWeb基础专栏,该专栏主要学习JavaWeb开发原生框架、Servlet、JSP、请求对象、响应对象、Session会话对象、Filter过滤器、三层开发等知识点,欢迎童鞋们互相交流。觉得不错可以三连订阅喔。

秦老师的博客 2336

JavaWeb之Servlet(四)HttpServletRequest与HttpServletResponse

导航 ·JavaWeb之Servlet(一)Maven创建Servlet项目时的换源与运行时404的可能解决方案 ·JavaWeb之Servlet(二)Servlet生命周期方法与GET/POST请求分发 ·JavaWeb之Servlet(三)ServletConfig 和 ServletContext ·JavaWeb之Servlet(四)HttpServletRequest类 文章目录导航前言一、常用方法二、请求转发特点完 前言 –>视频教程传送门<– 一、常用方法 每当产生一次请求,S

Ho1aAs‘s Blog 665

【JavaWeb学习笔记】 9 - Servlet的相关类--ServletConfig、ServletContext、HttpServletRequest

1. ServletContext是一个接口, 它表示Servlet上下文对象2.一个web工程,只有一 一个ServletContext对象实例3. ServletContext对象是在web工程启动的时候创建,在web工程停止的时销毁4. ServletContext对象可以通过 ServletConfig.getServletContext() 方法获得对ServletContext对象的引用,也可以通过this.getServletContext()来获得其对象的引用。

qq_41891655的博客 1461

【JavaWeb07】动态 WEB 开发核心-Servlet

1.为什么会出现 Servlet 提出需求: 请用你现有的html css javascript,开发网站,比如可以让用户留言/购物/支付, 你能搞定吗? > 2.什么是 Servlet Servlet 在开发动态 WEB 工程中,得到广泛的应用,掌握好 Servlet 非常重要了, Servlet(基石)是 SpringMVC 的基础

qq_74232707的博客 1428

JavaWeb 15.详解Servlet及其源码

无需在程序运行时通过代码运行生成的资源,在程序运行之前就写好的资源,例如:html、css、js、img、音频文件和视频文件Servlet (server applet)是运行在服务端(tomcat)的Java小程序,是sun公司提供一套定义动态资源规范;从代码层面上来讲Servlet就是一个接口不是所有的JAVA类都能用于处理客户端请求,能处理客户端请求并做出响应的一套技术标准就是Servlet其主要功能在于交互式地浏览和修改数据,生成动态Web内容。

m0_73983707的博客 1986

【JavaWeb】Servlet系列——HttpServletRequest接口详解

HttpServletRequest是一个接口,全限定名称:jakarta.servlet.http.HttpServletRequestHttpServletRequest接口是Servlet规范中的一员。HttpServletRequest接口的父接口:ServletRequest 23.2 HttpServletRequest接口的实现类谁写的? HttpServletRequest对象是谁给创建的? 通过测试:org.apache.catalina.connector.RequestFaca

胖虎虎 6689

JavaWeb:HttpServletResponse和HttpServletRequest

请求响应流程图response1、response概述response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse。在客户端发出每个请求时,服务器都会创建一个response对象,并传入给Servlet.service()方法。response对象是用来对客户端进行响应的,这说明在service()方法中使用res

JackChan 6512

JavaWeb开发(四)HttpServletRequest

在Servlet Api中,定义了一个HttpServletRequest接口,它继承自ServletRequest,专门用于封装Http的请求。由于Http请求包含请求行、请求头和请求体三部分,因此在HttpServletRequest中分别定义了接受请求头、请求行和请求体的相关方法。

qq_36158551的博客 1686

Servlet | HttpServletRequest接口、通过request接口获取请求参数

Servlet | HttpServletRequest接口、通过request接口获取请求参数

m0_61933976的博客 9149

JavaWeb——ServletAPI之HttpServletRequest对象

一、概述 1、Request与Response Request 对象 和 Response 对象是由服务器(Tomcat)创建的 Request 对象是来获取请求消息 Response 对象是来设置响应消息 2、Request 体系结构 3、Servlet 体系结构 二、Request 常用功能 ...

Lemon 866
上一篇: HTTP协议的请求和响应学习笔记
下一篇: javaWeb项目之Servlet学习笔记----web路径
iamlinuxasd
博客等级 码龄10年 4粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值