软装设计网站推荐,物联网方案设计与实现,做网站采集,个人开公司需要什么条件1.Restful 风格
概念#xff1a; 实现方式#xff1a;
使用PathVariable 在url相同的情况下#xff0c;会根据请求方式的不同来执行不同的方法。
使用RestFull风格的好处#xff1a;简洁、高效、安全
2、接受请求参数及数据回显
2.1、请求参数
方式一#xff1a;这里…1.Restful 风格
概念 实现方式
使用PathVariable 在url相同的情况下会根据请求方式的不同来执行不同的方法。
使用RestFull风格的好处简洁、高效、安全
2、接受请求参数及数据回显
2.1、请求参数
方式一这里的RequestParam(username)意思是将前端用usernamexxx的值传到name变量里。 方式二当接受的对象是一个对象时那我们在前端传入的变量名应与实体类中的名字保持一致否则就为null 2.2、数据回显
也有三种方式分别是Model,ModelMap,ModelAandView
这个是第三种的。 tips
3、乱码问题
我以为我的配置是最优的结果... 果然人就是不能乱飘。 先建个包再建个类专门用于存放过滤器的代码用以解决乱码的问题。代码如下
package com.zhang.Filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;public class GenericEncodingFilter implements Filter {Overridepublic void destroy() {}Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException, IOException {//处理response的字符编码HttpServletResponse myResponse(HttpServletResponse) response;myResponse.setContentType(text/html;charsetUTF-8);// 转型为与协议相关对象HttpServletRequest httpServletRequest (HttpServletRequest) request;// 对request包装增强HttpServletRequest myrequest new MyRequest(httpServletRequest);chain.doFilter(myrequest, response);}Overridepublic void init(FilterConfig filterConfig) throws ServletException {}}//自定义request对象HttpServletRequest的包装类
class MyRequest extends HttpServletRequestWrapper {private HttpServletRequest request;//是否编码的标记private boolean hasEncode;//定义一个可以传入HttpServletRequest对象的构造函数以便对其进行装饰public MyRequest(HttpServletRequest request) {super(request);// super必须写this.request request;}// 对需要增强方法 进行覆盖Overridepublic Map getParameterMap() {// 先获得请求方式String method request.getMethod();if (method.equalsIgnoreCase(post)) {// post请求try {// 处理post乱码request.setCharacterEncoding(utf-8);return request.getParameterMap();} catch (UnsupportedEncodingException e) {e.printStackTrace();}} else if (method.equalsIgnoreCase(get)) {// get请求MapString, String[] parameterMap request.getParameterMap();if (!hasEncode) { // 确保get手动编码逻辑只运行一次for (String parameterName : parameterMap.keySet()) {String[] values parameterMap.get(parameterName);if (values ! null) {for (int i 0; i values.length; i) {try {// 处理get乱码values[i] new String(values[i].getBytes(ISO-8859-1), utf-8);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}}hasEncode true;}return parameterMap;}return super.getParameterMap();}//取一个值Overridepublic String getParameter(String name) {MapString, String[] parameterMap getParameterMap();String[] values parameterMap.get(name);if (values null) {return null;}return values[0]; // 取回参数的第一个值}//取所有值Overridepublic String[] getParameterValues(String name) {MapString, String[] parameterMap getParameterMap();String[] values parameterMap.get(name);return values;}
}然后再在web.xml中进行相关配置
filterfilter-nameencoding/filter-namefilter-classcom.zhang.Filter.GenericEncodingFilter/filter-class/filterfilter-mappingfilter-nameencoding/filter-nameurl-pattern/*/url-pattern/filter-mapping
4、JSON
4.1、概念 在前端页面json和js对象的相互转换 4、JSON 这里需要注意的是RestController 注解会自动将返回值转换为JSON或XML格式的响应。 4.1、注解RestController和Controller的区别如下 注意RestControllerControllerResponseBody,二者可以组合起来搭配使用。用RestController注解返回的就只是一个JSON风格的字符串。 4.2、一个小案例
我的jdk版本是1.8。
1.建立一个实体类User。
package com.zhang.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;Data //需要导入lomb的相关依赖
AllArgsConstructor //有参构造
NoArgsConstructor //无参构造
public class User {private String name;private int age;private String sex;
}2.导入pom.xml的相关依赖。
!--依赖--dependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionscopetest/scope/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.3.4/version/dependencydependencygroupIdjavax.servlet/groupIdartifactIdservlet-api/artifactIdversion2.5/version/dependencydependencygroupIdjavax.servlet/groupIdartifactIdjstl/artifactIdversion1.2/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.9.8/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.26/versionscopecompile/scope/dependency/dependencies!--资源过滤--buildresourcesresourcedirectorysrc/main/java/directoryincludesinclude**/*.properties/includeinclude**/*.xml/include/includesfilteringfalse/filtering/resourceresourcedirectorysrc/main/resources/directoryincludesinclude**/*.properties/includeinclude**/*.xml/include/includesfilteringfalse/filtering/resource/resources/build
3.在springmvc-servlet.xml中导入相关的解决json乱码的问题。 !-- 自动扫描包让指定包下的注解生效,由IOC容器统一管理 --context:component-scan base-packagecom.zhang.controller/!-- 让Spring MVC不处理静态资源 例如.html .js .css等让他们不用走视图解析器了影响效率--mvc:default-servlet-handler /!--支持mvc注解驱动在spring中一般采用RequestMapping注解来完成映射关系要想使RequestMapping注解生效必须向上下文中注册DefaultAnnotationHandlerMapping和一个AnnotationMethodHandlerAdapter实例这两个实例分别在类级别和方法级别处理。而annotation-driven配置帮助我们自动完成上述两个实例的注入。--mvc:annotation-driven /!-- 视图解析器 --bean classorg.springframework.web.servlet.view.InternalResourceViewResolveridinternalResourceViewResolver!-- 前缀 --property nameprefix value/WEB-INF/jsp/ /!-- 后缀 --property namesuffix value.jsp //bean!--解决json乱码的问题--mvc:annotation-drivenmvc:message-converters register-defaultstruebean classorg.springframework.http.converter.StringHttpMessageConverterconstructor-arg valueUTF-8//beanbean classorg.springframework.http.converter.json.MappingJackson2HttpMessageConverterproperty nameobjectMapperbean classorg.springframework.http.converter.json.Jackson2ObjectMapperFactoryBeanproperty namefailOnEmptyBeans valuefalse//bean/property/bean/mvc:message-converters/mvc:annotation-driven
4.在web.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!--1.注册servlet--servletservlet-nameSpringMVC/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class!--通过初始化参数指定SpringMVC配置文件的位置进行关联--init-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:springmvc-servlet.xml/param-value/init-param!-- 启动顺序数字越小启动越早 --load-on-startup1/load-on-startup/servlet!--所有请求都会被springmvc拦截 --servlet-mappingservlet-nameSpringMVC/servlet-nameurl-pattern//url-pattern/servlet-mappingfilterfilter-nameencoding/filter-namefilter-classcom.zhang.Filter.GenericEncodingFilter/filter-class/filterfilter-mappingfilter-nameencoding/filter-nameurl-pattern/*/url-pattern/filter-mapping/web-app5.建立一个controller类进行测试就可以了
import com.zhang.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;RestController
public class UserController {RequestMapping(/json1)public String json1() throws JsonProcessingException {ObjectMapper mappernew ObjectMapper();User usernew User(章鱼卷,1,女);String strmapper.writeValueAsString(user);return str;}
}
6.EEROR 记得lib下要导入相关的jar包呀不然会报500的错的 5、ssm整合Mybatis层 学习就是苦中作乐加油呀我还有4天就开学了呜呜呜好快