Servlet关系视图
- 获取路径的方法
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1,获取虚拟目录名称
String contextPath = req.getContextPath();
System.out.println(contextPath);
//2,获取Servlet映射路径
String servletPath = req.getServletPath();
System.out.println(servletPath);
//3,获取访问者ip
String remoteAddr = req.getRemoteAddr();
System.out.println(remoteAddr);
//4,获取请求消息的数据
String queryString = req.getQueryString();
System.out.println(queryString);
//5,获取统一资源标识符
String requestURI = req.getRequestURI();
System.out.println(requestURI);
//6,获取统一资源定位符
StringBuffer requestURL = req.getRequestURL();
System.out.println(requestURL);
}
- 获取请求头信息的方法
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1,根据请求头名称获取一个值
String connection = req.getHeader("connection");
System.out.println(connection);
// 2,根据请求头名称获取多个值
Enumeration<String> headers = req.getHeaders("accept-encoding");
while (headers.hasMoreElements()) {
String value = headers.nextElement();
System.out.println(value);
}
// 3,获取所有的请求头名称
Enumeration<String> headerNames = req.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
String value = req.getHeader(headerName);
System.out.println(headerName+","+value);
}
}
- 获取请求参数信息的方法
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1,根据名称获取数据
String userName = req.getParameter("userName");
System.out.println(userName);
String passWord = req.getParameter("passWord");
System.out.println(passWord);
// 2,根据名称获取所有数据
String[] sexes = req.getParameterValues("sex");
for (String sex : sexes) {
System.out.println(sex);
}
// 3,获取所有名称
Enumeration<String> parameterNames = req.getParameterNames();
while (parameterNames.hasMoreElements()) {
String name = parameterNames.nextElement();
System.out.println(name);
}
// 4,获取所有参数的键值对(拿到注册表单的具体名称以及对应的数据值)
Map<String, String[]> map = req.getParameterMap();
for (String key : map.keySet()) {
String[] values = map.get(key);
System.out.print(key + ":");
for (String value : values) {
System.out.print(value);
}
System.out.println();
}
}
- 参数反射封装对象(较繁琐)
如果页面当中的数据过多,想要拿到每个数据就得调用多次 getParameter() 的方法,很麻烦,那么就可以用 getParameterMap() 拿到所有键值对信息
@WebServlet(urlPatterns = "/Register3")
public class Register3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1,获取所有数据
Map<String, String[]> map = req.getParameterMap();
// 2,封装用户对象
User user=new User();
// 2,1遍历集合
for (String name : map.keySet()) {
String[] values = map.get(name);//可能有多个值
// 2.2,获取用户对象的属性描述器
// 根据name拿到用户对象指定成员变量的get和set方法
try {
PropertyDescriptor pd = new PropertyDescriptor(name,user.getClass());
// 2.3,获取对应的set方法
Method writeMethod = pd.getWriteMethod();
// 2.4,执行对应的方法
if(values.length>1){
writeMethod.invoke(user,(Object) values);
}else{
writeMethod.invoke(user,values);
}
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println(user);
}
}
- 工具类封装对象(非常方便)
需要的jar包:
如果没有将jar包导入到war包中,就会报505
需要:
@WebServlet(urlPatterns = "/Register4")
public class Register4 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1,获取所有的数据
Map<String, String[]> map = req.getParameterMap();
// 2,封装用户对象
User user=new User();
try {
BeanUtils.populate(user,map);
} catch (Exception e) {
e.printStackTrace();
}
// 3,输出对象
System.out.println(user);
}
}