Springmvc知识一------配置文件&URL&注解组件
来源:互联网 发布:对角矩阵的n次方怎么求 编辑:程序博客网 时间:2024/05/17 04:59
配置文件
web.xml
Springmvc项目属于动态的web项目,所以我们应该先建立一个动态web项目,然后,我们再加上相关配置即可。
web项目的总配置属性在web.xml文件中,在集成其他框架时,我们只需要在其中加入相关配置即可。
<!-- 配置springmvc的 servlet --> <servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置初始化参数 :配置springmvc配置文件的名称和路径 classpath java源文件根目录 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
注意:还有一种方式就是按照默认的来进行加载springmvc的配置文件, 即将我们的springmvc配置文件命名为-servlet.xml,并转移到/WEB-INF/目录下和web.xml同一目录下,不需要通过init-param属性再来进行配置 例如本例子中,将配置文件 【springDispatcherServlet-servlet.xml】放置到web.xml目录下也是可以的。但是,建议使用第一种方式,可以灵活的指定名称。另外解决我们的中文乱码的POST请求,我们也是在这里加上相应的配置filter。
springmvc.xml
然后在Springmvc的配置文件中。在这里的配置和spring的配置基本类似。只是还要引入Springmvc的命名空间,视图解析器的配置必须存在。还有就是后期对于内置的各种类的配置也是写在这里面。
<!-- 命名空间 beans context mvc-->xmlns:mvc="http://www.springframework.org/schema/mvc"http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd<!-- 配置自动扫描--> <context:component-scan base-package="com.wf.springmvc"/> <!-- 配置视图解析器 : 如何把handler 方法返回值解析为实际的物理视图--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/view/"></property> <property name="suffix" value=".jsp"></property> </bean>
上面是最简单的配置,配置这么多就可以利用Springmvc进行相关代码的编写,后期当我们用到什么的知识点时,会对我们的配置文件进行扩增,这里只是配置了一个最最简单的配置。
URL
@RequestMapping注解
@RequestMapping("/helloworld") public String hello(){ System.out.println("Hello World"); return "success"; }
注意:
1、RequestMapping进行映射请求的url,我们的前段控制器拦截用户给我们的请求,然后我们的前端控制器会进行URL的解析,然后找到我们所对应的映射路径,即是@RequestMapping组件进行的映射。然后进行对应的处理,返回 到前段控制器,这里我们还没有进行数据模型的存储,根据返回的String值,进行对应的视图渲染。返回值会根据视图解析器解析为实际的物理视图,对于配置的InternalResourceViewResolver类的解析器【在springmvc的配置文件中】,会通过【prefix属性值+函数返回值+suffix属性值】,这样的方式得到对应的物理视图,然后做请求转发。
2、RequestMapping 既可以标注在方法头,也可以标记在类头中,这样的话,我们可以对我们的url路径进行分类。 作用在类定义处:提供初步请求映射信息,作用在方法处:提供 进一步 细分映射信息。
RequestMapping注解常用属性
value属性:如果只有一个参数默认的值,即映射的路径。
method属性:指定页面提交的方式 ,通常有get和post请求。
@RequestMapping(value="RequestMappingMethod",method=RequestMethod.GET) public String requestMappringmethod(){ System.out.println("Hello requestMappringmethod"); return SUCCESS; }
匹配Ant风格的URL
springmvc支持ant风格的URL(了解),使用Ant有以下三条规则:
?(问号)表示通配一个字符 ;※(星号)表示通配任意字符 ; ※※(星号)表示任意层路径
//http://localhost:8080/springmvc001/RequestMappingTest/test/more/testAnt//http://localhost:8080/springmvc001/RequestMappingTest/test/more/more/testAnt@RequestMapping(value="test/**/testAnt") public String testAnt(){ System.out.println("testAnt"); return SUCCESS; }// 注意:Ant遵循匹配相似度最高原则(has more characters),URL请求/test/more/testAnt,现在存在两个路径匹配模式/**/*和/test/more/*,那么会根据模式/test/more/*来匹配
使用REST风格URL
注解@PathVariable的使用,就是为了获取REST风格的参数的传递,了解什么是REST建议访问【http://kb.cnblogs.com/page/186516/】和【http://www.infoq.com/cn/articles/rest-introduction】
/* 4 后台处理 * @PathVariable 注解 可以将url中的占位符绑定到处理函数体内。 REST风格使用 * */ @RequestMapping(value="/testPathVariable/{id}") public String TestPathVariable(@PathVariable(value="id") Integer id ){ System.out.println("PathCariable= "+id); return SUCCESS; }<b> 4前台链接 </b><br> <a href="RequestMappingTest/testPathVariable/2">testPathVariable</a><br>
注意:关于REST 即是(Representational State Transfer) 资源表现层状态转化。是目前流行 的一种互联网软件架构。他主要的特点是结构清晰,符合标准,易于理解和方便扩展。
资源:网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本,一张图片等等,总之就是一个具体的存在。我们可以利用一个URI(统一资源定位符)指向它,每一种资源都有一个特定的URI,要获取这个资源,我们就要访问他的URI,因此,URI即为每一个资源的独一无二的识别符。(注意URL与URI的区别)
表现层:把资源具体的表现出来的形式,叫做它的表现层。文本可以以TXT格式表现,也可以用html格式表现,甚至可以采用二进制的方式。
状态转化:每次发出一个请求,就是一次客户端与服务器的一次交互过程,http协议,是一个无状态的协议,即所有的状态都保存在服务器端,因此,如果客户端想要操作服务器,就必须通过某种手段,让服务器端发生“状态转化”。即HTTP协议里面,GET用来获取资源,POST用来新建资源,PUT用来更新资源,DELETE用来删除资源。
@PathVariable 映射URL绑定的占位符。带占位符的URL是spring3.0新增的功能,该功能在Springmvc向REST目标挺进的发展过程中具有重大意义。通过@PathVariable注解可以将URL中的占位符绑定到控制器处理方法的入参中。即上述代码中皆有体现。PathVariable的value属性值需要与占位符的名称一致。
REST风格下将POST请求转化为DELETE与PUT请求
<b> 前台链接方式 注意前台一定要隐藏input标签且name属性为_method, </b> <a href="RequestMappingTest/TestRestGET/2">testPathVariable</a><br> <form action="RequestMappingTest/TestRestPOST" method="post"> <input type="submit" value="TestRestPost"> </form> <form action="RequestMappingTest/TestRestDELETE/1" method="post"> <input type="hidden" name="_method" value="DELETE"> <input type="submit" value="TestRestDELETE"> </form> <form action="RequestMappingTest/TestRestPUT/1" method="post"> <input type="hidden" name="_method" value="PUT"> <input type="submit" value="TestRestPUT"> </form><!--后台进行数据处理 --> @RequestMapping(value="/TestRestGET/{id}",method=RequestMethod.GET) public String TestRestGET(@PathVariable(value="id") Integer id){ System.out.println("TestRest GET: "+id); return SUCCESS; } @RequestMapping(value="/TestRestPOST",method=RequestMethod.POST) public String TestRestPOST(){ System.out.println("TestRest POST "); return SUCCESS; } @RequestMapping(value="/TestRestDELETE/{id}",method=RequestMethod.DELETE) public String TestRestDELETE(@PathVariable(value="id") Integer id){ System.out.println("TestRest DELETE: "+id); return SUCCESS; } @RequestMapping(value="/TestRestPUT/{id}",method=RequestMethod.PUT) public String TestRestPUT(@PathVariable(value="id") Integer id){ System.out.println("TestRest PUT: "+id); return SUCCESS; }<!--web.xml 配置过滤器 --><!-- 配置org.springframework.web.filter.HiddenHttpMethodFilter :可以把post请求转化为DELETE 或者PUT请求 --> <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> <!-- 过滤所有请求--> </filter-mapping>
注解组件
@RequestMapping注解
映射路径的注解,见上面【@RequestMapping注解】小节
@PathVariable注解
用于REST风格的参数取值。见上面【使用REST风格URL】小节
@RequestParam注解
RequestParam主要是用于绑定请求参数值。get Post请求都可以。用在方法体参数内
属性
1. value=”name”, 求情参数的参数名
2. required=false, 是否必须存在
3. defaultValue=”0” 默认值
<b>前台链接</b><br> <a href="RequestMappingTest/TestRequestParam?name=rose&age=12">testRequestParam</a><br> <form action="RequestMappingTest/TestRequestParam" method="post"> name:<input type="text" name="name"> age:<input type="text" name="age"> <input type="submit" value="Submit"> </form><!--后台数据处理 -->@RequestMapping(value="/TestRequestParam") public String TestRequestParam( @RequestParam(value="name",required=false ,defaultValue="tom") String name, @RequestParam(value="age",required=false) Integer age){ System.out.println("RequestParam name: "+name+" RequestParam age: "+age); return SUCCESS; }
注意:在传递到后台时,如果利用了required=false,建议利用基本类型的封装类型进行接收,这么的话可以设置为null ,如果利用 了基本类型,则会不知道默认值是多少,报错。或者利用defaultValue进行设置也是可以解决报错问题的。
@RequestHeader注解
这个注解主要是用来获取请求头的相关信息,不常用,了解即可。他的属性值也有【value】【required】【defaultValue】,value属性值是http中的请求头中的信息名,同RequestParam,用在方法参数体内。
@RequestMapping(value="/TestRequestHeader") public String TestRequestHeader(@RequestHeader(value="Accept-Language") String al, @RequestHeader(value="Cookie") String ck){ System.out.println("Accept-Languag : "+al); System.out.println("Cookie: "+ck); return SUCCESS; }
@CookieValue注解
用来获取Cookie的信息,属性值和RequestParam相同,用在方法体参数中。
@RequestMapping(value="/TestCookieValue") public String TestCookieValue(@CookieValue(value="JSESSIONID") String cook){ System.out.println("CookieValue : "+cook); return SUCCESS; }
POJO对象参数的传递
springmvc 会自动按照请求参数名和POJO 属性名进行自动匹配,自动为该对象填充属性值,而且还支持级联属性的装配,这样的话,能大大缩减我们对表单数据利用RequestParam获取参数的重复工作。
<b>前台链接</b><br> <form action="RequestMappingTest/TestRequestParamPojo" method="post"> userName:<input type="text" name="userName"><br> userPassworld:<input type="password" name="userPassworld"><br> userAge:<input type="text" name="userAge"><br> userEmail:<input type="text" name="userEmail"><br> addressCity<input type="text" name="address.addressCity"><br> addressStreet<input type="text" name="address.addressStreet"><br> <input type="submit" value="submit"> </form><!-- 后台处理 --> @RequestMapping(value="/TestRequestParamPojo") public String Test0000(User user){ System.out.println("TestRequestParamPojo : "+user); return SUCCESS; }
注意:前台的name属性值,必须和POJO类中的变量名相同。,对于字段的数量则没有要求,可以多于POJO类中的变量,多于的话,会忽略掉,或者利用RequestParam进行单独接收,也可以少于POJO类中的变量,少于的话,会进行自动默认,在遇到级联属性时,利用【变量名.属性名】进行设置,上图就有。可以不必存在特定的构造函数。
使用原生ServletAPI作为入参
使用Servlet作为入参的话,首先我们应该加入所需要的jar包【servlet-api.jar】或者不导入,使用tomcat里面的这个jar包。具体情况看能不能在使用HttpServletRequest等时加入正确的类。
<b>前台链接</b><br><a href="RequestMappingTest/TestServletAPI">TestServletAPI</a><br><!--后台处理 -->@RequestMapping(value="/TestServletAPI") public void TestServletAPI(HttpServletRequest request, HttpServletResponse response, Writer out){ System.out.println("request"+request+"; response "+response); try { out.write("hello spring servletAPI"); } catch (IOException e) { e.printStackTrace(); } }
注意:在mvc中,并不能完全使用servlet的API,具体支持以下九种,最常用的三种
【HttpServletRequest 】【HttpServletResponse 】【 HttpSession】
【 java.security.Principal 】【 Locale 】【InputStream】
【 OutputStream 】【 Reader 】【 Writer】
- Springmvc知识一------配置文件&URL&注解组件
- springmvc 通过注解读取配置文件
- springMVC 注解及配置文件详解
- SpringMVC 注解详解(一)
- SpringMVC注解讲解(一)
- SpringMVC(一)注解
- SpringMVC知识一
- SpringMVC基于注解进行URL映射
- SpringMVC Service 注解及简单配置文件讲解
- spring+springMVC+Hibernate全注解XML配置文件
- Controller使用注解@Value加载配置文件 --SpringMVC
- SpringMVC注解入门(一)
- SpringMVC基于注解教程(一)
- SpringMVC 注解学习一@controller
- SpringMVC注解开发方式一
- SpringMVC RequestMapping注解类·Ant和占位符URL
- SpringMVC的RESTful风格url @PathVariable注解 使用
- springMVC基于注解配置教程一
- javascript HTML DOM
- 解惑rJava R与Java的高速通道
- repo回退当前分支下所有仓库到指定日期前的最新代码版本
- C++内存深度克隆(复制)算法启示录(一)
- 【C语言】如何判断出现内存泄漏
- Springmvc知识一------配置文件&URL&注解组件
- java之实现Cloneable接口的详解,克隆一个对象--对应有浅克隆和深克隆,概念结合代码深入理解
- oracle 11g初学者-day1-oracle的安装下载
- 基于jQuery的封装
- 分享几段获取远程网页内容的php代码。
- Android Studio导入第三方类库的方法
- [BZOJ2916][Poi1997]Monochromatic Triangles(容斥原理+组合数学)
- redis启动失败
- Java本地文件删除和计算文件大小