JavaWeb_mvc
JavaWeb_mvc00_dispatcher:引入使用中央控制器。DispatcherServlet类的工作分为两部分:
根据url定位到能够处理这个请求的Controller组件
通过反射调用Controller组件中的方法(index、add、del等)
获取参数
获取即将要调用的方法的参数签名信息: Parameter[] parameters = method.getParameters();
通过parameter.getName()获取参数的名称;准备了Object[] parameterValues 这个数组用来存放对应参数的参数值
另外,我们需要考虑参数的类型问题,需要做类型转化的工作。通过parameter.getType()获取参数的类型
执行方法
Object returnObj = method.invoke(controllerBean , parameterValues);
视图处理
String returnStr = (String)returnObj;
if(returnStr.startWith(“redirect:”)){
…
}else if…
JavaWeb_mvc01_controller:优化Controller中获取参数和重定向/转发的操作。
- 关于XML:
概念
HTML:超文本标记语言
XML:可扩展的标记语言
可以认为:HTML是XML的子集。- XML的三个部分:
- XML声明 , 必须在文件的第一行。
- DTD 文档类型定义
- XML正文
- Java8新特性
Parameter[] parameters = method.getParameters();
String name = parameters[0].getName();
默认获取名称为args0、1等。其实可以获取到属性名。
操作:
IDEA下:文件——设置——构建、运行、部署——Java编译器——常见错误:argument type mismatch
使用反射传入pageNo时,parameterValue获取的是字符串类型。所以错误。
Servlet中的初始化方法有两个:init() , init(config)
其中带参数的方法代码如下:
public void init(ServletConfig config) throws ServletException {
this.config = config ;
init();
}
//另外一个无参的init方法如下:
public void init() throws ServletException{
}
如果我们想要在Servlet初始化时做一些准备工作,那么我们可以重写init方法。
我们可以通过如下步骤去获取初始化设置的数据
<servlet>
<servlet-name>Demo01Servletservlet-name>
<servlet-class>com.atguigu.servlet.Demo01Servletservlet-class>
<init-param>
<param-name>helloparam-name>
<param-value>worldparam-value>
init-param>
<init-param>
<param-name>unameparam-name>
<param-value>jimparam-value>
init-param>
servlet>
<servlet-mapping>
<servlet-name>Demo01Servletservlet-name>
<url-pattern>/demo01url-pattern>
servlet-mapping>
也可以通过注解的方式进行配置:
@WebServlet(urlPatterns = {"/demo01"} ,
initParams = {
@WebInitParam(name="hello",value="world"),
@WebInitParam(name="uname",value="jim")
})
学习Servlet中的ServletContext(application)和
首先在配置文件中进行配置:
<context-param>
<param-name>view-prefixparam-name>
<param-value>/param-value>
context-param>
<context-param>
<param-name>view-suffixparam-name>
<param-value>.htmlparam-value>
context-param>
ServletContxt servletContext = getServletContext();request.getServletContext();、 session.getServletContext()servletContext.getInitParameter();业务层
区分业务对象和数据访问对象:
1) DAO中的方法都是单精度方法(细粒度方法)。什么叫单精度?一个方法只考虑一个操作,比如添加,那就是insert操作、查询那就是select操作…
2) BO中的方法属于业务方法,而实际的业务是比较复杂的,因此业务方法的粒度是比较粗的。举例:
注册这个功能属于业务功能,也就是说注册这个方法属于业务方法。
那么这个业务方法中包含了多个DAO方法。也就是说注册这个业务功能需要通过多个DAO方法的组合调用,从而完成注册功能的开发。
注册:
检查用户名是否已经被注册 - DAO中的select操作
向用户表新增一条新用户记录 - DAO中的insert操作
向用户积分表新增一条记录(新用户默认初始化积分100分) - DAO中的insert操作等。
在库存系统中添加业务层组件。见
JavaWeb_mvc02_BO
IOC
控制反转:
依赖注入:
<bean id="fruit" class="FruitController">
<property name="fruitService" ref="fruitService"/>
bean>
现在的项目架构:
