springmvc 初学 入门
2016-12-21 12:03
162 查看
mvc框架的共有特征:
架包的导入:
commons-logging-1.1.1.jar //日志架包spring-aop-4.0.0.RELEASE.jar
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar
一.请求分发, (url 定位到 一个java类的方法!!) 二.表单参数如何获取? 主动式?(servletAPI) 被动式?DI 三.跳转到模板 四.
一.请求分发:(三种)
1.servlet的方式:
@Controller @RequestMapping("/demo") public class DemoServlet { @RequestMapping(method=RequestMethod.GET) public void doGet(HttpServletRequest res,HttpServletResponse es){ System.out.println("get..."); } @RequestMapping(method=RequestMethod.POST) public void doPostt(HttpServletRequest req,HttpServletResponse res){ System.out.println("post..."); } } //访问方式:http://localhost:8080/springmvctest/demo.do
2.类似struts1的方式:
@Controller @RequestMapping("/struts1") public class StrutsController { @RequestMapping(params="method=add") public void findAll(){ System.out.println("add......"); } @RequestMapping(params="method=findall") public void findall(){ System.out.println("findall...."); } } //访问方式:http://localhost:8080/springmvctest/struts1.do?method=add
3.类似与struts2的方式:(常用的)
@controller @requestmapping("/user") (可以不用这个一样可以定位到!!) public class UserController{ @requestmapping("/add") public void add(){ System.out.println("add......") } }
访问方式:http://localhost:8080/springmvctest/user/add.do
4.springmvc在Controller的局部变量是用的一个变量,方法执行完了就被释放,而struts2的成员变量是一个action(请求)new一个对象, 就算是调用的是同一个action 5.默认的controller是单例的,
二.表单参数的获取:(一共三种获取了参数的方式。)
6.1)用(DI方式,方法参数的注入。)@RequestMapping("/user/login") //<DI方式 方法参数的动态注入!!> public void login(@RequestParam("n")String uname,@RequestParam("p")String pwd){ System.out.println(uname+"....."+pwd); }
访问方式:http://localhost:8080/springmvctest/user/login.do?n=renchenhao&p=1234
/** * required 该参数是否必须,默认为true; * defaultValue 请求参数的默认值; * value值即请求参数的参数名; * @return */ @RequestMapping(value="/testRequestParam") public String testRequestParam(@RequestParam(value="username") String un ,@RequestParam(value="age",required = false,defaultValue="0") int ag){ System.out.println("username="+un+"age:"+ag); return SUCCESS; } //http://localhost:8080/springmvctest/testRequestParam?username=renchen&age=11
6.2)模型驱动(一个java的类,用于参数的接受)
@RequestMapping("/user/add") public void add(Uer uer){ System.out.println(); return SUCCESS; }
//pojo类 //uer类 String username ; String pwd; Adress adress; //省略get和set方法; //adress类 //级联 String city; //省略get和set方法
<form action="testPojo"> <input type="text" name="username"/> <input type="text" name="pwd"/> <input type="text" name="adress.city"/> <input type="submit" value="submit"/> </form>
(说明:传进来的值的属性名与user的类里面所声明的成员变量相同的就自动赋值给它,)
6.3)restFULL方式 (http,uri的更加充分的利用)
@RequestMapping("/user/{id}/del") public void del(@PathVariable("id") Integer id){//http 的restfull风格 System.out.println("..........add....del"+id); }
7.解耦 模拟环境 自动化测试– >>
三.跳转到模板:
怎么传递参数,构建响应体! 9.struts2中用的是result 10.在springmvc中是: return "forward:/welcome.jsp"; (相对路径,requestmapping的路径)
@RequestMapping("/user/login") //DI方式 方法参数的动态注入!! public String login(@RequestParam("n")String uname, @RequestParam("p")String pwd,HttpServletRequest session){ System.out.println(uname+"....."+pwd); session.setAttribute("uname", uname); return "forward:/welcome.jsp"; // 这里在forward:后面必须加一个/ 不然就会使用相对路 //径,即把/user/addde之前的路径附在之前作为路径。 }
11.1)ModelMap是map的实现,可以在其中存放属性,作用域同request。通过 el表达式,jstl,java代码均可。 11.2)为了解耦,不推荐使用原生的HttpServletRequest而是使用ModelMap 12.有些面试官会问,你觉得struts2和springmvc框架的好处都是什么啊? 可以和环境解耦,便于环境测试!! 13.1)springmvc关于跳转(return "forward:/welcome.jsp"):简化!!但是,在一些特殊场景中,反到带来了不方便, 有些网站的设计人员,不想外部的人员直接访问,把工程放在了WEB-INF底下, 那么就得这样写(return "forward:/WEB-INF/welcome.jsp"),当网站较大时,这就带来了一个弊端,需要重复写 很多代码,这时就有了:"视图解析器(帮我们定位到某一个资源的)". 13.2)视图解析器:(如果在return 中没有家上 "forwward:" 那么就会使用到视图解析器) 在springmvc-servlet.xml中加上这样一条语句:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/ren/"></property> <property name="suffix" value=".jsp"></property> </bean>
14.重定向:返回值形如:return "redirect:http://www.baidu.com"; 15.中文编码filter: 在web.xml中加上这样一条语句(这个控制乱码方法的只对post的提交方式有用.):
<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
相当于servlet中的: request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); 16.ModelAndView模型视图类(和用ModelMap map相似): 见名知意,从名字上我们可以知道ModelAndView中的Model代表模型,View代表视图。即,这个类 把要显示的数据存储到了Model属性中,要跳转的视图信息存储到了View属性。我们来看下ModelA ndView的部分源码,即可知其中的关系:
@RequestMapping("/user/add") //DI方式 方法参数的动态注入!! public ModelAndView login(@RequestParam("n")String uname,@RequestParam("p")String pwd){ System.out.println(uname+".../////.."+pwd); ModelAndView mv= new ModelAndView(); mv.setViewName("hao/welcome"); mv.getModelMap().put("a", uname); return mv; // 把返回参数改为ModelAndView类型的 }
17.文件上传(spring使用了apache-commons下的上传组件,因此我们需要引入两个jar包,学了maven后可以自动导): 导包: 1).Apache-commons-fileupload.jar(这两个包可以在spring2.5.6中找到,或者在网上查找) 2).apache-commons-io.jar ---------------------------------------------- java文件代码:
package com.bjsxt.controller; import java.io.File; import java.io.IOException; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.commons.CommonsMultipartFile; @Controller public class UploadCont { @RequestMapping("/toupload") public String toUpload(){ return "hao/upload"; } @RequestMapping("/upload") //< !!!必须加上@RequestParam("file")!!!! > public String upload(@RequestParam("file")CommonsMultipartFile file){ System.out.println(file.getOriginalFilename()); try { file.transferTo(new File("D:/1.txt")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "ok"; } }
spring-servlet.xml中的关于文件上传的相关代码:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize"><value>1203500</value></property> <!-- 最大文件大小(-1为无限制) --> <property name="defaultEncoding"><value>utf-8</value></property><!-- 默认编码 --> <property name="maxInMemorySize"><value>10240</value></property><!-- 最大内存大小 --> </bean>
--------------------------------------------- jsp页面代码:
<!--method必须是post enctype必须是multipart/form-data--> <form action="upload.do" method="post" enctype="multipart/form-data"> <input type="text" name="name" /> <input type="file" name="file"/> <!-- 这里的name属性的名字为file这个和java文件中的传入的形参的名字要相同 --> <input type="submit" /> </form>
---------------------------------------------- <注意:前后缀的问题> 18.1) 1)端对端模式(通俗点讲让浏览器专门处理浏览器js,html的,后台专门处理数据) 2)jsp在后台处理html,css,javascript(就是在后端处理前端的工作) 3).动态页面技术的发生是我们需要一种模板 -- 实现java,html,js等 代码复用(如jquery ui easyui) AngularJs(不懂!) 18.2) 处理ajax请求(json): 手动的: ------------------------------------------ 1.java代码:
package com.bjsxt.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.bjsxt.po.User; @Controller public class Ajax { @RequestMapping(value="/byid",p c41a roduces="text/html;charset=utf-8") public @ResponseBody String findById(Integer id){ User user= new User(); user.setId(id); user.setName("ilsf"); user.setPhone("123456"); //这里可以使用json工具转化为字符串 return "{\"id\":1,\"name\":'小嘎',\"phone\":'adfsdf'}"; //手动转换 } }
2.注意: 需要在spring-servlet.xml加上这一句话(必须加):<mvc:annotation-driven></mvc:annotation-driven> 最后的配置如果没有<mvc:annotation-driven/>,那么所有的Controller可能就没有解析,所有当有请求时 候都没有匹配的处理请求类,就都去<mvc:default-servlet-handler/>即default servlet处理了。添加上 <mvc:annotation-driven/>后,相应的do请求被Controller处理,而静态资源因为没有相应的Controller就 会被default servlet处理。总之没有相应的Controller就会被default servlet处理就ok了。<(这句话有待考究!!)> 3.心得: 如果不加<mvc:annotation-driven/>那么controller可能并没有被解析,而是交给了<mvc:annotation-driven/>处理, 有一点可以说明买就是当你拦截了全部请求的时候,就会显示404错误,这是如果加上<mvc:annotation-driven/>,错误就会消失。 //访问方式:http://localhost:8080/springmvctest/byid.do?id=1 接受json格式的数据:
相关文章推荐
- SpringMVC基础入门--创建一个HelloWorld程序
- Springmvc入门小程序
- springmvc入门例子(AbstractCommandController)
- hadoop初学入门之二:完全分布式集群搭建
- SpringMVC入门篇(五)POST中文乱码解决
- springmvc入门之映射处理器(二)
- Spring+SpringMVC+MyBatis深入学习及搭建(十三)——SpringMVC入门程序(二)
- springMVC的基础知识及入门程序
- 【SSM】SpringMVC、Spring(5.0.3)、MyBatis(3.4.5)三大框架的整合项目入门示例
- SpringMVC入门
- SpringMVC入门
- SpringMVC入门教程
- Android开发入门(初学)
- springMVC快速入门(转)
- 二、初学SpringMVC+Mybatis之Spring IOC
- SpringMVC详解(三)------基于注解的入门实例
- SpringMvc入门到开发(二)之基本原理
- shapley值法初学入门详细介绍
- SpringMVC快速入门、深入分析
- SpringMVC框架入门配置 IDEA下搭建Maven项目