spring-web d10
一,springweb项目
1.首先建一个动态web项目,导入对应的jar包
–commons-logging-1.1.3.jar
–spring-aop-4.0.0.RELEASE.jar
–spring-beans-4.0.0.RELEASE.jar
–spring-context-4.0.0.RELEASE.jar
–spring-core-4.0.0.RELEASE.jar
–spring-expression-4.0.0.RELEASE.jar
–spring-web-4.0.0.RELEASE.jar
–spring-webmvc-4.0.0.RELEASE.jar
2在src文件夹里建一个包,包中有UserController.java
package com.neuedu.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller
@RequestMapping(value="/user") public class UserController { @RequestMapping(value="/showInfo") public String showInfo(){ System.out.println("你这个臭居居"); // return "/WEB-INF/views/success.jsp";//这是一个转发 return "success"; } }
3.建一个DispatherServlet.xml,它的文件类型是Spring的类型,它需要扫描包获取里面的对象。prefix是前缀,suffix是后缀。
<context:component-scan base-package="com.neuedu"></context:component-scan>
<!--InternalResourceViewResolvers 是视图解析器 ,它会将逻辑视图转换成实际的物理视图,做一个转发操作!
也就是说具体步骤:prefix + 方法的返回值 + suffix--> <!-- /WEB-INF/views/success.jsp --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"></property> <property name="suffix" value=".jsp"></property> </bean>
4.在web.xml里配置,输入di再alt+/可以调出配置好的模板,但是里面需要修改参数。最后配置所需要拦截的地址,和init-param里的param-value路径需要改成classpath:配置的springmvc,默认配置在src下,这样好配路径。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>spring-web</display-name> <!-- The front controller of this Spring Web application, responsible for handling all application requests --> <servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:DispatherServlet-servlet.xml</param-value> </init-param>
<!-- 数字0或者大于0的数字表示的是:在服务器启动的时候创建Servlet对象,而不是第一次访问的时候创建
小于0的数字指的是:在第一次访问的时候创建Servlet对象.
在数字大于O的情况下,数字越小,优先级越高!
-->
<load-on-startup>1</load-on-startup>
</servlet> <!-- Map all requests to the DispatcherServlet for handling --> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
5.写一个jsp,index.jsp页面用来发送请求,再写一个页面用来接收success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/user/showInfo/21">访问</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>成功</h1>
</body>
</html>
这样就完成了从springmvc的编写。它会从前端输入,经过servlet操作,由web.xml里拦截,然后再xml里拦截所要的文件,在里面扫描包生成对应的对象。最后通过servlet转发了。
最后return会在,InternalResourceViewResolvers 是视图解析器 ,它会将逻辑视图转换成实际的物理视图,做一个转发操作!也就是说具体步骤:prefix + 方法的返回值 + suffix。
二.属性
package com.neuedu.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.CookieValue; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import com.neuedu.bean.User; @Controller @RequestMapping(value="/user") public class UserController { @RequestMapping(value="/testParam") public String testParam( @RequestParam(value="name") String name, @RequestParam(value="password") String password, @RequestParam(value="age",required=false, defaultValue="0") Integer age ){ //这个是用来配置form表单项,最后进行输出,post和get有区别,post可以直接带参数,而get请求需要设置一个隐藏属性带参数。 System.out.println(name+password+age); // return "/WEB-INF/views/success.jsp";//这是一个转发 return "success"; } @RequestMapping(value="/testHeader") public String testHeader(@RequestHeader(value="Accept-Encoding")String Header,@RequestHeader(value="Accept")String Header1){ //这个是根据获取请求头的参数,根据键获取对应的值。 System.out.println(Header+Header1); return "success"; } @RequestMapping(value="/testCookieValue") public String testCookieValue(@CookieValue(value="JSESSIONID")String Header){ //这个是用来获取cookie属性的。 System.out.println(Header); return "success"; } @RequestMapping(value="/testRawApi") public String testRawApi(HttpSession session,HttpServletRequest request,HttpServletResponse response){ //可以用来获取request,response,session对象从而对其操作,但基本上不用 System.out.println(request); System.out.println(response); System.out.println(session); return "success"; } @RequestMapping(value="/pojo") public String testPojo(User user){ //用来获取自定义的类,里面如果user里还有参数,可以属性。属性的调用,需要注意的是前端页面的name属性需要与后面的一一对应。 System.out.println(user); return "success"; } @RequestMapping(value="/showInfo/{id}",method=RequestMethod.GET ) public String showInfo(@PathVariable(value="id")String id){ //这个是get请求,相当于查询 System.out.println(id); return "success"; } @RequestMapping(value="/showInfo",method=RequestMethod.POST ) public String showPost(){ //这个是post请求,相当于增加参数。 System.out.println("你这个臭居居"); return "success"; } @RequestMapping(value="/showInfo/{id}",method=RequestMethod.DELETE ) public String showDelete(@PathVariable(value="id")String id){ //这个是delete请求,相当于删除,值得注意的是前端调用的是post请求,然后设置一个隐藏文本,里面name是_method,值是delete System.out.println(id); return "success"; } @RequestMapping(value="/showInfo/{id}",method=RequestMethod.PUT ) public String showPut(@PathVariable(value="id")String id){ //这个是put请求,相当于改,值得注意的是前端调用的是post请求,然后设置一个隐藏文本,里面name是_method,值是put。 System.out.println(id); return "success"; } }
2.配置web.xml
<!-- HiddenHttpMethodFilter过滤器可以将POST请求转化为put请求和delete请求! --> <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>
3.@RequestParam可以接收请求的参数,相当于Servlet的getParameter()方法!
注意:要把@RequestParam和@PathVariable区分开:
三个默认属性:
value:这个字段要与请求参数的name属性值一致!
required:布尔值,默认是true,当指定为false的时候,说明这个参数不是必须的,可以不带!
defaultValue:在我们不传值的时候,默认使用defaultValue的值,传递参数的时候,使用我们传递的参数值!
4.@RequestHeader:获取请求头信息,默认属性:
value:这个字段要与请求参数的name属性值一致!
required:布尔值,默认是true,当指定为false的时候,说明这个参数不是必须的,可以不带!
defaultValue:在我们不传值的时候,默认使用defaultValue的值,传递参数的时候,使用我们传递的参数值!