2.1 HttpServletRequest class
Most of the work your servlet has to do based on the information received from the request. The object is responsible for it HttpServletRequest
, which the container will pass to your servlet (to the method service
or methods doGet()
, doPost()
etc.)
This object has quite a few methods, since it simply stores the request data, and through it you can interact with the container.
Methods can be divided into 2 large groups:
- Methods related to user authorization
- Methods for working with request data
I will give the user authorization methods in the form of a table, but we will not analyze them. The fact is that they are very rarely used to authorize a user. All popular frameworks use their own, much more advanced approaches to authorization.
I should list them, but again, I haven't seen anyone use them.
Method | Description | |
---|---|---|
1 | authenticate(HttpServletResponse) |
Performs response authentication |
2 | changeSessionId() |
Forcibly change the session ID |
3 | getAuthType() |
Returns the type of authentication that is used: ASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH |
4 | getRemoteUser() |
Returns user login |
5 | getRequestedSessionId() |
Returns the SessionID of the client |
6 | getSession() |
Returns an HttpSession object |
7 | getUserPrincipal() |
Returns a java.security.Principal object |
8 | login(username, password) |
Performs user login |
9 | logout() |
Logs out the user session |
2.2 Request data
The second group of methods is much more interesting. What kind of data do we have in the request?
- http method
- URI
- Options
- Titles
Let's see what methods are available for working with them:
Method | Description | |
---|---|---|
1 | getMethod() |
Returns HTTP method: GET, POST, DELETE, ... |
2 | getRequestURI() |
Returns the request URI: http://codegym.cc/my/data |
3 | getRequestURL() |
Returns the request URL: http://codegym.cc/my/data |
4 | getQueryString() |
Returns Query, i.e. everything after the ? |
5 | getParameterMap() |
Returns a list of query parameters |
6 | getParameter(String name) |
Returns the value of the parameter by its name |
7 | getContentType() |
Returns MimeType request body |
8 | getReader() |
Reader to read request body as text |
9 | getInputStream() |
InputStream to read request body as byte[] |
10 | getSession() |
Returns an HttpSession object |
eleven | getCookies() |
Returns an array of Cookie[] objects |
12 | getHeaderNames() |
Returns a list of titles, names only |
13 | getHeader(String name) |
Returns the header value by name |
14 | getServletPath() |
Returns the part of the URL that refers to the servlet |
15 | getContextPath() |
Returns the part of the URI that specifies the content of the request |
And that's not even all the methods ...
Although after we have studied the HTTP protocol and learned how to work with HttpClient, everything is more or less familiar here, isn't it?
Let's write a servlet that can be passed text and a color to, and it will return an HTML page with that text written in the specified color. How do you like the idea?
Let's start by writing our servlet:
public class ColorTextServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
//write your code here
}
}
Now we need to get the text and color passed from the URI by the user:
public class ColorTextServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
// Getting the parameter “text” and “color” from request
String text= request.getParameter("text");
String color = request.getParameter("color");
}
}
And finally, you need to output the text as HTML. We will cover this in the next lecture, but here I will give a little hint:
public class ColorTextServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
// Get the "text" and "color" parameters from the request
String text = request.getParameter("text");
String color = request.getParameter("color");
// Print the HTML as a response to the browser
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head> <title> ColorTextServlet </title> </head>");
out.println("<body>");
out.println("<h1 style="color:"+color+">"+text+"</h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
}