JavaWeb书城项目(四)——代码优化

前三部分我们已经完成了书城项目的登录与注册功能,第四部分我们对之前的代码进行优化。

合并Servlet

在实际的开发中,一个模块,一般只使用一个 Servlet 程序,用户的注册与登录都属于用户模块,因此只需要一个 Servlet 程序即可,所以我们将 LoginServletRegistSerlet 程序合并为一个 UserServlet 程序。
那么一个请求过来,如何知道他是注册还是登录呢?
这时我们就要用到表单项的隐藏域来解决。
登录表单隐藏域
注册表单隐藏域
这样,我们在用 Servlet 程序接收请求时,就能根据 namevalue 项来判断其是注册还是登录。


反射优化

用户模块不止有登录和注册功能,还会有注销,修改密码等其它功能,如果这时都放在一个 Servlet 里,那么代码必定有很多 if...else...,这样代码就会显得很冗杂。我们可以使用反射优化 if...else...
反射优化
这样两行代码就能代替繁琐的 if...else,,,


抽取BaseServlet程序

抽取BaseServlet
因为我们不止一个模块,除了用户模块,还会有图书模块等,这样其反射优化都是一样的,那么我们可以抽取出父类 BaseServlet 程序,那么其它模块就可以继承这个模块,达到复用代码的目的。
BaseServlet程序:

package com.atguigu.web;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;

public abstract class BaseServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String action = req.getParameter("action");

        try {
            // 获取action业务鉴别字符串,获得相应的业务 方法反射对象
            Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
            // 调用目标业务 方法
            method.invoke(this, req, resp);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

数据的封装和抽取BeanUtils的使用

我们一般会将数据封装进JavaBean里,但如果通过调用 Set 方法会使代码很冗余,这时我们可以使用第三方工具类 BeanUtils ,它可以用于把 Map 中的值注入到 JavaBean 中。

  1. 导入需要的 jar 包:
    commons-beanutils-1.8.0.jar
    commons-logging-1.1.1.jar
  2. 编写 WebUtils 工具类使用
    WebUtils工具类:
package com.atguigu.utils;

import org.apache.commons.beanutils.BeanUtils;

import java.lang.reflect.InvocationTargetException;
import java.util.Map;

public class WebUtils {
    /**
     * 把Map中的值注入到JavaBean中
     * @param value
     * @param bean
     * @param <T>
     * @return
     */
    public static <T> T copyParamToBean(Map value , T bean ){
        try {
            System.out.println("注入之前:" + bean);
            /**
             * 把所有请求的参数都注入到bean对象中
             */
            BeanUtils.populate(bean, value);
            System.out.println("注入之后:" + bean);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bean;
    }
}

  1. 在程序中加入如下代码即可调用方法将请求参数注入到JavaBean
    调用方法

使用EL表达式修改表单回显

我们可以使用EL表达式来修改表单回显,这样能使代码更简洁。
修改login,jsp
修改regist.jsp

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值