zoukankan      html  css  js  c++  java
  • 关于注解的汇总

    1.@Component  将一个类作为实体类放入Spring容器中,

    之后在spring 配置文件里面写一句这个

    <context:component-scan base-package="com.hanqi.dao" />
    

     2.@Repository  将一个类作为业务逻辑处理层放入Spring

    3.@Controller   注释定义该类作为一个 Spring MVC 控制器   ,@RequestMapping 注释用于映射 URL 到整个类或一个特定的处理方法。

        testController

    /*DispatcherServlet 发送请求到控制器中执行特定的功能*/
    
    @Controller  /* @Controller 注释定义该类作为一个 Spring MVC 控制器*/
    public class TestController {
         @RequestMapping("/helloworld2") 
         /*第一次使用的 @RequestMapping 表明在该控制器中处理的所有方法都是相对于 /helloworld2 路径的*/
         public String hello() {
        	 return "success";
         }
    }
    

     springMvc.xml配置文件

    <context:component-scan base-package="com.hanqi.controller.TestController"></context:component-scan>
     		
     		<!-- 视图解析器 -->
     		<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     			<property name="suffix" value=".jsp"></property>  <!-- 后缀名 -->
     			<property name="prefix" value="WEB-INF/page"></property> <!--  前缀名 -->
     		</bean>
    

     4.@Autowired 注释对在哪里和如何完成自动连接提供了更多的细微的控制。

    @Autowired 注释可以在 setter 方法中被用于自动连接 bean,就像 @Autowired 注释,容器,一个属性或者任意命名的可能带有多个参数的方法。

    属性中的 @Autowired

    你可以在属性中使用 @Autowired 注释来除去 setter 方法。当时使用 为自动连接属性传递的时候,Spring 会将这些传递过来的值或者引用自动分配给那些属性。

    TextEditor.java

    public class TextEditor {
       @Autowired
       private SpellChecker spellChecker;
       public TextEditor() {
          System.out.println("Inside TextEditor constructor." );
       }  
       public SpellChecker getSpellChecker( ){
          return spellChecker;
       }  
       public void spellCheck(){
          spellChecker.checkSpelling();
       }
    }
    

     Beans.xml

    <context:annotation-config/>
    
       <!-- Definition for textEditor bean -->
       <bean id="textEditor" class="com.tutorialspoint.TextEditor">
       </bean>
    
       <!-- Definition for spellChecker bean -->
       <bean id="spellChecker" class="com.tutorialspoint.SpellChecker">
       </bean>
    

     5.@RequestParam  如果前台传来的参数,后台接收不一致的话,在你自己写的名字前面加一个注解

    @RequestMapping("/helloworld2")
    	public ModelAndView helloWorld(  
    			ModelAndView mav, //自动填充的参数,而不是手动输入的,返回一个视图层对象
    			@RequestParam("aabbcc")String username) {  
    				//如果前台传来的参数,后台接收不一致的话,在你自己写的名字前面加一个注解@RequestParam
    		// ModelAndView mav = new ModelAndView();  暂且不用了
    	System.out.println(username);
    		AppUser user = new AppUser();
    		user.setRealname("超级管理员2");
    		mav.addObject("currentUser", user); // 相当于request.setAttribute();
    		mav.setViewName("success"); // request.getServletDispatcher........  请求转发
    		return mav;
    	}
    

     6.@PathVariable  动态跳转的解析器

       //有好几个页面,只要在地址栏里面输入不同的地址,就可以实现不同页面的跳转
    	@RequestMapping("test/{cpath}") //test定义的是请求,{}里面是传进去的一个参数,给path
    	public String testDynaicParam(@PathVariable("cpath")String path) {//动态跳转的解析器
    		System.out.println(path);
    		return path;
    	}
    

     7.@SessionAttributes sessionAttribute注解只能写在类上
     代表的是将当前controller类中某一个Model类中的属性添加到session对象中

    1.默认情况下Spring MVC将模型中的数据存储到request域中。当一个请求结束后,数据就失效了。如果要跨页面使用。那么需要使用到session。而@SessionAttributes注解就可以使得模型中的数据存储一份到session域中。

    2.@SessionAttributes  参数类型

      1、names:这是一个字符串数组。里面应写需要存储到session中数据的名称。

      2、types:根据指定参数的类型,将模型中对应类型的参数存储到session中

        3、value:其实和names是一样的。

    @SessionAttributes(value={"names"},types={Integer.class})

     controller 页面

    @SessionAttributes(value={"names"},types={Integer.class})
     2 @Controller
     3 public class Test {
     4 
     5     @RequestMapping("/test")
     6     public String test(Map<String,Object> map){
     7         map.put("names", Arrays.asList("caoyc","zhh","cjx"));
     8         map.put("age", 18);
     9         return "hello";
    10     }
    11 }
    

     JSP页面

    、request中names:${requestScope.names}<br/>
    2 2、request中age:${requestScope.age}<br/>
    3 <hr/>
    4 3、session中names:${sessionScope.names }<br/>
    5 4、session中age:${sessionScope.age }<br/>
    

     打印出来

     ModelAndView作用:

     1)ModelAndView 用于后台与前端页面交互;

      2)可以用于重定向与转发到指定页面,

      3)可以保存数据然后渲染到页面

    @Controller
    @SessionAttributes("user1")
    @RequestMapping(value="/testController")  //默认的前面有一个value
    public class TestController {
    
                @RequestMapping("/test7")
    	public ModelAndView test7(ModelAndView mav) {
    		mav.addObject("user1", "aaaa");  //相当于request.setAttribute();
    		mav.setViewName("page/success");  // request.getServletDispatcher........  请求转发
    		return mav;
    	}
    
    }
    

     8.@ResponseBody   将方法的返回值直接作为结果返回回去,通常用来做ajax参数的传递

    @Controller
    @RequestMapping(value="/testController")
    public class TestController {
    
            @ResponseBody
    	@RequestMapping("/test8")    //@ResponseBody   将方法的返回值直接作为结果返回回去,通常用来做ajax参数的传递
    	public String test8(String username, String password) {
    		StringBuffer buffer = new StringBuffer("{"success":");
    		if("admin".equals(username) && "123".equals(password)) {
    			buffer.append("true}");
    		} else {
    			buffer.append("false}");
    		}
    		return buffer.toString();
    	}
    }
    
    <script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>
    <script type="text/javascript">
    $(function() {
    	$("#btn").click(function() {
    		var f = $("#formData").serializeArray();
    		$.ajax({
    			type:"post",
    			url:"testController/test8.form",
    			data:f,
    			dataType:"json",
    			success:function(data) {
    				console.log(data);
    			},
    			error:function(msg) {
    				alert(msg.responseText);
    			}
    		});
    	});
    	
    });
    </script>
    
    
    
    
    <body>
    
           <a id="btn" href="#">测试链接8</a><br>
    </body>
    

    9.@ModelAttribute   注解只支持一个属性

    @Controller
    @RequestMapping("/modelAttr")
    public class TestModelAttribute {
    
    	/*
    	 * 1, 单独修饰方法 含有@ModelAttribute注解的方法会优先于其他方法执行
    	 */
    	@ModelAttribute("uname")
    	public String getUsername(String username) {
    		System.out.println(1);
    		/**
    		 * 相当于request.setAttribute("uname", username);
    		 */
    		return username;
    	}
    
    	@RequestMapping("/test1")
    	public String test1(String username) {
    		System.out.println(2);
    		return "page/success";
    	}
    
    	/*
    	 * 2, 与@RequestMapping同时修饰一个方法 
    	 * 当@ModelAttribute和@RequestMapping同时修饰一个方法的时候
    	 * 返回值不再作为视图层的地址, 这个方法执行完毕之后, 
    	 * 相当于运行了一行 request.setAttribute("param1","page/success"); 
    	 * 同时, RequestMapping中的url作为视图层
    	 */
    	@ModelAttribute("param1")
    	@RequestMapping("/test2")
    	public String test2() {
    		return "page/success";
    	}
    
    	/*
    	 * 3, 修饰方法中的参数,只能修改为空的成员变量
    	 */
    	@ModelAttribute("param2")
    	public Dept getDept(Dept dept) {
    		System.out.println("------------" + dept.getDname());
    		dept.setDname("修改后的值");
    		dept.setLoc("地址");
    		System.out.println("+++" + dept);
    		return dept;
    	}
    
    	@RequestMapping("/test3")
    	public String test3(@ModelAttribute("param2") Dept dept) {
    		System.out.println("==============" + dept);
    		return "page/success";
    	}
    
    
    	//参数是必须要有的,如果前台没有传来数据的话,就采用默认值
    	@RequestMapping("/test4")
    	public String test3(
    			@RequestParam(
    					value="str2", 
    					 defaultValue="jahsgdfjhsagdjsa", 
    					required=false)   
    			String str) {
    		System.out.println(str);
    		return "page/success";
    	}
    }
    

    10.request.getContextPath()

       <%=request.getContextPath()%>是为了解决相对路径的问题,可返回站点的根路径。

    request.getContextPath()应该是得到项目的名字,如果项目为根目录,则得到一个"",即空的字条串。如果项目为abc, <%=request.getContextPath()% > 将得到abc,服务器端的路径则会自动加上

        1.request.getScheme()可以返回当前页面使用的协议;默认返回http,SSL时返回https;

        2. request.getServerName()可以返回当前页面所在的服务器的名字;

        3.equest.getServerPort()可以返回当前页面所在的服务器使用的端口,就是项目在服务器上发布的 端口,或者在本地tomcat容器运行时发布的端口

        4.request.getContextPath()可以返回当前页面所在的应用的名字;

     11.@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML

      数据,需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。

       其他知识点

    testcontrller.java

    @Controller
    @SessionAttributes("user1")
    @RequestMapping(value="/testController")  //默认的前面有一个value
    public class TestController {
    
    	// 现在表示这个方法只接收POST方式发送的请求
    	@RequestMapping(value="/test1", method=RequestMethod.POST)  /*传多个参数时,用逗号隔开,requestmethod是枚举类型
    	不去定义的话,post方式,get方式默认的都是可以的,超链接都是get方式*/
    	public String test1() {
    		return "page/success";
    	}
    	
    	@RequestMapping("/test2")
    	public String test2(AppUser user) {   // 自动封装一个实体类
    		// System.out.println(username+": "+password);
    		System.out.println(user);
    		return "page/success";
    	}
    	
    	@RequestMapping("/test3")
    	public String test3(String username, int password) {  //如果password在前台传来的是数字,但他是字符串型的,依然可以接收
    		// System.out.println(username+": "+password);
    		System.out.println(password);
    		return "page/success";
    	}
    	
    	@RequestMapping("/test4")
    	public String test4(@DateTimeFormat(pattern="yyyy-MM-dd") //日期的处理
    						Date birthday) {
    		System.out.println(birthday);
    		return "page/success";
    	}
    	
    	@RequestMapping("/test5")
    	public String test5(AppUser user) {  //前台传进来的日期格式化,在类里面进行注解来处理
    		System.out.println(user);
    		return "page/success";
    	}
    	
    	@RequestMapping("/test6")
    	public String test6(AppUser user) { //想要实现的就是同时接收到两个类里面的内容
    		System.out.println(user);
    		return "page/success";
    	}
    
                }    
    

     index.jsp

    <body>
    <a href="modelAttr/test1.form">测试链接1</a><br>
    <a href="modelAttr/test2.form">测试链接2</a><br>
    <a href="modelAttr/test3.form?dname=SAIL">测试链接3</a><br>
    <a href="modelAttr/test4.form">测试链接4</a><br>
    <hr>
    <a href="testController/test1.form">测试链接</a><br>
    <a href="testController/test2.form?username=admin&password=222">测试链接2</a><br>
    <a href="testController/test3.form?password=222">测试链接3</a><br>
    <a href="testController/test4.form?birthday=2017-12-12">测试链接4</a><br>
    <form action="testController/test5.form" method="post">
    	username: <input name="username" /><br>
    	password: <input name="password" /><br>
    	hiredate: <input type="date" name="hiredate" /><br>
    	提交: <input type="submit" value="Submit" /><br>
    </form>
    <br>
    <form action="testController/test6.form" method="post"> <--!想要实现的就是同时接收到两个类里面的内容-->
    	username: <input name="username" /><br>
    	password: <input name="password" /><br>
    	hiredate: <input type="date" name="hiredate" /><br>
    	dname: <input name="dept.dname" /><br>   <!--APPuser类里面的dept变量,直接可以点出来那个Dept类里面的变量-->
    	提交: <input type="submit" value="Submit" /><br>
    </form>
    <br>
    <a href="testController/test7.form">测试链接7</a><br>
    <a id="btn" href="#">测试链接8</a><br>
    <form id="formData">
    	username: <input name="username" /><br>
    	password: <input name="password" /><br>
    </form>
    </body>
    

     Appuser.java

    private String username;
    	private String password;
    	@DateTimeFormat(pattern="yyyy-MM-dd")
    	private Date hiredate;  //如果用表单方式提交的话,又是传进去的实体类,就需要进行一下日期的格式转换了
    	private Dept dept;  //还有一个部门类
    
    	public Dept getDept() {
    		return dept;
    	}
    
    	public void setDept(Dept dept) {
    		this.dept = dept;
    	}
    
    	public AppUser(String username, String password) {
    		super();
    		this.username = username;
    		this.password = password;
    	}
    

     Dept.java

    private String dname;
    	private String loc;
    	public Dept() {
    		super();
    	}
    
    	public Dept(String dname) {
    		super();
    		this.dname = dname;
    	}
    

     success.jsp  访问成功页面

    <body>
    ${uname }
    <hr>
    <h1>访问成功的页面 !</h1>
    ${requestScope.user1 }<br>  <!--作用域 @SessionAttributes  -->
    ${sessionScope.user1 }<br>
    </body>
    
  • 相关阅读:
    【题解】【BT】【Leetcode】Populating Next Right Pointers in Each Node
    【题解】【BT】【Leetcode】Binary Tree Level Order Traversal
    【题解】【BST】【Leetcode】Unique Binary Search Trees
    【题解】【矩阵】【回溯】【Leetcode】Rotate Image
    【题解】【排列组合】【素数】【Leetcode】Unique Paths
    【题解】【矩阵】【回溯】【Leetcode】Unique Paths II
    【题解】【BST】【Leetcode】Validate Binary Search Tree
    【题解】【BST】【Leetcode】Convert Sorted Array to Binary Search Tree
    第 10 章 判断用户是否登录
    第 8 章 动态管理资源结合自定义登录页面
  • 原文地址:https://www.cnblogs.com/zuo72/p/8401582.html
Copyright © 2011-2022 走看看