javaweb学习Day10

来源:尚硅谷2022版javaweb

今日内容:

1. 日期和字符串之间的格式化

// String -> java.util.Date
String dateStr1 = "2021-12-30 12:59:59";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
    Date date1 = sdf.parse(dateStr1);
} catch (ParseException e) {
    e.printStackTrace();
}

// Date -> String
Date date2 = new Date();
String dateStr2 = sdf.format(date2);

2. thymeleaf中使用#dates这个公共的内置对象

${#dates.format(topic.topicDate ,‘yyyy-MM-dd HH:mm:ss’)}

3. 系统启动时,我们访问的页面是: http://localhost:8080/pro23/page.do?operate=page&page=login 为什么不是: http://localhost:8080/pro23/login.html ?

答: 如果是后者,那么属于直接访问静态页面。那么页面上的thymeleaf表达式(标签)浏览器是不能识别的
我们访问前者的目的其实就是要执行 ViewBaseServlet中的processTemplete()

4. http://localhost:8080/pro23/page.do?operate=page&page=login 访问这个URL,执行的过程是什么样的?

答:
http:// localhost :8080 /pro23 /page.do ?operate=page&page=login
协议 ServerIP port context root request.getServletPath() query string

  1. DispatcherServlet -> urlPattern : *.do 拦截/page.do
  2. request.getServletPath() -> /page.do
  3. 解析处理字符串,将/page.do -> page
  4. 拿到page这个字符串,然后去IOC容器(BeanFactory)中寻找id=page的那个bean对象 -> PageController.java
  5. 获取operate的值 -> page 因此得知,应该执行 PageController中的page()方法
  6. PageController中的page方法定义如下:
    public String page(String page){
    return page ;
    }
  7. 在queryString: ?operate=page&page=login 中 获取请求参数,参数名是page,参数值是login
    因此page方法的参数page值会被赋上"login"
    然后return “login” , return 给 谁??
  8. 因为PageController的page方法是DispatcherServlet通过反射调用的
    method.invoke(…) ;
    因此,字符串"login"返回给DispatcherServlet
  9. DispatcherServlet接收到返回值,然后处理视图
    目前处理视图的方式有两种: 1.带前缀redirect: 2.不带前缀
    当前,返回"login",不带前缀
    那么执行 super.processTemplete(“login”,request,response);
  10. 此时ViewBaseServlet中的processTemplete方法会执行,效果是:
    在"login"这个字符串前面拼接 “/” (其实就是配置文件中view-prefixe配置的值)
    在"login"这个字符串后面拼接 “.html” (其实就是配置文件中view-suffix配置的值)
    最后进行服务器转发

5. 目前我们进行javaweb项目开发的“套路”是这样的:

1. 拷贝 myssm包
2. 新建配置文件applicationContext.xml或者可以不叫这个名字,在web.xml中指定文件名
3. 在web.xml文件中配置:
1) 配置前缀和后缀,这样thymeleaf引擎就可以根据我们返回的字符串进行拼接,再跳转

view-prefix
/


view-suffix
.html

2) 配置监听器要读取的参数,目的是加载IOC容器的配置文件(也就是applicationContext.xml)

contextConfigLocation
applicationContext.xml

4. 开发具体的业务模块:
1) 一个具体的业务模块纵向上由几个部分组成:
- html页面
- POJO类
- DAO接口和实现类
- Service接口和实现类
- Controller 控制器组件
2) 如果html页面有thymeleaf表达式,一定不能够直接访问,必须要经过PageController
3) 在applicationContext.xml中配置 DAO、Service、Controller,以及三者之间的依赖关系
4) DAO实现类中 , 继承BaseDAO,然后实现具体的接口, 需要注意,BaseDAO后面的泛型不能写错。
例如:
public class UserDAOImpl extends BaseDAO implements UserDAO{}
5) Service是业务控制类,这一层我们只需要记住一点:
- 业务逻辑我们都封装在service这一层,不要分散在Controller层。也不要出现在DAO层(我们需要保证DAO方法的单精度特性)
- 当某一个业务功能需要使用其他模块的业务功能时,尽量的调用别人的service,而不是深入到其他模块的DAO细节
6) Controller类的编写规则
① 在applicationContext.xml中配置Controller

你可能感兴趣的:(学习,java,开发语言)