Form.action value transfer problem

WBOY
Release: 2016-08-31 08:41:45
Original
2020 people have browsed it

When you enter the url through the browser address bar and request resources through ?, the parameter after ? is called the "query string", which will trigger the doGet() of the background Servlet, because the direct access method through the browser address bar is the GET method .


Let’s take a look at the impact of form’s method attribute on parameter passing.

Original form:








The first case:
When the action attribute of the form above is not written, directly clicking the "Submit" button will trigger the submit event of the form. This At this time, you can find through the console of Firefox browser:
The message header contains the following key information: (1) The request address is followed by '?' to pass parameters (2) The request method is GET




Parameter information: Query string




When specifying the method attribute of the form:







Second case:
The message header contains the following key information: (1) Behind the request address No parameters are passed (2) The request method is POST



Parameter information: Form data




The response of the above two methods is to display the current page after refreshing. Because the form does not specify the action attribute, the default submitted address is the current page.

Now access the Servlet by specifying the action attribute to learn more about the method attribute.

TestServlet.java core source code:

@WebServlet("/servlet/TestServlet")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Servlet Exception , IOException {
response.getWriter().print("doGet()");
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().print("doPost( )");
}

}


The third case: method="get" action="/test/servlet/TestServlet"







The above message header and parameters are the same as the first case, but the background responds with a doGet().





The fourth case: method="post" action="/test/servlet/TestServlet"





< /form>

The above message header and parameters are the same as the first case, but the background responds with a doPost().





TestServlet.java Add the code to get parameters:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String param = request.getParameter("type");
response.getWriter().print ("doGet() get type="+param);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String param = request.getParameter("type");
response.getWriter( ).print("doPost() get type="+param);
}


The fifth case, method="get" passes the parameter action = "/servlet/TestServlet?type=01" after the action, and at the same time Get the parameters in the background Servlet

The browser address bar at this time: http://localhost:8080/test/servlet/TestServlet?username=



It can be found that the doGet() in the background cannot obtain the parameter type.
At the same time, it is found that the type parameter is not added to the "query string"






The sixth case, method="post" passes the parameter action = "/servlet/TestServlet?type=01" after the action, and obtains the parameters in the background Servlet at the same time




You can find that the doPost() in the background canget the parameter type.
At the same time, the parameter column is a little different from before:
There is both "query string" and "form data"




So the above gives us a revelation, that is, when passing parameters after the action of the form, we need to manually specify the method="post" of the form, otherwise we will not be able to get the parameters behind the ?;
Thinking Misunderstanding: Previously we passed parameters through the URL in the browser address bar, also through? To achieve this, it ultimately calls the doGet() method, so we think that the action in the form (default method="get") can be passed? Come and pass on the ginseng.


Final reason: (Personal summary) When submitting form data in the get method, the URL will be reorganized. It will only assemble the form data into a "query string" and submit it to the URL specified in the action of the form, so the original The parameters passed in the ? method will not be submitted because the URL is lost after reorganization.

But when the form is submitted in post mode, it will save the form data and the parameters after ? separately, and submit them together to the url specified by the action in the form.

(reference resource) HTML Form: why action can't have get value in it?
http://stackoverflow.com/questions/3548795/html-form-why-action-cant-have-get-value-in -it




Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!