(二)Servlet Request练习

  1. 保存表单提交数据
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;

@WebServlet("/register")
public class AnswerThreeRegisterServlet extends HttpServlet {
   /**
    * 注册前端页面设置的post请求方式,那么逻辑放到dopost中
    * @param request
    * @param response
    * @throws ServletException
    * @throws IOException
    */
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       Map<String, String[]> parameterMap = request.getParameterMap();
       User user = new User();
       try {
           BeanUtils.toBean(parameterMap, user);
       } catch (InvocationTargetException e) {
           e.printStackTrace();
       } catch (IllegalAccessException e) {
           e.printStackTrace();
       }
       response.getWriter().println(user);
   }

   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

   }
}
import com.sun.xml.internal.ws.util.StringUtils;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.Set;

public class BeanUtils {

   private static final String PRE_FIX = "set";

   /**
    * 传入一个map,传入一个对象,将map中的键值对赋值给对象对应的属性
    * map中的key的名称要与对象中对应的属性名称相同
    * @param parameterMap
    * @param user
    */
   public static void toBean(Map<String, String[]> parameterMap, Object user) throws InvocationTargetException, IllegalAccessException {
       Set<String> keySet = parameterMap.keySet();
       Class<?> userClass = user.getClass();
       for (String key : keySet) {
           String[] values = parameterMap.get(key);
           Field field = null;
           Method method = null;
           String simpleName = "";
           try {
               field = userClass.getDeclaredField(key);
               //得到该参数的简单数据类型
               simpleName = field.getType().getSimpleName();
               //调用相应的set方法,比如setUsername,但是U是大写的 将字符串的首字母大写
               method = userClass.getDeclaredMethod(PRE_FIX + StringUtils.capitalize(key), field.getType());
           } catch (NoSuchFieldException | NoSuchMethodException e) {
               e.printStackTrace();
           }
           if("String".equalsIgnoreCase(simpleName)){
               method.invoke(user,values[0]);
           }else if("int".equalsIgnoreCase(simpleName)){
               method.invoke(user, Integer.parseInt(values[0]));
           }else if("double".equalsIgnoreCase(simpleName)){
               method.invoke(user, Double.parseDouble(values[0]));
           }else if("String[]".equalsIgnoreCase(simpleName)){
               //这个地方需要注意,要用object数组包装一下,否则会出现参数个数不匹配
               //invoke接收object[]类型参数,会把数组中的每一个元素作为方法的一个参数
               //如果直接传values过去,相当于传入多个参数,而用object数组包一下
               //则相当于只传入一个参数,参数是一个数组
               method.invoke(user,new Object[]{values});
           }else{
               throw new UnsupportedOperationException("暂不支持除了简单数据类型以外的封装");
           }
       }
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSP100选择题 适合考前练习 1 J2EE 中,()类的()方法用于创建对话。(选择一项) a) HttpServletRequest、getSession b) HttpServletResponse、newSession c) HtttpSession、newInstance d) HttpSession、getSession 2 给定一个 Servlet 的doGet方法中的代码片段,如下: request.setAttribute(“name”,”zhang”); response.sendRedirect(“http://localhost:8080/servlet/MyServlt”); 那么在 MyServlet 中可以使用()方法把属性 name的值取出来。(选择一项) a) String str=request.getAttribute(“name”); b) String str=(String)request.getAttribute(“name”); c) Object str=request.getAttribute(“name”); d) 无法取出来 3.在Servlet里,能实现重定向的方法有()。(选择两项) A.运用javax.servlet.http.HttpServletRequest接口的sendRedirect方法 B.运用javax.servlet.http.HttpServletResponse接口的sendRedirect方法 C.运用javax.servlet.RequestDispatcher接口的forward方法 D.运用javax.servlet.ResponseDispatcher接口的forward方法 4.利用MyEclipse开发Servlet,下列说法正确的是( )。(只选两项) A. MyEclipse可自动产生web.xml B. MyEclipse不能自动产生web.xml,需要手工编写 C.可利用MyEclipse自带的Tomcat作为Servlet容器 D. MyEclipse没有自带Tomcat,需要自己安装配置。 5.编写Servlet 的doPost方法时,需要抛出异常为()。(只选一项) A.ServletException, IOException B.ServletException, RemoteException C.HttpServletException, IOException D.HttpServletException, RemoteException 6.有关会话跟踪技术描述正确的是()。(选择三项) A.Cookie是Web服务器发送给客户端的一小段信息,客户端请求时,可以读取该信息发送到服务器端 B.关闭浏览器意味着会话ID丢失,但所有与原会话关联的会话数据仍保留在服务器上,直至会话过期 C.在禁用Cookie时可以使用URL重写技术跟踪会话 D.隐藏表单域将字段添加到HTML表单并在客户端浏览器中显示 …………
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值