之前写了一篇Asp.Net 三层架构的介绍,刚好最近玩了一下java web,嗯,好的,正题开始:
1. 结构名词:之前介绍了.net三层架构的习惯叫法叫做DAL(数据访问层),BLL(业务逻辑层),PL(表示层),除此之外再加一个Model辅助层里面包含与表对应的类和一个DBHelper类
而java中习惯性叫法略有不同,也只是叫法不同,思想还是一样的,java叫:DAO(数据持久),Service(服务层),Servlet(PL表示层),同常也带一个辅助层
2.实操(itellij 专业版,注意必须是专业版)
(1)创建web项目
先创建一个普通项目:
然后添加框架支持:
选中项目然后右键
然后照做,勾好点确定:
src下建一个软件包通常叫Servlet,也就是Servlet层所在
(2)创建servlet 项目,2023版之前的itellij 创建项目如果没有找到servlet 网上有很多行之有效的方法(当然,如果没用也可以看下去,我这个方法不挑版本),2023版的itellij 由于现在servlet不流行了,官方已将模板从idea移除,需要建自定义模板:
官宣:
官宣地址:
d2023.1 更新后无法创建 servlet、Web 过滤器、Web 侦听器:IDEA-316701 (jetbrains.com)
自定义模板功能位置:
英文菜单:
中文:
模板:
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
#parse("File Header.java")
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "${Class_Name}", value = "/${Class_Name}")
public class ${Class_Name} extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
在Servlet包中建Servlet类:
报错了,因为没有导包 :
别慌,不用导,光标移到标红处,直接alt +enter,然后你懂的:
或者把光标移上去:
直接下载
好了
(2).创建好项目后,另外三层的包也建好(pojo是我的一个辅助层,具体和上面说的一样):
(3)写好数据表类,一张表对应一个类
(4)从dao层开始处理需求:
从数据库获取数据、增删改的代码都搞里头:
我这里用了接口来对方法的层与层之间的调用做了一个统一规范,您要嫌麻烦直接就写一个GradeDao(命名规范通常以Dao结尾)这样类似的类的就好了,然后增删改方法搞里头,毕竟三层架构只是一种思想,具体实现还得看您自己
(5)Service层调用Dao层:
GradeDao gradeDao=new GradeDaoImpl();是调用GradeDao 这个接口的实现类,也有叫继承类的
您要不用接口,直接就GradeDao gradeDao=new GradeDao();调用Dao层的类和方法
(6)Servlet层调用Service层
这里的doGet就是get方法的访问方法,还有一个doPost就是post
代码说明:
上面我那个删除功能用的是ajax局部刷新,下面那个展示编辑页的数据用了同步,还是那句话,具体看您。加uft-8的代码部分是为了不让中文乱码,Gson 是一个谷歌的一个转json格式的库,github地址:GitHub - google/gson: A Java serialization/deserialization library to convert Java Objects into JSON and back
获取前端传过来的参数用:request.getParameter(参数名) 参数名需要同前端定义的一致
异步的话就正常按照ajax的使用流程来走就ok了,我这里用了vue+jQuery
同步的话可以这样:
<%
//这里写java代码,前面Servlet里面setAtrribute,这里就getAtrribute
%>
这段代码在html代码里穿插java代码,用java 循环构建多个option标签,里面取值用<%=你的java对象%>
假如<%=grade.getGradeId()%>取到的值为1,<%=grade.getGradeName()%>取到的值为“一年级”,那么编译过后就是