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】

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 铝合金门上的胶带纸撕不掉怎么办 纸胶带撕不下来怎么办 拼多多卖不出去怎么办 联想键盘被锁了怎么办 台式电脑打不开机怎么办 文件名中不能用特殊符号怎么办 高铁喷雾扣留后怎么办 高铁没收的东西怎么办 安检被收的东西怎么办 我的律师骗我怎么办 没婆婆生了小孩怎么办 没人帮你带孩子怎么办 亲戚在家里不走怎么办 穷人家的孩子该怎么办 空腹吃李子胃疼怎么办 情侣空间农场谷仓空间不够怎么办 王者荣耀情侣解除对方不同意怎么办 oppo手机进了水怎么办 淘宝卖号被骗了怎么办 淘宝买号被骗了怎么办 后脑偏头疼怎么办最快最有效 脸两边的骨头大怎么办 做b超胎儿老盘腿怎么办 裤子白边染色了怎么办 异地恋要分手了怎么办 异地恋没话题了怎么办 陪婆婆聊天心情超级郁闷怎么办? 他不想理你了怎么办 陌陌看到信息不回怎么办 qq的文档看不了怎么办 怀孕了分手了怎么办啊 qq节日祝福关了怎么办 微信欠款不还怎么办 qq文件记录删除了怎么办 qq漫游记录删了怎么办 换了新手机微信怎么办 新手机了微信怎么办 微信收藏空间已满怎么办 微信收藏空间满了怎么办 qq步数上传不了怎么办 qq发送的文件失效了怎么办