SpringMVC入门总结

2020-12-13 02:22

阅读:474

YPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

标签:ready   Servle   read   使用   框架   日期类   patch   javascrip   方法   

一、SpringMVC的好处?

1,基于注解,stuts2虽然也有注解但是比较慢,没人用更多的时候是用xml的形式 
2,能与spring其它技术整合比如说webflow等, 
3,获取request及session对象比较简单,直接当参数值传入就行了,而struts2还需要通过ServletActionContext 对象获取 
4,验证也比较简单,通过jsr-303就能实现,而不必写其它的代码,而struts2是通过写 actionName-validation.xml实现的 
二、SpringMVC是什么?

Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。

三、SpringMVC的用法

1.传统方式

(1)创建工程,拷贝springmvc相关的jar,并把jar拷贝到lib

(2) 配置web.xml,配置前段控制器DispatcherServlet

 1 
 2     springmvc
 3     
 4       org.springframework.web.servlet.DispatcherServlet   
 5     
 6 
 7 
 8     springmvc
 9     *.do
10 

(3) 在web-inf 下创建springmvc配置文件,[servlet-name]-servlet.xml 文件名必须和web.xml中的servlet-name一致。例如:springmvc-servlet.xml

(4) [servletname]-servlet.xml中配置HandlerMapping 根据benaname找到对应Conntroller( 可以省略)

1 );
4         System.out.println(hello);
5         ModelAndView model=new ModelAndView("index");
6         model.addObject("helloworld", hello);
7         return model;
8     }

(7)[servletname]-servlet.xml中配置

1 
2         
3         
4         
5         
6 

  (8)[servletname]-servlet.xml中配置HandlerMapping给你钱,Controller就要接着(比喻)

1 

2.注解方式

注解方式呢,在开发中庸的比较多,方便。

  1. 在web.xml中配置DispatcherServlet
  2. 在web-inf下新建[servlet-name]-servlet.xml配置文件
  3. 在[servlet-name]-servlet.xml中配置注解驱动
1 

  4.配置注解扫描 

1 

  5.创建控制器 

1 @Controller 
2 public class HelloController { 
3 @RequestMapping(value = "/hello.do") 
4 public String hello(String ceshi, Model model) { 
5 System.out.println(ceshi); 
6 model.addAttribute("helloworld", ceshi); 
7 return "index"; 
8 } 
9 }

  6.创建请求jsp页面 
  7.创建视图解析器 
  8.没了,这就是注解,你会发现注解会减少好多代码。

四、再说说如何从页面获取参数的方式

  1. 通过HttpServletRequest request来获取,request.getParameter();
1 @RequestMapping(value = "/list.do")
2     public String list(HttpServletRequest request){
3         String name=request.getParameter("userName");
4         return "userinfo/user_list";
5     }

2. 直接定义参数,保证参数和前台标签的name一致即可

 1 java代码
 2 @RequestMapping(value = "/list.do")
 3     public String list(@RequestParam(value = "uName") String userName,
 4             Integer userPassword, String userSex) {
 5         System.out.println(userName + "\t" + userPassword + "\t" + userSex);
 6         return "userinfo/user_list";
 7     }
 8 jsp代码
 9     
10 姓名:
11
--> 12 密码:
13 性别:
14 日期: 15 16

注意: 
1,@RequestParam()这个可以设置从页面传的参数设置默认值。或者设置别名(例如:input标签中name=”userName”时,此方法可以获取到该标签的value值,当name=”uName”时,也可以获取到该标签的value值) 
2,直接定义参数方式,参数可以自动转换格式,例如页面时String类型的密码,参数可以为Integer类型,它可以自动转换(这点非常好) 
3. 通过对象来获取值

 1 @RequestMapping(value = "/list2.do")
 2     public String list2(User us, Date userTime) {
 3         System.out.println(us.getUserName() + "\t" + us.getUserPassword()
 4                 + "\t" + us.getUserSex());
 5         System.out.println(userTime);
 6         return "userinfo/user_list";
 7     }
 8 
 9 @InitBinder
10     public void initBinder(WebDataBinder binder) {  //自动转换成Date类型
11         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
12         dateFormat.setLenient(false);
13         binder.registerCustomEditor(Date.class, new CustomDateEditor(
14                 dateFormat, false));
15     }

