标签:encoding created 自己 multipart stp 视图解析器 hand 共享 client
Spring-context,spring-web,spring-webmvc,servlet-api,jsp-api
在web.xml下做相应配置
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--配置前端控制器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name> 引入相关配置
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup> 在程序加载的时候就执行,这样子就会引入相关的配置启动spring的ioc注入
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--配置解决中文乱码的过滤器-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
在资源路径下配置springmvc.xml,需要开启spring的ioc注入
<context:component-scan base-package="com.yyx.mvc"></context:component-scan>
<!-- 视图解析器 -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/> 解析的路径
<property name="suffix" value=".jsp" />
</bean>
<!-- mvc注解支持 -->
<mvc:annotation-driven/>
在/WEB-INF/pages/新建一个.jsp文件写入你想显示的内容
最后写你的controller层的java代码
@Controller
public class HelloSpringmvc {
@RequestMapping(path = "/hello") 和servelet的原理一下,当访问这个路径的时候就会执行,建立一个映射关联
path和value属性一样的效果,只写value的时候可以省略属性名
method属性决定接收什么请求,枚举类型RequestMehod
params指定访问时必须传输的属性
headers指定要求的请求头
public String hello(){
return "success";通过视图解析器进行跳转,和对应的名字一样的jsp文件显示
}
}
成功编写springmvc的入门程序
实体类都需要序列化,序列化可以形成字节流,可以在不同的平台应用程序里面跑
请求地址中加入类似htttp://......?username=XXX&password=XXX
可以在对应的方法中的参数中直接添加,会通过key,value的形式,匹配key也就是username对应参数中的username,就能接收到前端请求来的数据
建立一个实体类,实体类的属性名要和表单的每个数据的name一样,如果实体类中有引用类型的数据,比如又是i一个类,可以在表单中用类名.属性给实体类中的类赋值。然后就可以直接在请求的方法中的参数使用实体类来作为参数接收
如果有list或者map集合,list对应在表单中写list属性名[索引].属性添加数据,map在对应的表单中写map属性名[key].value
写一个类implements Converter<S, T>实现方法
解决在方法中你可以写与传过来参数不同名字的参数,但是在注解的name属性中要写与传过来的参数名字相同
required属性默认为true代表必须有参数传递并且必须和name属性的名字相同
获取请求体的内容,不适用于get请求(get不包含请求体),获得整体的key=value&key=value……的形式
用于绑定url中的占位符,如controller层中地址映射为/user/{id} ,{id}就是占位符,请求地址就可写/user/10
用于获得请求头的值
获取指定名称的Cookie值
出现在方法上,表示当前方法会在控制器的方法之前。
用于多次执行控制器方法间的参数共享,将参数存入session域,需要在方法中加入Model或ModelMap参数去add或者getAttribute值 SessionStatus可以清楚Session
通过视图解析器,将你的返回的字符串作为名字,后缀为视图解析器中添加的如.jsp,最后就会解析到这个网页中,可以在方法中添加Model model参数,addAttribute将你需要查询的东西放进去然后解析后的页面可以通过el表达式取得里面的东西
关键字方式,返回值为"foward:地址"转发方式,"redirect:地址"重定向底层加了前缀的默认名称
默认请求视图解析器中设置的路径下的方法名.jsp的文件,也可以通过写入request和response参数,通过request的请求转发或者response的重定向或response的输出流跳转到自己想去的页面(后者不会通过视图解析器)
ModelAndView的对象中setViewName会找视图解析器,返回字符串的底层就用到了ModelAndView
导入有关json数据的jar包或坐标,jackson-databind,jackson-core,jackson-annotations
<!-- 在 springmvc 的配置文件中可以配置,静态资源不过滤:-->
<!-- location表示路径,mapping表示文件,**表示该目录下的文件以及子目录的文件 -->
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/images/" mapping="/images/**"/>
<mvc:resources location="/scripts/" mapping="/javascript/**"/>
发送原生ajax请求
$({ url:请求地址,contentType:"application/json;charset=UTF-8"发送过去的数据类型,data:‘{}‘数据,dataType:预期服务器返回的值,type:"请求方式默认get",success:"成功处理函数"})
在返回类型的对象上加@ResponseBody可以将对象变成json数据
导入commons-fileupload,commons-io
form表单中的enctype必须是multipart/form-data以及是post请求进行上传
public String fileupload1(HttpServletRequest request){
String realPath = request.getSession().getServletContext().getRealPath("/uploads/");
File file = new File(realPath);
if(!file.exists()){
file.mkdir();
}
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> fileItems = upload.parseRequest(request);
for (FileItem item:fileItems) {
if(item.isFormField()){
//说明普通表单项
}else {
//说明是上传文件项
String filename = item.getName();
try {
item.write(new File(realPath,filename));
System.out.println(realPath);
item.delete();//删除临时文件
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
return "success";
}
配置文件解析器
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
id必须叫这个
<property name="maxUploadSize" value="字节为单位" />
</bean>
方法
public String fileload2(HttpServletRequest request,MultipartFile upload){
String realPath = request.getSession().getServletContext().getRealPath("/uploads/");
File file = new File(realPath);
if(!file.exists()){
file.mkdir();
}
String filename = upload.getName();
try {
upload.transferTo(new File(realPath,filename));
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}
MultipartFile的参数名必须和form表单中input的type为file的name一样
导入jersey-core和jersey-client
public String fileload3(,MultipartFile upload){
String path="另外一个服务器的路径";
String filename = upload.getName();
Client client = Client.create();
WebResource resource = client.resource(path + filename);
try {
resource.put(upload.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}
编写一个自定义异常
编写异常处理器类实现HandlerExceptionResolver,解决中使用ModelAndView
将异常处理器的类写入xml中
编写拦截器的类实现HandlerInterceptor
配置拦截器xml
preHandle预处理 controller执行前
postHandle后处理 controller执行后,跳转页面之前
afterCompletion 跳转页面执行后,该方法执行,最后执行
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path=""/>配置你要拦截的方法
<mvc:exclude-mapping path=""/>配置你不要拦截的方法
<bean class=""></bean> 配置你的拦截器的类
</mvc:interceptor>
</mvc:interceptors>
标签:encoding created 自己 multipart stp 视图解析器 hand 共享 client
原文地址:https://www.cnblogs.com/rd-yyx/p/12826330.html