JavaEE开发模式
-
纯Servlet开发
只用Servlet开发,html内容混在Java代码中不利于开发维护。 -
纯JSP开发
比起纯Servlet开发,JSP改为了在HTML编写java代码,便于页面开发。大量的java代码嵌在HTML中,同样非常混乱,不利于开发维护。 -
JSP+JSP标签技术开发
将JSP中的java代码通过标签技术替代,减少了jsp页面中的java代码,jsp更加简洁。大量的自定义标签开发非常麻烦,大量的自定义标签混在html标签中,不利于开发维护。 -
JSP + JavaBean(模式一)
JSP负责接收请求 封装数据到Bean 调用Bean中的业务逻辑代码 获取结果 展示数据
JavaBean负责封装数据 处理数据业务逻辑
初步实现了业务逻辑和数据展示的分离,结构变的跟加清晰,便于开发维护。
JSP仍然在负责处理页面展示以外的其他功能,仍然不可避免的要编写java代码
- Servlet+JavaBean +JSP(模式二)
Servlet负责接收请求,封装数据到Bean,调用Bean中的业务逻辑代码 获取结果数据 转发到JSP中展示
JavaBean负责封装数据 处理数据业务逻辑
JPS负责展示数据
每个部分只负责自己最擅长的工作,结构清晰,便于开发维护。
-
MVC设计思想
MVC设计模式认为,任何软件都可以分为负责程序执行过程的控制器(Controller) 负责业务数据分装处理的模型(Model) 和负责用户交互的视图(View)三部分组成。MVC设计思想要求软件在设计的过程中,应该将这三部分互相独立,使软件结构更加清晰,便于开发维护。
MVC设计思想不是JavaEE特有的思想,普遍应用在软件开发领域,指导软件的开发设计。 -
JavaEE的经典三层架构
在JavaEE的经典三层架构中,将JavaBean的功能进一步细分,JavaBean只负责数据封装,Service负责业务逻辑处理,Dao负责数据库的访问。
JavaEE的经典三层架仍然符合MVC设计模式,可以说是模式二的进一步发展。比起模式二,模块划分跟加清晰,各司其职,便于开发维护。
目前JavaEE开发中主要采用的就是这种开发模式。
基于JavaEE的经典三层架构改造EasyMall
- 创建EasyMall项目
a. 导入第三方开发包
b. 导入配置文件
c. 导入其他资源文件
d. 创建出对应包结构
e. 导入javabean类
f. 导入相关工具类
- 开发主页
直接将原项目中的主页拷贝即可
- 开发注册功能
a. 导入注册页面
b. 开发自定义异常
自定义MsgException,为了用起来方便,将其定义为RuntimeException,并提供了可以接受异常信息的构造方法。
package cn.tedu.exception;
public class MsgException extends RuntimeException {
public MsgException() {
}
public MsgException(String msg) {
super(msg);
}
}
c. 开发RegistServlet
在web包下创建RegistServlet,将原来的RegistServlet导入,将其中处理业务逻辑和数据访问的代码删除,改为调用Service中的业务方法
在这个过程中用到了Service中不存在的方法,则先创建出这个方法,后续再补。
package cn.tedu.web;
import cn.tedu.domain.User;
import cn.tedu.exception.MsgException;
import cn.tedu.service.UserService;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet(urlPatterns = "/RegistServlet")
public class RegistServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//0.解决乱码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//1.获取请求参数
String username = request.getParameter("username").trim();
String password = request.getParameter("password").trim();
String password2 = request.getParameter("password2").trim();
String nickname = request.getParameter("nickname").trim();
String email = request.getParameter("email").trim();
String valistr = request.getParameter("valistr").trim();
//2.校验数据
//--校验验证码
HttpSession session = request.getSession();
String valistr2 = (String) session.getAttribute("valistr");
if(valistr == null || valistr2 == null || !valistr.equals(valistr2)){
request.setAttribute("msg","验证码不正确!");
request.getRequestDispatcher("/regist.jsp").forward(request,response);
return;
}
//--校验数据
if