想建书画网站怎么做的,汉口网站推广优化,劳务公司找工程网,网站前端改版涉及到的问题1. 注解RequestMapping修饰类 在Spring MVC中一般都是使用注解RequestMapping来映射请求#xff0c;也就是通过它来指定控制器可以处理哪些URL请求#xff0c;相当于Servlet中在web.xml中配置的映射地址作用一致。在上一节的内容中#xff0c;我们通过注解RequestMapping改进…1. 注解RequestMapping修饰类 在Spring MVC中一般都是使用注解RequestMapping来映射请求也就是通过它来指定控制器可以处理哪些URL请求相当于Servlet中在web.xml中配置的映射地址作用一致。在上一节的内容中我们通过注解RequestMapping改进了程序让请求地址可以在方法中通过注解RequestMapping来指定代码显得非常简洁。 注解RequestMapping不仅可以修饰方法还可以用来修饰类。在实际的项目中大多都是采用模块化的编程每个模块肯定各需要一个控制器控制器中的不同方法对应不同的请求地址。在使用注解RequestMapping修饰方法时需要分别制定相应的请求地址具体的代码如下所示。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/*** 商品模块控制器*/
Controller
public class ProductController {RequestMapping(/product/add)public String add() {System.out.println(商品添加测试);return product/add;}RequestMapping(/product/update)public String update() {System.out.println(商品修改测试);return product/update;}RequestMapping(/product/list)public String list() {System.out.println(商品列表测试);return product/list;}
}在每次编写操作方法的时候都需要在相应的方法中加入相同的表示模块的映射地址“/product”。这样的话操作起来就会显得稍微麻烦一点如果能在定义一个控制器的时候就能指定代表模块的映射地址不是更好吗 注解RequestMapping除了可以修饰方法也可以用来修饰类。在类中加入注解RequestMapping就可以给这个控制器添加一个映射地址其他的方法中就可以直接指定具体的访问地址即可代码如下。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/*** 商品模块控制器*/
Controller
RequestMapping(/product)
public class ProductController {RequestMapping(/add)public String add() {System.out.println(商品添加测试);return product/add;}RequestMapping(/update)public String update() {System.out.println(商品修改测试);return product/update;}RequestMapping(/list)public String list() {System.out.println(商品列表测试);return product/list;}
}此时访问商品模块中的各方法就可以通过类中的注解和方法中的注解共同组合成一个完整的映射地址编写的时候就轻松了许多。
2. 注解RequestMapping修饰方法 在学习Servlet的时候曾经对HTTP协议有过一些了解一个完整的请求由三部分组成分别是请求行、消息报头、请求正文其中请求行又包括请求方法、请求地址、协议版本通过这些信息就可以确定一个完整请求地址最终访问到相应的资源。其中请求方法最常用的就是GET和POST请求地址就是URL地址请求报头是客户端向服务器端传递请求的附加信息以及客户端自身的信息请求正文中包括发送请求所传递的参数等信息。 通过注解RequestMapping可以对HTTP协议的内容进行详细映射前面我们已经用到了请求地址的映射其实注解RequestMapping除了可以映射请求地址外还可以对请求方法、请求头、请求参数等信息映射请求。RequestMapping有四个参数分别是value、method、heads、params分别表示请求URL、请求方法、请求头和请求参数。这四个参数之间是与的关系联合使用多个条件映射可以增加请求映射的精确性。注解RequestMapping默认为请求URL之前的例子中注解RequestMapping中添加的就是映射地址四个参数中最为常用的就是请求地址和请求方法。 使用注解RequestMapping来设置请求方法具体使用代码如下。
RequestMapping(value/add, methodRequestMethod.POST)
public String add() {System.out.println(商品添加测试);return redirect:/product/list;//目标重定向
}注意处理完成以后返回值是以“redirect:”开头的这表示目标重定向也就是我们俗称的客户端跳转 此时访问这个方法的时候请求类型就必须是POST否则就会出现错误。因此在具体的操作时候我们可以通过请求类型来指定具体的操作方法HTTP请求的类型有GET、POST、PUT、DELETE等。通过注解RequestMapping可以指定所要处理的请求类型代码如下所示。
/*** 处理修改操作*/
RequestMapping(value/update, methodRequestMethod.PUT)
public String update() {System.out.println(商品修改测试);return redirect:/product/list;
}/*** 处理删除操作*/
RequestMapping(value/delete, methodRequestMethod.DELETE)
public String delete() {System.out.println(商品删除测试);return redirect:/product/list;
}注意以上的写法不是最终开发的代码在接下来的章节中会做更正在此只是简单的演示操作。 在学习Servlet的时候通过表单只能是以GET或POST提交方式要实现PUT和DELETE提交需要借助于HiddenHttpMethodFilter过滤器操作以下是HiddenHttpMethodFilter类的部分源代码。
/** Default method parameter: {code _method} */
public static final String DEFAULT_METHOD_PARAM _method;private String methodParam DEFAULT_METHOD_PARAM;/**
* Set the parameter name to look for HTTP methods.
* see #DEFAULT_METHOD_PARAM
*/
public void setMethodParam(String methodParam) {Assert.hasText(methodParam, methodParam must not be empty);this.methodParam methodParam;
}Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {HttpServletRequest requestToUse request;if (POST.equals(request.getMethod()) request.getAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE) null) {String paramValue request.getParameter(this.methodParam);if (StringUtils.hasLength(paramValue)) {requestToUse new HttpMethodRequestWrapper(request, paramValue);}}filterChain.doFilter(requestToUse, response);
}通过源码可以发现实现PUT和DELETE提交需要通过POST提交转换在提交的时候必须传入一个参数参数名是“_method”。如果需要转换为PUT提交传入的参数值是“PUT”如果需要转换为DELETE提交传入的参数值是“DELETE”。在具体的操作时首先要配置这个过滤器在web.xml文件中添加配置代码如下。
filterfilter-nameHiddenHttpMethodFilter/filter-name
filter-classorg.springframework.web.filter.HiddenHttpMethodFilter/filter-class
/filter
filter-mappingfilter-nameHiddenHttpMethodFilter/filter-nameurl-pattern/*/url-pattern
/filter-mapping在具体的JSP页面操作的代码如下。
!-- POST提交转PUT提交 --
form actionproduct/update methodpostinput typehidden name_method valuePUTinput typesubmit valuePUT提交
/form!-- POST提交转DELETE提交 --
form actionproduct/update methodpostinput typehidden name_method valueDELETEinput typesubmit valueDELETE提交
/form在每个表单中都有一个隐藏表单域用来指定提交的类型这样做不仅可以实现参数传递同时也不影响页面中的标签显示。 注解RequestMapping可以指定一个详细的URL地址在被注解的方法中就不需要考虑请求路径问题了可以着重编写具体的业务代码真正做到了请求和响应互不交叉。