大数据正式33

来源:互联网 发布:南风知我意林如斯txt 编辑:程序博客网 时间:2024/06/01 19:12

大数据正式33

SpringMVC

  • Servlet缺点
    1. 一个Servlet有8行配置文件
    2. 一个Servlet只能处理一个业务
    3. 一张表可能有4+n个Servlet,所以会有32+n行配置文件
    4. 获取属性只能得到字符串类型,需要自己转换类型
    5. 获取参数只能是request.getParameter()
  • SpringMVC优点
    1. 不管工程中有多少servlet,只需要配置一个servlet分发器即可
    2. springmvc中使用controller替代一个controller
    3. 获取参数的类型支持自动装换,而且支持对象的自动封装
    4. 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;@Controllerpublic 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;@Controllerpublic 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;@Controllerpublic 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;@Controllerpublic 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;@Controllerpublic 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));    }   

参数的同名提交

  • 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() + 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";}

文件上传

  • 注意的坑
    1. form中的参数
      1. method:post
      2. enctype:multipart/form-data
    2. file文件标签
      1. 必须有name属性
    3. 文件解析器
      1. 必须有id属性
      2. id属性的值必须是:multipartResolver
  • 改三个地方

    1. 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>
    2. 解析器(必须有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>
    3. 后台

      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;@Controllerpublic 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"

补充

阅读全文
'); })();
1 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 粘土人 粘土场景 超轻粘土作品 粘土作品教程图解 粘土作品教程 粘土作品大全图片 轻粘土作品图片 超轻粘土教程可爱简单 粘土做起泡胶 幼儿粘土简单图片 粘土制作可爱动物 用粘土做起泡胶 超轻粘土可爱简单作品 粘土蛋糕做法 手工粘土制作大全图解 轻粘土捏100种可爱小动物 超轻粘土教程 粘土简单作品 粘土蛋糕图片 轻粘土捏可爱小动物 用粘土做各种迷你小物 粘土作品图片 用超轻粘土做起泡胶 怎样让粘土直接变成起泡胶 粘土手工图片 粘土幼儿简单作品 超轻粘土蛋糕 粘土作品大全图片步骤 粘土100种做法 儿童粘土入门造型图片 超轻粘土简单作品图片 纸粘土作品图片 粘土画作品大全图片 粘土小狗又简单又可爱 粘土变成起泡胶 粘土制作迷你小饮品 超轻粘土作品教程图解 超轻粘土作品图片 超轻粘土教程可爱公主 粘土制作教程 超轻粘土制作