注意: 
1,@RequestParam()这个可以设置从页面传的参数设置默认值。或者设置别名(例如:input标签中name=”userName”时,此方法可以获取到该标签的value值,当name=”uName”时,也可以获取到该标签的value值) 
2,直接定义参数方式,参数可以自动转换格式,例如页面时String类型的密码,参数可以为Integer类型,它可以自动转换(这点非常好) 
3. 通过对象来获取值

 1 @RequestMapping(value = "/list2.do")
 2     public String list2(User us, Date userTime) {
 3         System.out.println(us.getUserName() + "\t" + us.getUserPassword()
 4                 + "\t" + us.getUserSex());
 5         System.out.println(userTime);
 6         return "userinfo/user_list";
 7     }
 8 
 9 @InitBinder
10     public void initBinder(WebDataBinder binder) {  //自动转换成Date类型
11         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
12         dateFormat.setLenient(false);
13         binder.registerCustomEditor(Date.class, new CustomDateEditor(
14                 dateFormat, false));
15     }

注意:参数为日期类型时,需要定一下检测日期类型的方法,进行格式转换。

五、如何从控制器中传值到页面呢?

1 1.最原始的,通过HttpServletRequset request来传递,request.setAttribute();
 1 @RequestMapping(value="/add1.do")
 2     public String add(HttpServletRequest request){
 3 
 4         String userNumber = request.getParameter("userNumber");
 5         String passWord = request.getParameter("passWord");
 6 
 7         System.out.println("userNumber:"+userNumber+" passWord:"+passWord);
 8 
 9         String str = "userNumber:"+userNumber+" passWord:"+passWord;
10 
11         request.setAttribute("user", str);
12 
13         return "user_add1";
14     }
1 2. 通过ModelAndView来传递到页面
1 @RequestMapping(value="/add2.do")
2     public ModelAndView add2(){
3 
4         ModelAndView mav = new ModelAndView("user_add2");
5         mav.addObject("userId", 1001);
6         mav.addObject("userName", "张三");
7 
8         return mav;
9     }
1 3. 通过model来传递(一般开发这个比较用的多)
1 @RequestMapping(value="/add3.do")
2     public String add3(Model model){
3 
4         model.addAttribute("personId", 9527);
5         model.addAttribute("personName", "唐伯虎");
6 
7         return "user_add3";
8     }
1  4. 通过map来传递
 1 @RequestMapping(value="/add4.do")
 2     public String add4(Integer personId,String userName,Map map){
 3 
 4         System.out.println(personId);
 5         System.out.println(userName);
 6         map.put("personId", 9527);
 7         map.put("personName", "唐伯虎");
 8 
 9         return "user_add4";
10     }

六、最后再掌握一个ajax,就算入门了

 1 jsp页面
 2 
 4  request.getContextPath();
 6     String basePath = request.getScheme() + "://"
 7             + request.getServerName() + ":" + request.getServerPort()
 8             + path + "/";
 9 %>    
10 
11 
12
13 
14 Insert title here
15 
16 
36 
37 
38 
39 账号: 40 41
42 编号: 43 44
45 46
 1 控制器代码
 2 @Controller
 3 public class UserController {
 4     @RequestMapping("/ajaxUser.do")
 5     public void userNumber(String userNumber, HttpServletResponse response) {
 6         System.out.println(userNumber);
 7         try {
 8             // 响应
 9             response.setContentType("text/html");
10             response.setCharacterEncoding("utf-8"); //向页面传递提示消息
11             PrintWriter out = response.getWriter();
12             if ("liu".equals(userNumber)) {
13                 out.println("对不起,请重新输入账号");
14             } else {
15                 out.println("恭喜您,账号可以使用");
16             }
17             out.flush();
18             out.close();
19         } catch (Exception e) {
20             e.printStackTrace();
21         }
22     }
23 
24     @RequestMapping("/ajaxUser2.do")
25     public @ResponseBody UserInfo ajaxUser(Integer userId){
26         System.out.println("编号:"+userId);
27         UserInfo user = new UserInfo();
28         user.setUserId(userId);
29         user.setUserName("张三");
30         user.setUserAge(18);
31         return user;
32     }
33 
34 }

七、总结:

1 经过上述简单但有态度的总结,希望看到的朋友可以明白SpringMVC的执行的过程和用法。想要深入的精通SPringMVC还需要自己慢慢的钻研喽,加油,我们一起努力。

SpringMVC入门总结

标签:ready   Servle   read   使用   框架   日期类   patch   javascrip   方法   

原文地址:https://www.cnblogs.com/ATao365/p/11032838.html


评论


亲,登录后才可以留言!