发表于: 2018-01-25 23:53:40

1 577


完成

1.又跑了个简单的springmvc例子,进一步理解各代码的含义。

http://blog.csdn.net/jianyuerensheng/article/details/51258942

项目结构

依赖包,比想象中的少

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-web</artifactId>
   <version>4.3.9.RELEASE</version>
</dependency>
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>4.3.9.RELEASE</version>
</dependency>

web.xml

<servlet>
   <servlet-name>appServlet</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <!--初始化参数-->
   <init-param>
       <!--参数名-->
       <param-name>contextConfigLocation</param-name>
       <!--参数值-->
       <param-value>classpath:springmvc-context.xml</param-value>
   </init-param>
   <!--标记容器是否在启动的时候实例化,并调用其init()方法的优先级-->
   <load-on-startup>1</load-on-startup>
</servlet>

<!--URL映射到servlet-->
<servlet-mapping>
   <servlet-name>appServlet</servlet-name>
   <!--过滤的路径,也就是你在jsp中访问servlet时应该在action中填写的东西-->
   <url-pattern>/</url-pattern>
</servlet-mapping>

这里查了一下jsp与servlet的区别

servlet是在服务器端执行的java程序,只不过它有专门的一套规则(就是我们平常所说的api);

jsp说得简单点就是用另一套简单的规则写的servlet程序,它可以写java代码,还可以写html代码,JavaScript,css等等……,但是到服务器端首先会被转成servlet程序然后就按照servlet的执行顺序执行了。

简单点JSP就是servlet的扩展,你应该知道jsp第一次运行时要先翻译成JAVA代码,在编译成class文件 而那个JAVA代码就是servlet

springmvc-context.xml

 <!--会自动注册DefaultAnnotationHandlerMappingAnnotationMethodHandlerAdapter 两个bean,
spring MVC@Controllers分发请求所必须的,即解决了@Controller注解使用的前提配置。-->
<mvc:annotation-driven/>

<!--xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,
如果扫描到有@Component @Controller@Service等这些注解的类,
则把这些类注册为bean
注意:如果配置了<context:component-scan>那么<context:annotation-config/>标签就可以不用再xml中配置了,因为前者包含了后者。-->
<context:component-scan base-package="com.wlj"/>

<!--用来解析Spring MVC里面的annotation对应的Controller
<beans:bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>

Annotation设置的方法进行处理的类,通过此类,解析annotation设置的类的处理,也就是有请求时,
通过此类,可以调用annotation设置controller的方法
<beans:bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>-->




<!--prefix suffixspring MVC试图解析器的一个属性,
prefix : 是指访问页面的前缀,指定页面存放的文件夹
suffix : 是指文件的后缀名,常见的后缀名有html,jsp,php,txt,mp3-->
<beans:bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <beans:property name="prefix" value="/WEB-INF/pages/"/>
   <beans:property name="suffix" value=".jsp"/>

控制器UserController

// Controller以及RequestMapping的用法:
// 将这个class申明为一个bean,当web请求为/hello时,跳转到这个class进行处理。
// Controller的原型分析:
// 此处不需要在配置文件中配置例如<bean id="xxx" class="com.xxx">的语句,
// 但是我们的Spring如何知道哪些classbean文件,哪些class文件不是bean文件呢?
// 所有配置了@Controller class文件回通过java的反射机制进行读取。
// 因此在这里Spring2.5官方的org.springframework.web.servlet.mvc.annotation.defaultAnnotationHandlerMapping这个类进行处理。
// 这个类的作用是:首先扫描Classpath获取注解了@Controller的对象(扫面通过语句:<context:component-scan/>进行扫描)
// 之后通过反射机制进行绑定。
@Controller
public class UserController {

@RequestMapping("/get")
public String Create() {
return "create";
   }

//    @ModelAttribute注释的方法会在此controller每个方法执行前被执行
//

// model属性名称和model属性对象有model.addAttribute()实现,不过前提是要在方法中加入一个Model类型的参数。
// URL或者post中不包含次参数时,会报错
   @RequestMapping("/save")
public String Save(@ModelAttribute("form")User user, Model model) {
model.addAttribute("user", user);
       return "detail";
   }
//   注解@ModelAttribute("user"),它的作用是将该"绑定的命令对象"“user”为名称添加到"模型对象"中供"视图页面"展示使用。
// 我们此时可以在视图页面使用${user.username}来获取绑定的命令对象的属性。
//    这个form的意思是将表单中的数据绑定到user对象吗???
   //@ModelAttribute("form"),去掉也可以
}

jsp文件和结果就不列出了

2.补了一些其他知识

处理器映射

1.处理器映射(handler mapping)
通过处理器映射,你可以将web请求映射到正确的处理器(handler)上。Spring内置了很多处理器映射策略
2.DispatcherServlet要将一个请求交给哪个特定的Controller它需要咨询一个Bean——这个Bean的名字为“HandlerMapping”。HandlerMapping是把一个URL指定到一个Controller上就像应用系统的web.xml文件使用<servlet-mapping>将URL映射到servlet

在基于Spring MVC的Web应用程序中,我们可以为DispatcherServlet提供多个Handler- Mapping供其使用。DispatcherServlet在选用HandlerMapping的过程中,将根据我们所指定的一系列HandlerMapping的优先级进行排序,然后优先使用优先级在前的HandlerMapping。如果当前的HandlerMapping能够返回可用的Handler,DispatcherServlet则使用当前返回的Handler进行Web请求的处理,而不再继续询问其他的HandlerMapping。否则,DispatcherServlet将继续按照各个HandlerMapping的优先级进行询问,直到获取一个可用的Handler为止。

键值对
你可以查看jdk文档,找MAP接口,它的实现类都是键值对的形式保存数据的
键:就是你存的值的编号
值:就是你要存放的数据
跟数学中的一对一映射关系是一个意思

就是通过一个键来存取值,键可以是任何类型!

serialVersionUID

相当于java类的身份证。主要用于版本控制。
作用是序列化时保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。
有两种生成方式:
      一个是默认的1L,比如:private static final long serialVersionUID = 1L;
      一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:

      private static final long serialVersionUID = xxxxL;


问题

暂时没有


收获

对springmvc原理流程,代码意义理解更加深刻


计划

使用spring MVC完成rest接口
使用Task1中的Service完成接口的实现。



返回列表 返回列表
评论

    分享到