目录
一、知识点
二、例子
2.1 例1 获取请求参数
2.1.1 代码
2.1.2 测试结果
2.2 例2 根据请求参数的名字,返回请求参数对应的字符串数组
2.2.1 在index.jsp编写表单
2.2.2 修改Login.java代码
2.2.3 测试结果
2.3 例3 请求参数返回枚举及Map对象
2.3.1 在Login.java添加代码
2.3.2 测试结果
三、HttpServletRequest(ServletReques子接口)
3.1 例子:获取客户端的URI
3.1.1 实现代码
3.1.2 测试结果
本章讲的是servet请求,也比较重要的章节,ServletRequest看名字就知道是处理请求的。
一、知识点
如何在Serlvet中获取请求信息:
1.Servlet 的service()方法用于应答请求:因为每次请求都会调用service()方法
public void service(ServletRequest request, ServletResponse response )
throws ServletException, IOException
ServletRequest:封装了请求信息。可以从中获取到任何的请求信息。
ServletResponse:封装了响应信息,如果想给用户什么响应,具体可以使用该接口的方法实现.
这两个接口的实现类都是服务器给予实现的,并在服务器调用service方法时传入。
2.ServletRequest: 封装了请求信息。可以从中获取到任何的请求信息。
1)获取请求参数:
String getParameter(string name):根据请求参数的名字,近回参数值。
若请求参数有多个值(例如checkbox),该方法只能获取到第一个提交的值。
String[] getParametervalues(string name): 根据请求参数的名字,近回请求参数对应的字符串数组。
Enumeration getParameterNames():返回参数名对应的Enumeration对象,
类似于Serv1etConfig(或ServletContext)的getInitParameterNames()方法。
Map getParameterMap(): 返回请求参数的键值对: key: 参数名, value: 参数值, String 数组类型。
2)获取请求的URL:
HttpServletRequest httpServletRequest = (HttpServ1etRequest) request;
String requestURI = httpServ1etRequest.getRequestURI();
System.out.println(requestURI); // /day_ 29/1oginServ1et
3)获取请求方式:
String method = httpServletRequest.getMethod();
System.out.print1n(method); //GET
4)若是-一个GET请求,获取请求参数对应的那个字符串,即?后的那个字符串.
String queryString = httpServletRequest.getQueryString();
//user=hua&password=123456&interesting=game&interesting=par
System.out.print1n(querystring);
5)获取请求的Serlvet的映射路径
String servletPath = httpServletRequest.getServletPath();
System.out.print1n(servletPath); // /loginServ1et
6)和attribute相关的几个方法;
3. HttpServletRequest:是SerlvetRequest的子接口。针对于HTTP请求所定义。里边包含了大量获取HTTP请求相关的方法。
更多方便请查看https://javaee.github.io/javaee-spec/javadocs/中的ServletRequest接口
二、例子
下面所有例子都一样,src下建立一个Login类并继承Servlet接口,原始代码如下:
import javax.servlet.*;
import java.io.IOException;
public class Login implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
web.xm配置添加一个路由映射,如下:
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
整个web.xlm配置如下:这个配置包括了上一章的web.xml配置
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>t1</servlet-name>
<servlet-class>T1</servlet-class>
<!-- 在<servlet>下面是它的二级配置-->
<init-param>
<param-name>user</param-name>
<param-value>hua</param-value>
</init-param>
<init-param>
<param-name>pwd</param-name>
<param-value>123</param-value>
</init-param>
</servlet>
<!-- 这个是在<servlet>外面,不是它的二级配置-->
<context-param>
<param-name>ctx</param-name>
<param-value>this is context-param value </param-value>
</context-param>
<servlet-mapping>
<servlet-name>t1</servlet-name>
<url-pattern>/t1</url-pattern>
</servlet-mapping>
2.1 例1 获取请求参数
string getParameter(String name): 根据请求参数的名字,返回参数值。
若请求参数有多个值(例如checkbox),该方法只能获取到第一个提交的值。
2.1.1 代码
Login.java其中一个代码修改如下:
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
String user = servletRequest.getParameter("user");
String pwd = servletRequest.getParameter("pwd");
System.out.println(user+":"+pwd);
}
2.1.2 测试结果
根据HTML知识,要用Get方式传参用“?参数名=值”或“?参数名1=值1&参数名2=值2..”
打开浏览器尾部添加 “/login?user=hua&pwd=123”,我这里是
http://localhost:8080/myservlet_war_exploded/login?user=hua&pwd=123
看到空白页之后,再查看ide输出窗口为:
2.2 例2 根据请求参数的名字,返回请求参数对应的字符串数组
什么情况下才返回 数组呢?多选就是了
String[] getParameterValues(String name):根据请求参数的名字,返回请求参数对应的字符串数组。
2.2.1 在index.jsp编写表单
在index.jsp编写表单,代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>测试</title>
</head>
<body>
<form action="login" method="post">
user: <input type="text" name="user" />
pwd: <input type="password" name="pwd" />
<br>
爱好:<br>
<input type="checkbox" name="interesting" value="reading" />阅读
<input type="checkbox" name="interesting" value="game" />游戏
<input type="checkbox" name="interesting" value="party" />派对
<input type="checkbox" name="interesting" value="shopping" />购物
<input type="checkbox" name="interesting" value="sport" />体育
<input type="checkbox" name="interesting" value="TV" />电视<br/>
<input type="submit" style="margin-left: 390px" value="提交"/>
</form>
</body>
</html>
运行tomcat,自动跳出浏览器,我的是火狐,效果图如下:
2.2.2 修改Login.java代码
修改Login.java代码如下:
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
String user = servletRequest.getParameter("user");
String pwd = servletRequest.getParameter("pwd");
System.out.println(user+":"+pwd);
String[] interestings =servletRequest.getParameterValues("interesting");
for(String interest: interestings){
System.out.println("-->"+interest);
}
}
2.2.3 测试结果
重启tomcat,在打开浏览器输入下面内容:
点“提交”,ide显示结果为:
2.3 例3 请求参数返回枚举及Map对象
Enumeration getParameterNames(): 返回参数名对应的Enumeration对象,
类似于ServletConfig(或ServletContext)的getInitPar ameterNames()方法。
Map getParameterMap(): 返回请求参数的键值对: key: 参数名, value: 参数值,string数组类型.
2.3.1 在Login.java添加代码
在Login.java修改如下:
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
String user = servletRequest.getParameter("user");
String pwd = servletRequest.getParameter("pwd");
System.out.println(user+":"+pwd);
String[] interestings =servletRequest.getParameterValues("interesting");
for(String interest: interestings){
System.out.println("-->"+interest);
}
Enumeration<String> names = servletRequest.getParameterNames();
while (names.hasMoreElements()){
String name = names.nextElement();
String val = servletRequest.getParameter(name);
System.out.println("^^"+name+": "+val);
}
Map<String,String[]> map = servletRequest.getParameterMap();
for (Map.Entry<String,String[]> entry : map.entrySet()) {
System.out.println("**"+entry.getKey()+": "+ Arrays.asList(entry));
}
}
2.3.2 测试结果
重启tomcat,在打开浏览器输入下面内容:
点“提交”,ide显示结果为:
三、HttpServletRequest(ServletReques子接口)
HttpServletRequest子接口更针对Http请求方面,封装了比servlet更多的http方面的方法
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。
3.1 例子:获取客户端的URI
3.1.1 实现代码
在Loin.java类中的service()方法直接添加如下内容
//这个是在顶部添加的导入类
import javax.servlet.http.HttpServletRequest;
//HttpServletRequest是ServletRequest的子接口,可以强转为ServletRequest接口
HttpServletRequest httpServletRequest=(HttpServletRequest) servletRequest;
String requestURI = httpServletRequest.getRequestURI();
System.out.println(requestURI);
3.1.2 测试结果
重启tomcat,在打开浏览器输入下面内容:
点“提交”,ide显示结果为: