大数据正式33
2017-12-25 16:19
441 查看
大数据正式33
SpringMVC
Servlet缺点一个Servlet有8行配置文件
一个Servlet只能处理一个业务
一张表可能有4+n个Servlet,所以会有32+n行配置文件
获取属性只能得到字符串类型,需要自己转换类型
获取参数只能是request.getParameter()
SpringMVC优点
不管工程中有多少servlet,只需要配置一个servlet分发器即可
springmvc中使用controller替代一个controller
获取参数的类型支持自动装换,而且支持对象的自动封装
SpringMvc有多种获取参数的方式
SprigMVC入门案例
jar包项目结构
整体流程
代码
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- servlet分发器 --> <servlet> <servlet-name>springmvc</servlet-name> <!-- 分发器 --> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 注入配置文件的地址:创建spring容器 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/applicationContext-mvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- /或*.action --> <url-pattern>*.action</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
applicationContext-mvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd "> <!-- 扫描包 --> <context:component-scan base-package="com.peng"></context:component-scan> <!-- 扫描注解 --> <context:annotation-config></context:annotation-config> <bean name="/hello.action" class="com.peng.controller.HelloController"></bean> </beans>
com.peng.controller
HelloController
package com.peng.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class HelloController implements Controller { public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("index.jsp"); modelAndView.addObject("msg", "hello"); return modelAndView; } }
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> This is my JSP page. <br> <h1>${msg}</h1> </body> </html>
访问名称
http://localhost/SpringMVC_inroom/hello.action(注:端口为80)
执行结果
注解形式的SpringmMVC
package com.peng.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class HelloController { @RequestMapping("/hello.action") public String helloAction(Model model) { model.addAttribute("msg", "hello,world!"); return "index"; } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd "> <!-- 扫描包 --> <context:component-scan base-package="com.peng"></context:component-scan> <!-- 扫描注解 --> <context:annotation-config></context:annotation-config> <!-- SpringMVC的注解开关 --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 资源解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
添加前后缀的SpringMVC(applicationContext-mvc.xml)
<!-- 资源解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/"></property> <property name="suffix" value=".jsp"></property> </bean>
解决乱码--过滤器(web.xml)
<!-- 乱码过滤器 --> <filter> <filter-name>characterFilter</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>characterFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
数据的获取
HttpServletRequest对象的getParameter方法package com.peng.controller; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class UserController { @RequestMapping("/showAddUser.action") public String showAddUser() { return "addUser"; } @RequestMapping("/addUser.action") public String addUser(HttpServletRequest request, Model model) { String username = request.getParameter("username"); System.out.println(username); model.addAttribute("username", username); return "addUser"; } }
与表单的name值一样的参数String username
参数名来控制
package com.peng.controller; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class UserController { @RequestMapping("/showAddUser.action") public String showAddUser() { return "addUser"; } @RequestMapping("/addUser.action") public String addUser(String username, Model model) { System.out.println(username); model.addAttribute("username", username); return "addUser"; } }
bean对象 User
参数名来控制
package com.peng.controller; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class UserController { @RequestMapping("/showAddUser.action") public String showAddUser() { return "addUser"; } @RequestMapping("/addUser.action") public String addUser(User user, Model model) { System.out.println(user.username); model.addAttribute("username", user.username); return "addUser"; } }
对象中的对象
参数名来控制
dog.name
gog.age
class Dog{ private String name; public void setName(String name){ this.name=name; } public String getName(){ return this.name; } }
class User{ private dog; public void setDog(Dog dog{ this.dog=dog; } public Dog getDog(){ return this.dog; } }
package com.peng.controller; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class UserController { @RequestMapping("/showAddUser.action") public String showAddUser() { return "addUser"; } @RequestMapping("/addUser.action") public String addUser(String username, Model model) { System.out.println(user.dog.name); model.addAttribute("username", user.dog.name); return "addUser"; } }
日期问题
格式问题2017/12/25这个错误; 2017-12-25这个可以;
解决(Controller中)
@InitBinder public void InitBinder(ServletRequestDataBinder srdb) { srdb.registerCustomEditor(java.util.Date.class, new CustomDateEditor( new SimpleDateFormat("yyyy-MM-dd"), true)); }
参数的同名提交
Stringa,b,c
例子
@RequestMapping("/addUser.action") public String addUser( HttpServletRequest request, Model model, Date date, String like) { String username = request.getParameter("username"); System.out.println(username + date.toString() + like); model.addAttribute("username", username); return "addUser"; }
String[]
{a,b,c}数组形式
例子
@RequestMapping("/addUser.action") public String addUser( HttpServletRequest request, Model model, Date date, String[] like) { String username = request.getParameter("username"); System.out.println(username + date.toString() + Arrays.toString(like)); model.addAttribute("username", username); return "addUser"; }
参数名称不一致的问题
问题呈现form表单提交过来的name和参数中的name值不相同时--因为要见名知义,稍微改动了参数的名称
@RequestParam("hobby")String[] hobbies
@RequestParam
value--对应form中的name值
defaultValue--默认的值
require--必须传过来时有参数
例子
@RequestMapping("/addUser.action") public String addUser( HttpServletRequest request, Model model, Date date, @RequestParam(value = "like", defaultValue = "啥也不喜欢!") String[] likes) { String username = request.getParameter("username"); System.out.println(username + date.toString() + Arrays.toString(likes)); model.addAttribute("username", username); return "addUser"; }
文件上传
注意的坑form中的参数
method:post
enctype:multipart/form-data
file文件标签
必须有name属性
文件解析器
必须有id属性
id属性的值必须是:multipartResolver
改三个地方
jsp中
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML > <html> <head> <title>Add User</title> </head> <body bgcolor="#0000ff" text="#ffffff"> <form action="addUser.action" method="POST" enctype="multipart/form-data"> <table border="1"> <tr> <td>用户名:</td> <td><input type="text" name="username" /> </td> </tr> <tr> <td>时间:</td> <td><input type="date" name="date" /> </td> </tr> <tr> <td>上传文件:</td> <td><input type="file" name="file" /> </td> </tr> <tr> <td>爱好:</td> <td>篮球<input type="checkbox" name="like" value="basketball" /> 足球<input type="checkbox" name="like" value="football" /> 乒乓球<input type="checkbox" name="like" value="pingpangball" /> </tr> <tr> <td>提交:</td> <td><input type="submit" value="确认" /> </td> </tr> </table> </form> </body> </html>
解析器(必须有id和class)
<!-- 文件上传解析器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8"></property> <property name="maxUploadSize" value="10485760000"></property> <property name="maxInMemorySize" value="40960"></property> </bean>
后台
package com.peng.controller;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
@Controller
public class UserController {
@RequestMapping("/showAddUser.action")
public String showAddUser() {
return "addUser";
}
@RequestMapping("/addUser.action")
public String addUser(@RequestParam MultipartFile file) throws IOException {
FileUtils.writeByteArrayToFile(new File(
"C:\\Users\\Administrator.PC-20160710IJPJ\\Desktop\\haha.png"),
file.getBytes());
System.out.println(file.toString());
return "addUser";
}
@InitBinder public void InitBinder(ServletRequestDataBinder srdb) { srdb.registerCustomEditor(java.util.Date.class, new CustomDateEditor( new SimpleDateFormat("yyyy-MM-dd"), true)); }}
请求和重定向
默认是转发重定向--不能直接写界面,尤其是WEB-INF下的界面
return "redirect:请求" return "redirect:addUser.action"
补充
相关文章推荐
- 大数据24小时:机械人专家席宁因涉嫌诈骗被FBI逮捕,上海徐汇区正式启用“人工智能首席服务官”
- 大数据正式13
- 大数据正式京淘附加爬虫
- 淘宝开放平台正式环境获取数据(一)
- App Analytics_苹果全新应用数据分析功能正式向开发者开放
- 大数据正式15
- 两项大数据相关国家标准正式发布
- 33、(知识篇)SpringMVC10 数据格式化
- 622的一些事:美国正式起诉斯诺登,Facebook泄露600万用户数据
- 打正式包混淆时遇到的坑,不要把依赖包里的model给混淆了,否则json解析的时候会找不到model,导致加载不出数据,都是null
- 大数据正式京淘3
- 大数据正式16
- 阿里云正式推出消息队列Kafka:兼容开源,数据可靠性99.999999%
- 阿里巴巴解决数据拆分:Cobar正式开源
- 大数据正式19
- 大数据正式京淘8
- 大数据正式京淘9
- 大数据正式21
- 华为在广西钦州建云计算平台,智能交互SaaS协会正式在京成立 | 大数据24小时
- 两项大数据相关国家标准正式发布