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>
    
  • 相关阅读:
    位运算的简单简要
    Date()函数详细参数
    Android画图之Matrix(二)
    图像渐变特效的简单介绍
    Android MotionEvent中getX()和getRawX()的区别
    Timer计时器
    android中raw文件夹和asset文件夹的共同点和区别
    Selector、shape详解
    select语句后以for update结尾
    Openfire(原来的Wildfire) 在 Web 2.0 中的作用
  • 原文地址:https://www.cnblogs.com/zuo72/p/8401582.html
Copyright © 2011-2022 走看看