发表于: 2019-01-10 20:07:03

1 720


今天完成的事

1、重写了控制器

@Controller
public class TestController {
@Autowired
   StudentDao studentDao;

   @RequestMapping(value = "/student/list", method = RequestMethod.GET)
public String getAll(Model model) {
List<Student> students = studentDao.findAll();
       model.addAttribute("students", students);
       return "findAll";
   }

@RequestMapping(value = "/add", method = RequestMethod.GET)
public String addStudent() {
return "add";
   }

@RequestMapping(value = "/student", method = RequestMethod.POST)
public String insertStudent(Student student) {
studentDao.add(student);
       return "redirect:/student/list";
   }
@RequestMapping(value = "/student/{id}",method = RequestMethod.GET)
public String deleteStudent(@PathVariable int id){
studentDao.delete(id);
       return "redirect:/student/list";
   }
@RequestMapping(value = "/student", method = RequestMethod.GET)
public String findById(Model model , int id){
Student student = studentDao.findById(id);
       model.addAttribute("student",student);
       return "update";
   }
@RequestMapping(value = "/student",method = RequestMethod.PUT)
public String updateStudent (Student student){
studentDao.update(student);
       return "redirect:/student/list";
   }
@RequestMapping(value = "/listtable",method = RequestMethod.GET)
public String selectPage (Model model , @RequestParam(value = "pageNow",defaultValue = "1")int pageNow){
List<Student> students = studentDao.selectProductsPage((pageNow-1)*10,10);
       int allRow = studentDao.selectRow();
       int prePage;
       if (pageNow - 1 > 0) {
prePage = pageNow - 1;
       } else {
prePage = pageNow;
       }
int pageSize = 10;
       int totalPages = allRow % pageSize == 0 ? allRow / pageSize : allRow / pageSize + 1;
       int nextPage;
       if ( pageNow <totalPages) {
nextPage = pageNow+1;
       } else {
nextPage = pageNow ;
       }
model.addAttribute("pageNow", pageNow);
       model.addAttribute("prePage", prePage);
       model.addAttribute("students", students);
       model.addAttribute("nextPage", nextPage);
       model.addAttribute("totalPages", totalPages);
       return "findAll";
   }
}

2、下载postman,并测试rest风格的controller

3、下载json-taglib

下载好之后,需要将json-taglib放入 mvn中,点一下json-taglib的jar包,在

输入cmd,然后回车,输入

mvn install:install-file -D groupId=atg.taglib.json -D artifactId=json-taglib -D version=0.4.1 -Dpackaging=jar -D file=json-taglib-0.4.1.jar

然后在pom文件中添加依赖即可使用

<dependency>
<groupId>atg.taglib.json</groupId>
<artifactId>json-taglib</artifactId>
<version>0.4.1</version>
</dependency>

4、json是什么?

JSON就是一种格式,使用这种格式去给前端传数据。而json-taglib是标签库,为了能在jsp文件里编写json格式时使用json-taglib的标签。

json的语法规则:

数组(Array)用方括号(“[]”)表示。
对象(Object)用大括号(”{}”)表示。
名称/值对(name/value)组合成数组和对象。
名称(name)置于双引号中,值(value)有字符串、数值、布尔值、null、对象和数组。

并列的数据之间用逗号(“,”)分隔

json-taglib的依赖

<dependency>
<groupId>atg.taglib.json</groupId>
<artifactId>json-taglib</artifactId>
<version>0.4.1</version>
</dependency>

代码:

@RequestMapping("/select")
public String selectAll(Model model){
List<Student> students = studentDao.findAll();
       model.addAttribute("code","200");
       model.addAttribute("message","传递成功");
       model.addAttribute("students",students);
       return "json";
}

jsp文件:

<%@page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json" %>
<json:object>
<json:property name="code" value="${code}"/>
<json:property name="message" value="${message}"/>
<json:array name="students" var="student" items="${students}">
<json:object>
<json:property name="id" value="${student.id}"/>
<json:property name="name" value="${student.name}"/>
<json:property name="qq" value="${student.qq}"/>
<json:property name="type" value="${student.type}"/>
<json:property name="admission_date" value="${student.admission_date}"/>
<json:property name="graducate_school" value="${student.graduate_school}"/>
<json:property name="student_number" value="${student.student_number}"/>
<json:property name="daily_link" value="${student.daily_link}"/>
<json:property name="wish" value="${student.wish}"/>
<json:property name="instructor" value="${student.instructor}"/>
<json:property name="information_source" value="${student.information_source}"/>
</json:object>
</json:array>
</json:object>

在网页上:

在postman上:

5、EL表达式就是 ${ }

用于表达式的运算。如:加、减、乘、除。 

用于从作用域中取出数据

6、下载并配置jetty

显示页面:

看起来jetty和tomcat区别不大,但也是有区别的,了解了一下:

1.架构比较

jetty相比tomcat更为简单

jetty架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单

tomcat的框架是基于容量设计的,进行扩展是需要了解tomcat的整体设计结构,不易扩展

2.性能比较

jetty和tomcat性能方面差异不大

jetty可以同时处理大量链接而且可以长时间保持链接,适合于javaWeb聊天应用

jetty的架构简单,因此作为服务器,jetty可以按需加载组件,减少不需要的组件,减少了服务器内存开销,从而提高服务器性能

jetty默认采用NIO结束来处理I/o请求上更占优势,在处理静态资源时,性能较高

tomcat适合处理少数非常繁忙的连接,也就是连接生命周期短的话,tomcat的总体性能更高

tomcat默认采用B/o处理I/o请求,在处理静态资源时,性能较差

3.其他比较

jetty的应用更加快捷,修改简单,对新的servlet规范的支持更好

tomcat目前应用比较广泛,对javaEE和servlet的支持更加全面,很多特性会直接集成进来

7.sping mvc的流程

第一步:用户发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求处理器映射器(HandlerMappering)去查找处理器(Handle):通过xml配置或者注解进行查找
第三步:找到以后处理器映射器(HandlerMappering)像前端控制器返回执行链(HandlerExecutionChain)
第四步:前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器(Handler)
第五步:处理器适配器去执行Handler
第六步:Handler执行完给处理器适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
第八步:前端控制器请求视图解析器(ViewResolver)去进行视图解析
第九步:视图解析器像前端控制器返回View
第十步:前端控制器对视图进行渲染

第十一步:前端控制器向用户响应结果

图示:

springMVC中的几个组件:
前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU。
处理器映射器(HandlerMapping):根据URL去查找处理器
处理器(Handler):(需要程序员去写代码处理逻辑的)
处理器适配器(HandlerAdapter):会把处理器包装成适配器,这样就可以支持多种类型的处理器,类比笔记本的适配器(适配器模式的应用)

视图解析器(ViewResovler):进行视图解析,多返回的字符串,进行处理,可以解析成对应的页面

springmvc里很多东西都涉及底层的东西,不需要我去做什么,直接用就好了,只需要编写控制器(controller)和视图(model)部分就可以了.

明天计划的事

1.继续做任务

2.把不熟悉的东西再练练

3.再看看springmvc

遇到的问题

1.json和json-taglib总是无法理解,不知道那到底是干嘛的,查日报查教程也看不明白,后来是师兄示范了一遍才大概知道了

2.运行jetty时出现

试过好几个url,都不行,后来发现是要在jetty的配置里勾选这个"use custom context root"

3.界面上出现过乱码,jsp文件里需要添加这个

<%@page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>

收获

1.学习了EL表达式

2.学习了json 和json-taglib

3.学习了rest风格


返回列表 返回列表
评论

    分享到