国际网站怎么注册免费的,172分销系统,企业网站建设训,app开发用到的技术1.请求
1.请求参数
SpringMVC将传递的参数封装到处理器方法的形参中#xff0c;达到快速访问参数的目的
1.普通类型参数传参
page.jsp
% page contentTypetext/html;charsetUTF-8 languagejava %
html
body
h1请…1.请求
1.请求参数
SpringMVC将传递的参数封装到处理器方法的形参中达到快速访问参数的目的
1.普通类型参数传参
page.jsp
% page contentTypetext/html;charsetUTF-8 languagejava %
html
body
h1请求参数测试页面/h1
/body
/htmlweb.xml
?xml version1.0 encodingUTF-8?
web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsdversion4.0!--乱码处理过滤器与Servlet中使用的完全相同差异之处在于处理器的类由Spring提供--filterfilter-nameCharacterEncodingFilter/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-value/init-param/filterfilter-mappingfilter-nameCharacterEncodingFilter/filter-nameurl-pattern/*/url-pattern/filter-mappingservletservlet-nameDispatcherServlet/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath*:spring-mvc.xml/param-value/init-param/servletservlet-mappingservlet-nameDispatcherServlet/servlet-nameurl-pattern//url-pattern/servlet-mapping
/web-app
spring-mvc.xml
context:component-scan base-packagecomcontext:include-filter typeannotation expressionorg.springframework.stereotype.Controller//context:component-scan
新建com.controller.UserController类
参数名与处理器方法形参名保持一致 //http://localhost/requestParam1?nameljb//http://localhost/requestParam1?nameljbage20RequestMapping(/requestParam1)public String requestParam1(String name,int age){System.out.println(name,age);return page.jsp;}
RequestParam 的使用
类型 形参注解
位置处理器类中的方法形参前方
作用绑定请求参数与对应处理方法形参间的关系
//http://localhost/requestParam2?userNameljbRequestMapping(/requestParam2)public String requestParam2(RequestParam(value userName,required true) String name){System.out.println(name);return page.jsp;}
2.POJO类型参数传参
当POJO中使用简单类型属性时 参数名称与POJO类属性名保持一致
新建domain.User
package com.domain;public class User {private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age age;}Overridepublic String toString() {return User{ name name \ , age age };}
}//http://localhost/requestParam3?nameljbage20RequestMapping(/requestParam3)public String requestParam3(User user){System.out.println(user);return page.jsp;}
当POJO类型属性与其他形参出现同名问题时将被同时赋值
//http://localhost/requestParam4?nameljbage20RequestMapping(/requestParam4)public String requestParam4(User user,int age){System.out.println(useruser,ageage);return page.jsp;} 建议使用RequestParam注解进行区分
当POJO中出现对象属性时参数名称与对象层次结构名称保持一致 新建Address类写入provincecityaddress与对应gettersettertostring
在User类加入Address与其gettersetter等
//http://localhost/requestParam5?address.citybeijingRequestMapping(/requestParam5)public String requestParam5(User user){System.out.println(user.getAddress().getCity());return page.jsp;}
当POJO中使用简单类型属性时参数名称与POJO类属性名保持一致
private ListString nick;public ListString getNick() {return nick;}public void setNick(ListString nick) {this.nick nick;}
toString...
//http://localhost/requestParam6?nickjock1nickjockmenickljbRequestMapping(/requestParam6)public String requestParam6(User user){System.out.println(user);return page.jsp;}
当POJO中出现List保存对象数据参数名称与对象层次结构名称保持一致使用数组格式描述集合中对象的位置
添加private ListAddress addresses;与其对应方法 //http://localhost/requestParam7?addresses[0].citybeijingaddresses[1].provincegansuRequestMapping(/requestParam7)public String requestParam7(User user){System.out.println(user.getAddresses());return page.jsp;}
当POJO中出现Map保存对象数据参数名称与对象层次结构名称保持一致使用映射格式描述集合中对象的位置
package com.domain;import java.util.List;
import java.util.Map;public class User {private String name;private Integer age;private Address address;private ListString nick;private ListAddress addresses;private MapString,Address addressMap;public MapString, Address getAddressMap() {return addressMap;}public void setAddressMap(MapString, Address addressMap) {this.addressMap addressMap;}public ListAddress getAddresses() {return addresses;}public void setAddresses(ListAddress addresses) {this.addresses addresses;}public ListString getNick() {return nick;}public void setNick(ListString nick) {this.nick nick;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address address;}public String getName() {return name;}public void setName(String name) {this.name name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age age;}Overridepublic String toString() {return User{ name name \ , age age , address address , nick nick , addresses addresses , addressMap addressMap };}
}//http://localhost/requestParam8?addressMap[job].citybeijingaddressMap[home].provincegansuRequestMapping(/requestParam8)public String requestParam8(User user){System.out.println(user.getAddressMap());return page.jsp;}
//{homeAddress{provincegansu, citynull, addressnull}, jobAddress{provincenull, citybeijing, addressnull}}
3.数组与集合类型参数传参
数组类型传参
请求参数名与处理器方法形参名保持一致且请求参数数量 1个
//http://localhost/requestParam9?nickjockmenickljbRequestMapping(/requestParam9)public String requestParam9(String[] nick){System.out.println(nick[0],nick[1]);return page.jsp;}
集合类型传参
保存简单类型数据请求参数名与处理器方法形参名保持一致且请求参数数量 1个
//http://localhost/requestParam10?nickjockmenickljbRequestMapping(/requestParam10)public String requestParam10(RequestParam(nick) ListString nick){System.out.println(nick);return page.jsp;}
//[jockme, ljb]
注意 SpringMVC默认将List作为对象处理赋值前先创建对象然后将nick作为对象的属性进行处理。由于List是接口无法创建对象报无法找到构造方法异常修复类型为可创建对象的ArrayList类型后对象可以创建但没有nick属性因此数据为空。此时需要告知SpringMVC的处理器nick是一组数据而不是一个单一数据。通过RequestParam注解将数量大于1个names参数打包成参数数组后 SpringMVC才能识别该数据格式并判定形参类型是否为数组或集合并按数组或集合对象的形式操作数据
2.类型转换器
SpringMVC对接收的数据进行自动类型转换该工作通过Converter接口实现
声明自定义的转换格式并覆盖系统转换格式 context:component-scan base-packagecomcontext:include-filter typeannotation expressionorg.springframework.stereotype.Controller//context:component-scan!--5.启用自定义Converter--mvc:annotation-driven conversion-serviceconversionService/!--1.设定格式类型Converter注册为Bean受SpringMVC管理--bean idconversionServiceclassorg.springframework.format.support.FormattingConversionServiceFactoryBean!--2.自定义Converter格式类型设定该设定使用的是同类型覆盖的思想--property nameformatters!--3.使用set保障相同类型的转换器仅保留一个避免冲突--set!--4.设置具体的格式类型--bean classorg.springframework.format.datetime.DateFormatter!--5.类型规则--property namepattern valueyyyy-MM-dd//bean/set/property/bean
//http://localhost/requestParam11?date2023-11-23RequestMapping(/requestParam11)public String requestParam11(Date date){System.out.println(date);return page.jsp;}
日期类型格式转换简化版
名称 DateTimeFormat
类型 形参注解、成员变量注解
位置形参前面 或 成员变量上方
作用为当前参数或变量指定类型转换规则
context:component-scan base-packagecomcontext:include-filter typeannotation expressionorg.springframework.stereotype.Controller//context:component-scanmvc:annotation-driven/
//http://localhost/requestParam11?date2023-11-23RequestMapping(/requestParam11)public String requestParam11(DateTimeFormat(pattern yyyy-MM-dd) Date date){System.out.println(date);return page.jsp;}
3.请求映射
RequestMapping
当定义在方法上
类型 方法注解
位置处理器类中的方法定义上方
作用绑定请求地址与对应处理方法间的关系
//http://localhost/requestURL2
Controller
public class UserController {RequestMapping(/requestURL2)public String requestURL2() {return page.jsp;}
}当定义在类上
类型 类注解
位置处理器类定义上方
作用为当前处理器中所有方法设定公共的访问路径前缀
//http://localhost/user/requestURL2
Controller
RequestMapping(/user)
public class UserController {RequestMapping(/requestURL2)public String requestURL2() {return page.jsp;}
} 注意如果加了/user要求所有的页面都在user目录下 常用属性
RequestMapping(value/requestURL3, //设定请求路径与path属性、 value属性相同method RequestMethod.GET, //设定请求方式params name, //设定请求参数条件headers content-typetext/*, //设定请求消息头条件consumes text/*, //用于指定可以接收的请求正文类型MIME类型produces text/* //用于指定可以生成的响应正文类型MIME类型
)
public String requestURL3() {return /page.jsp;
}2.响应
响应方式 1.页面跳转
当处理器方法的返回值类型为String类型即可通过具体的返回值设置访问的页面
转发默认
RequestMapping(/showPage1)
public String showPage1() {System.out.println(user mvc controller is running ...);return forward:page.jsp;
}重定向
RequestMapping(/showPage2)
public String showPage2() {
System.out.println(user mvc controller is running ...);
return redirect:page.jsp;
}注意页面访问地址中所携带的 / 重定向地址栏发生了变化
页面访问快捷设定
bean classorg.springframework.web.servlet.view.InternalResourceViewResolverproperty nameprefix value/WEB-INF/page//property namesuffix value.jsp/
/beanpublic String showPage3() {return page;
}如果未设定了返回值使用void类型则默认使用访问路径作页面地址的前缀后缀 bean classorg.springframework.web.servlet.view.InternalResourceViewResolverproperty nameprefix value/WEB-INF/page//property namesuffix value.jsp//bean
//最简页面配置方式使用访问路径作为页面名称省略返回值
RequestMapping(/showPage5)
public void showPage5() {System.out.println(user mvc controller is running ...);
}2.带数据的页面跳转
方式一使用HttpServletRequest类型形参进行数据传递
% page contentTypetext/html;charsetUTF-8 languagejava %
html
body
h1页面跳转测试中.../WEB-INF/page/page.jsp/h1
info:${name}
/body
/html
RequestMapping(/showPageAndData1)
public String showPageAndData1(HttpServletRequest request) {request.setAttribute(name,ljb);return page;
}方式二使用Model类型形参进行数据传递
body
h1页面跳转测试中.../WEB-INF/page/page.jsp/h1
info:${name}br
book的name:${book.name}br
book的price:${book.price}br
/body
package com.domain;public class Book {private String name;private Double price;public String getName() {return name;}public void setName(String name) {this.name name;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price price;}Overridepublic String toString() {return Book{ name name \ , price price };}
}RequestMapping(/showPageAndData2)
public String showPageAndData2(Model model) {model.addAttribute(name,ljb);Book book new Book();book.setName(SpringMVC入门实战);book.setPrice(66.6d);model.addAttribute(book,book);return page;
}方法三使用ModelAndView类型形参进行数据传递将该对象作为返回值传递给调用者
//使用ModelAndView形参传递参数该对象还封装了页面信息
RequestMapping(/showPageAndData3)
public ModelAndView showPageAndData3(ModelAndView modelAndView) {//ModelAndView mav new ModelAndView(); 替换形参中的参数Book book new Book();book.setName(SpringMVC入门案例);book.setPrice(66.66d);//添加数据的方式key对valuemodelAndView.addObject(book,book);//添加数据的方式key对valuemodelAndView.addObject(name,Jockme);//设置页面的方式该方法最后一次执行的结果生效modelAndView.setViewName(page);//返回值设定成ModelAndView对象return modelAndView;
}附使用ModelAndView类型形参进行数据传递将该对象作为返回值传递给调用者 RequestMapping(/showPageAndData4)public ModelAndView showPageAndData4 (ModelAndView modelAndView){modelAndView.setViewName(forward:WEB-INF/page/page.jsp);return modelAndView;}RequestMapping(/showPageAndData5)public ModelAndView showPageAndData5(ModelAndView modelAndView){modelAndView.setViewName(redirect:page.jsp);return modelAndView;} 3.返回数据
方式一使用response对象完成数据返回
RequestMapping(/showData1)public void showData1(HttpServletResponse response) throws IOException {response.getWriter().write(message);} 方式二使用ResponseBody
ResponseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后写入到response对象的body区可用于将方法的返回值直接作为HTTP响应的内容返回给客户端通常用来返回JSON数据或者是XML数据
RequestMapping(/showData2)ResponseBodypublic String showData2(){return message;} 4.返回json数据
方法一基于response返回数据的简化格式返回JSON数据
导入json坐标
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom/groupIdartifactIdMVCresponse/artifactIdversion1.0-SNAPSHOT/versionpackagingwar/packagingdependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.13.2/versionscopetest/scope/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactIdversion5.1.19.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.1.9.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion5.3.22/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.2.16/version/dependencydependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.13/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.33/version/dependencydependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion2.0.7/version/dependencydependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactIdversion1.9.4/version/dependency!--servlet3.1规范的坐标--dependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.1.0/versionscopeprovided/scope/dependency!--jsp坐标--dependencygroupIdjavax.servlet.jsp/groupIdartifactIdjsp-api/artifactIdversion2.1/versionscopeprovided/scope/dependency!--spring web坐标--dependencygroupIdorg.springframework/groupIdartifactIdspring-web/artifactIdversion5.1.9.RELEASE/version/dependency!--springmvc坐标--dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.1.9.RELEASE/version/dependency!--json相关坐标3个--dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactIdversion2.9.0/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.9.0/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-annotations/artifactIdversion2.9.0/version/dependency/dependenciespropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/properties!--构建--build!--设置插件--plugins!--具体的插件配置--plugingroupIdorg.apache.tomcat.maven/groupIdartifactIdtomcat7-maven-plugin/artifactIdversion2.1/versionconfigurationport80/portpath//path/configuration/plugin/plugins/build/project
//使用jackson进行json数据格式转化
RequestMapping(/showData3)
ResponseBody
public String showData3() throws JsonProcessingException {Book book new Book();book.setName(SpringMVC入门案例);book.setPrice(66.66d);ObjectMapper om new ObjectMapper();return om.writeValueAsString(book);
}方法二使用SpringMVC提供的消息类型转换器将对象数据自动转换为JSON数据
//使用SpringMVC注解驱动对标注ResponseBody注解的控制器方法进行结果转换由于返回值为引用类型自动调用jackson提供的类型转换器进行格式转换
RequestMapping(/showData4)
ResponseBody
public Book showData4() {Book book new Book();book.setName(SpringMVC入门案例);book.setPrice(66.66d);return book;
}需手工添加信息类型转换器或添加注解驱动简化配置
mvc:annotation-driven/ 同时解决了乱码问题
方法三使用SpringMVC提供的消息类型转换器将集合数据自动转换为JSON数据 RequestMapping(/showData5)ResponseBodypublic List showData5(){Book book1 new Book();book1.setName(SpringMVC入门案例);book1.setPrice(66.66d);Book book2 new Book();book2.setName(SpringMVC入门案例);book2.setPrice(66.66d);ArrayList al new ArrayList();al.add(book1);al.add(book2);return al;} 3.Servlet相关接口替换方案
1.SpringMVC提供访问原始Servlet接口API的功能通过形参声明即可
package com.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;Controller
public class UserController {RequestMapping(/servletApi)public String servletApi(HttpServletRequest request, HttpServletResponse response, HttpSession session){System.out.println(request);System.out.println(response);System.out.println(session);return page;}
}
2.Head数据获取
名称 RequestHeader
类型 形参注解
位置处理器类中的方法形参前方
作用绑定请求头数据与对应处理方法形参间的关系
先开启注解驱动
mvc:annotation-driven/
RequestMapping(/headApi)public String headApi(RequestHeader(Accept-Encoding) String headMsg){System.out.println(headMsg);System.out.println();return page;}
3.cookie数据获取
名称 CookieValue
类型 形参注解
位置处理器类中的方法形参前方
作用绑定请求Cookie数据与对应处理方法形参间的关系
RequestMapping(/cookieApi)public String cookieApi(CookieValue(JSESSIONID) String jsessionid){System.out.println(jsessionid);return page;}
4.Session 数据获取
名称 SessionAttribute
类型 形参注解
位置处理器类中的方法形参前方
作用绑定请求Session数据与对应处理方法形参间的关系
//http://localhost/setSessionData
RequestMapping(/setSessionData)public String serSessionData(HttpSession session){session.setAttribute(name,ljb);return page;}
//http://localhost/sessionApiRequestMapping(/sessionApi)public String sessionApi(SessionAttribute(name) String name){System.out.println(name);return page;}
5.Session数据设置
名称 SessionAttributes
类型 类注解
位置处理器类上方
作用声明放入session范围的变量名称适用于Model类型数据传参
Controller
SessionAttributes(names{name})
public class ServletController {RequestMapping(/sessionApi)public String sessionApi(SessionAttribute(name) String name,SessionAttribute(age) int age,SessionAttribute(gender) String gender){System.out.println(name);System.out.println(age);System.out.println(gender);return page;}RequestMapping(/setSessionData2)public String serSessionData2(Model model){model.addAttribute(age,20);model.addAttribute(gender,男);return page;}
} 因为没有name所以还要先运行一次setSessionData然后setSessionData2然后sessionApi
注解式参数数据封装底层原理
数据的来源不同对应的处理策略要进行区分
Head
Cookie
Session
SpringMVC使用策略模式进行处理分发
顶层接口HandlerMethodArgumentResolver
实现类 ……