读书笔记:《硅谷百年史bet体育在线网址手机版-伟大的科技立异与创业过程》

By admin in bet体育在线网址手机版 on 2018年12月20日

假如不传  PathVariable 指定的参数,会报404

企业

Intel做不了消费品市场。Intel创造微处理器的初衷,是用它来增援销售更多的内存芯片。

在晶体管之后,出自贝尔的重点发明有:

  • 1954年,Daryl Chapin、Calvin Souther Fuller和Gerald
    皮尔逊发明的太阳能电池
  • 1958年,Arthur·施瓦罗和Charles Townes发明的激光
  • 1962年,发明的通信卫星Telstar
  • 1963年,雷欧(Leo) Schenker等人发明的按键式电话
  • 1971年,肯尼斯 Thompson(Thompson)和Dennis Ritchie发明的Unix操作系统
  • 1978年,在布鲁塞尔首试的蜂窝电话

网络的市值随着其总是装置的多少呈指数级增长。” — 梅特卡夫定律

商家软件工作的专业做法是,一家大集团购进来自不同供应商的十六个“最佳品种”的运用软件,然后集团会聘请一家像埃森哲(Accenture)集团如此的IT咨询公司,把拥有这多少个软件,同他们的六个数据库和系统连接起来。

大多数人觉着规划单独意味着产品的外观。不过对于乔布斯(乔布斯(Jobs))来说,假诺您细心回味,统筹其实是琢磨一个出品如何做事,所以要把一件事物设计好,你不可以不花时间对它进行啄磨,并且确实通晓它。你必须干净领略一个产品,知道它将何以影响和改进人的生存。

1985年三月,Kevin 凯利出版了《全球评论》(Whole Earth
Review)杂志,它是斯图亚特·布兰德的《全球概览》的存续刊物,它把虚构现实、互联网和人工智能介绍给硅谷的黑客和群众。

公司技术的内在价值(社会的、科学的和人文的市值)。

微软和新兴的Google的一部分最闻名的出品都是从初创公司买来的。他们花钱买来的不是了不起的啄磨协会,而是优良的学识产权律师,为其制品的许多决不首要的效益申请专利,以此政策来阻止竞争对手进军同一领域开展开发。

软件工程师是戏剧家,他们在测验和错误中不止寻找前进,因而不会过多关注他们的产品是否有漏洞(随后总可以修复这一个纰漏)。而硬件工程师却接受不起漏洞:每犯一个荒谬,代价都是高大的。

在21世纪的率先个10年,Google与微软之战很大程度上代表了据悉网络的世界与基于台式机的世界中间的交战

Google的开拓者确实可以说:“世界上也许只有我们可以说:我们的对象是令人们急匆匆离开大家的主页。”

Google的管理层很可能曾经意识到Google的功成名就更多地是发源收购其他铺面,而不是源自内部的开发,于是他们生产了Google风险投资集团。

Google既不创设其他硬件,也不富有内容。Google只是实现了硬件和情节的接连。

因为电子游戏依然借助于创造一些小说,通过原始的冲动(杀戮和金钱,而性是被界定的)来振奋人们的志趣,使玩者上瘾。

可以运用分组校验

生态

从全部的生态角度,看硅谷的当局、高校、产业和投资之间的关联。

从历史上看,互联网热潮与过去的另外一些经济热潮很相像,其中包括19世纪40年份的铁路热潮、20世纪20年代的汽车和无线电热潮、20世纪50年代的晶体管电子热潮和20世纪80年代的生物技术热潮

淘金热催生铁路业,而铁路带来运输业,运输业又带来港口业。港口业有六个伴生效用:港口催生了沿海城市,城市需要电力,输电需要高压电力线,这使该地段变成电力工程技术的抢先者。港口需要无线电通信,这需要电子音讯业的前行,从而催生了半导体产业,半导体产业又衍生出微处理器产业,从而暴发了私家总括机,总括机又催生了软件业,软件业又得益于互联网,互联网巨头们创立了大批财富之后,又投资于生物科技和肉色环保技术。简易,这就是广州湾区整个20世纪的野史

U.S.宇航局(NASA,一个政党部门)是率先批集成电路的根本用户。美利坚联邦合众国政坛的国防先进探讨项目署(DARPA)始建出了互联网。万维网则是由亚洲粒子物理实验室(CERN)所发明,这是一个由五个亚洲国家政党捐助的钻研中心。

产业界和高等高校期间的互相合作催生了先进的技艺,政坛是其首先个客户,战争是它的第一个使用。

硅谷的创业公司擅长发掘这多少个源自United States黄海岸和南美洲的巨型研发主题、后来到来了马尼拉湾区,不过未被充裕利用的表明。米利坚电话电报公司是一家黄海岸的信用社,它表达了半导体电子,肖克利把它带到了山景城。IBM也是一家威德尔海岸公司,在其马斯喀特的实验室发明了数量存储技术。施乐也是波罗的海岸的店家,在其帕洛阿图探究中央宏观了人机界面。美利坚合众国政坛声明了互联网,它选取巴黎综合理工探讨所作为其节点之一。亚洲核子商量主旨讲明了万维网,而首先个弥利坚的万维网服务器设在加州圣巴巴拉分校直线加速器主题,如此等等。

爱好者们超越,接着是超级的工学院,大量的内阁投资,从大学到产业的技术转换,最终是大度的私人资本

亚洲凭借“三大”(大政党、大工会、大集团)当然不是什么好事。硅谷鄙视的难为这“三大”。

现在世界各地都在试图建设和谐的硅谷,包括大马的多媒体顶尖走廊、阿联酋迪拜的互联网城、印度拉各斯的eCity,中国的中关村科技园等。

 页面的 from上也要加 modelAttribute 或 commondName

硅谷百年史-伟大的科技改进与创业历程

jackson-core-asl-1.9.11.jar 

从公司、投资、生态和振奋的五个维度,整理《硅谷百年史》一书中的重要细节部分。

–在安排文件中投入配置

总结

这不只是一种知识,仍旧一个一体化的底子服务体系,目的在于促进、帮忙和奖励新技巧领域中的冒险者。它不仅囊括了实验室、工厂和办公场地,也包括了公司律师、营销部门和高风险资本家。其余还有源源不断地从地面大学毕业的国际学生,这一切意味着着一个为冒险文化提供劳动的总体的生态系统。

譬如,文本可以用txt格式表现,也可以用HTML格式、XML格式

精神

“西大荒”精神是一种离经叛道的独立个性,它是硅谷所有发明者和一代宗师们的魂魄。

硅谷“偏爱”这些对社会生活有颠覆性效能的技巧。

硅谷首先是一个社会学和文学的实验田,然后才是一个科技和创业精神的实验田。

新技巧的出生来自大公司的“溢出”效应

埃里森代表:“我的重力一贯是根源对失败的害怕,而不是名缰利锁。我看不惯失败。”

硅谷的工程师喜欢程度流动而不是笔直流动,即从一家商店跳到另一家店铺,而不是追随着阶梯从一个岗位提拔到另一个职务。

高科技集团索要的是忘我地工作和典型般的努力,员工要的是享受集团产权的升值,而不是工资和奖金。

一个初创集团不是一个技艺集团,而是一部学习机器。

一个创业者面对着见惯司空的霸气挑战,就像一台自动投球机般冷酷无情地对着你扑面而来。关键是要了然什么日期挥杆,什么时候闪避。

互联网的神气特征,就像Unix圈子和中期个人电脑爱好者的精神特征一样,不是大商家仍旧华尔街这种残酷无情、见利忘义的历史观,它是嬉皮士公社的乌托邦精神转移到了一个高科技的条件中

以至于2000年得了,硅谷情势可以用以下三句口号来概括:“质问权威”、“不同凡想”、“转移世界

硅谷无法出现在对特立独行者不甚友善的地点。

HTTP协议,是一个无状态协议。这意味着,所有的情事都保存在劳动器端。由此,如果客户端想要操作服务器,必须透过某种手段,让服务器端爆发”状态转化”(State
Transfer)。而这种转化是制造在表现层以上的,所以就是”表现层状态转化”。客户端用到的招数,只可以是HTTP协议。具体来说,就是HTTP协议里面,六个代表操作格局的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:

投资

风险投资公司一般由多少个小团体组成,这多少个协会仍然持有技能背景(地理学家、研究人士、技术首席营业官),或者收受过投资银行、咨询企业或商店并购部门的业务培训。风险投资家从机构投资者(如养老资金、基金会、慈善资金以及具有高净值资产的个体)手中汇聚资金用于投资。

一个弱智的想法在一个能干的人手中的市值,远远超越一个绝妙的想法在一个弱智的人手中的价值。

对一家商店的研商不是对一具遗体的钻探,而是对活着的和相连变更着的东西和事关的探究。

德雷珀的基本看法是“投资就是投人”。他相信,倘诺你选对了人,“他会使你摆脱不良工作、低劣的制品和服务,把你带到较好的地步中”。

韦瑟斯的工作视角简明扼要:“并不是风险投资人创造了中标的合作社,而是创业者创办了成功的商家。大家的干活是帮助建设一家合作社,而不是简单的金融交易。”

Thomas·Perkin斯在她的记念录中更为详述了他的投资经济学:“金钱是负有商品中区别不大的”。

Valentine研究出一种“航母”式的投资格局,“航母公司”和其余一些转业劳务和“防卫”的商家结合舰队共同巡航。

完整来说,花旗国政党斥资于风险、长周期的系列;而风险投资家倾向于跟进长时间项目。

— login.jsp

jboss-logging-3.1.0.jar、

REST,即Representational State
Transfer的缩写。我们对这些短语的翻译是”表现层状态转化”。 

3) 创设校验音信用的资源文件,本例在类路径(src或config)下直接开立时可

在至极处理页面

一、Spring MVC 验证

@RequestMapping(value="/login")
public String login(HttpSession session,String userName,String password) throws MyException {
                        UserInfo user=new UserDao().getLoginUser(userName, password);
                        if(user==null){
                            throw new MyException("用户登录失败");  //如果登录失败,抛出异常
                            }
                            session.setAttribute("user", user);
                            return "success";
                        }

                        @ExceptionHandler(value={MyException.class}) //这里是进行异常处理的地方
                        public String exectionProcessAAA(MyException e,HttpServletRequest request){
                        request.setAttribute("e_msg", e.getMessage());
                        e.writeLog();
                        return "error" ;  //全局的一个异常处理页面    
                    }

http://www.douban.com/photos/album/49432287/   这是豆瓣上的url rest风格

rest 风格 

 <form action="user/login" method="post" >
                        账号:<input type="text" name="userName" /> 
                        密码:<input type="text" name="password" />
                        <input type="submit" />

七、Spring MVC中 RESTful 风格

validatemessages.properties 内容

1) 假若一贯访问  user_add_validate.jsp 现身谬误 

问题:

用 model.addAttribute(…)  即可

http://localhost:8080/myweb/userAction\_show.action?id=5  

二、Spring MVC 数据的回显

事例 怎么着详细的显示出错信息

说明: BindingResult 是Errors的子类

<mvc:annotation-driven validator="validator" />

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
                <property name="providerClass"  value="org.hibernate.validator.HibernateValidator"/>
                <property name="validationMessageSource" ref="validatemessageSource"/> //不设置则默认为classpath下的 ValidationMessages.properties
</bean>

<bean id="validatemessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">  
               <property name="basename" value="classpath:validatemessages"/>  //配置验证信息资源文件的路径
               <property name="fileEncodings" value="utf-8"/>  
               <property name="cacheSeconds" value="120"/>   //缓存时间
</bean>

http://localhost:8080/springmvc-03/get\_user/10/search

<x:form action="${pageContext.request.contextPath }/test" method="post" modelAttribute="user">
<x:input path="userName" />  //注意,要回显示的数据必须用 这样的标签
<x:input path="password" />
</x:form>

2) 多文件上传  

2) 全局十分处理

四、Spring MVC 文件上传

1) 在controller(Action)内部处理非凡

//java.lang.IllegalStateException: No WebApplicationContext found: no
ContextLoaderListener registered?

— action 中的处理

public interface IVG1, IVG2

jackson-annotations-2.4.4.jar、

在配备文件中:

1) 单文件上传

办法一: 用实现 HandlerInterceptor  接口的点子

 对于简易类型

<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
    <bean class="cat.interceptor.MyInterceptor"></bean>
</mvc:interceptor>

<mvc:interceptor>
<mvc:mapping path="/**" />
    <bean class="cat.interceptor.MySessionInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>  

http://localhost:8080/myweb/user/5/delete

<form method="post"  action="${pageContext.request.contextPath }/addUserWithImg"    enctype="multipart/form-data" >  
                   <input name="userName" /> 
                   <input name="password"/>  
                   <input name="note"/>  
                   <input type="file" name=upfile />  //注意,这个名字
                   <input type="submit" >
           </form> 

2)在pojo类上指定校验属于哪个分组

2) 需要指定  modelAttribute=”user” 那一个特性

validation-api-1.0.0.GA.jar

//例子

@RequestMapping("/get_user/{id}/{flag}")
public String getUser(@PathVariable("id") int idAAA, @PathVariable("flag") String flagAAA){
                        System.out.println(idAAA +":"+flagAAA);
                        return "success";
                    }
@RequestMapping(value="/addUser" ,method=RequestMethod.POST)
public String addUser( @ModelAttribute("user") @Validated(value=IVG1.class) UserInfo user,BindingResult bResult){
                    if(bResult.hasErrors()){
                        return "user_add_validate";
                    }
                    else{
                        return "success";
                    }
                } 
//注意,用的是  @Validated 注解 不是 @Valid

(2)客户端和服务器之间,传递这种资源的某种表现层;

public class MyInterceptor implements HandlerInterceptor {
            /*==在Controller 方法被调用之前执行,一般用来进行身份验证,授权等
              == SpringMVC中的Interceptor 拦截器是链式的,可以同时存在多个Interceptor,并根据声明的前后顺序依次执行
              == 而且所有的Interceptor中的 preHandle 方法都会在 Controller方法调用之前调用
              == SpringMVC的这种Interceptor链式结构也是可以进行中断的,preHandle的返回值为false的时候整个请求就结束了 */
            public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,
                    Object arg2) throws Exception {
                System.out.println("preHandle");
                return true;
            }

            /* 一般在处理公用的模型数据,统一指定视图等操作的时候用
             == 在preHandle方法返回值为true的时候才会执行。
             == 它的执行时间是在是在Controller的方法调用之后,DispatcherServlet进行视图的渲染之前执行
             == 可以对ModelAndView进行操作。
             == 这个方法的链式结构跟正常访问的方向是相反的,也就是说先声明的Interceptor拦截器该方法反而会后调用,这跟Struts2里面的拦截器的执行过程有点像          
            */
            public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
                    Object arg2, ModelAndView modelAndView) throws Exception {
                System.out.println("postHandle");    
            }

            /*
             == 在preHandle方法返回值为true的时候才会执行。
             == 该方法将在整个请求完成之后,也就是DispatcherServlet渲染了视图执行,  
             == 这个方法的主要作用是用于清理资源的,统一的日志及异常处理等    */
            public void afterCompletion(HttpServletRequest arg0,
                    HttpServletResponse arg1, Object arg2, Exception arg3)
                    throws Exception {
                System.out.println("afterCompletion");    
            }
        }

— 自定义相当类 //不定义也可以

<mvc:resources location="" mapping="**" />
<mvc:resources location="/css/" mapping="css/**" />
//也可以放在一个文件夹中,统一的引入,如
<mvc:resources location="/resource/" mapping="resource/**" />

4) 添加用户的主意要如下

附注: 

6) 前端页面

== 在配备文件中

<form method="post"  action="${pageContext.request.contextPath }/addUserWithMultImg"    enctype="multipart/form-data" >  
                       <input name="userName" /> 
                       <input name="password"/>  
                       <input name="note"/>  

                       <input type="file" name=upfiles />
                       <input type="file" name=upfiles />
                       <input type="file" name=upfiles />
                       <input type="file" name=upfiles />

                       <input type="submit" >
               </form> 

//注意要加上  @RequestParam
public String ddUserWithMultImg(UserInfo user,@RequestParam("upfiles") MultipartFile [] upfiles ,HttpServletRequest request )
                                throws IllegalStateException, IOException{
                    new UserDao().addUser(user);
                    String path=request.getServletContext().getRealPath("/upload_files");

                    for(MultipartFile f:upfiles){        
                        if(!f.isEmpty()){
                            File targetFile=new File(path, f.getOriginalFilename());
                            f.transferTo(targetFile);
                        }
                    }

                    return "success";
                }
public class UserInfo(
@NotEmpty(message="用户名不能为 null",groups={IVG1.class})

@Size(min=3,max=6,message="{password.not.inrange}",groups={IVG1.class,IVG2.class})
private String password;
                 ...
            }
${exception.message}  //这样即可取出异常信息

删除用户

jackson-databind-2.4.4.jar。

1) 拦截器注明

办法三: 实现WebRequestInterceptor 接口或接续实现了该接口的类

新建页面 user_add_validate.jsp

@Valid  写成了 @Validated 实测也可以

网络上的一个现实信息,可以用一个URI(统一资源定位符)指向它

 public class UserInfo {
                    private  int id;

                    @NotNull(message="用户名不能为 null")
                    @NotEmpty(message="{name.not.empty}")
                    @Pattern(regexp="13\\d{9}",message="用户名是按手机验证的格式不对")
                    private String userName;   

                    @Size(min=3,max=6,message="{password.not.inrange}")
                    private String password;

                    @NotEmpty(message="{email.not.empty}")
                    @Email(message="{email.not.correct}")
                    private String note;
                    private String aihao;

            //也可以将规则添在get 方法上    

查询用户

5) 控制器 

pojo类型的数据回显

五、Spring MVC 资源文件的引入

JSR 303 是ajvaEE6 中的一项子规范 ,叫 Bean Validation
用于对javaBean中的字段举行校验。

4.3.1.Final 本子为例

jackson-mapper-asl-1.9.11.jar

下面的拦截器的部署文件

“资源”是一种音讯实体,它可以有多种外在表现形式。我们把”资源”具体表现出来的款型,叫做它的”表现层”(Representation)。

GET用来拿到资源,POST用来新建资源(也得以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

@RequestMapping(value="/addUser" ,method=RequestMethod.POST)
                public String addUser( @ModelAttribute("user") @Valid UserInfo user,BindingResult bResult){
                    if(bResult.hasErrors()){
                        return "user_add_validate";
                    }
                    else{
                        return "success";
                    }
                } 

// jboss-logging-3.1.0.CR2.jar

万一一个架构符合REST原则,就称它为RESTful架构。关于 Representational
State Transfer (表现层状态转化) 的了然。

案由是Spring环境没起首化

(其实上例就是带多少回显的)

email.not.correct=邮箱格式不科学

1) 传统方法的 ajax访问和响应

name.not.empty=名字不可能为空

<c:forEach var="e" items="${errorList }">
                       ${e.defaultMessage}
                       </c:forEach>

                   <form action="${pageContext.request.contextPath }/addUser" method="post">
                   账号:    <input type="text" name="userName"  /> 
                   密码:  <input type="text" name="password"  /> 
                   备注:  <input type="text" name="note" /> 
                          <input type=submit value="提交" />
                   </form>

三、Spring MVC 十分处理

jackson-core-2.4.4.jar、

合法的参阅实现是: Hibernate Validator ,此实现和 Hibernate ORM
没有另外关联  //http://hibernate.org/validator

八、Spring MVC 拦截器

1) 导包

 请求的url

<mvc:interceptors>   
//如果有 多个拦截器,顺序执行   
<mvc:interceptor>   
// 如果不配置或/*,将拦截所有的Controller
<mvc:mapping path="/searchall_forupdate" /> path 配置拦的是请求的url
//<mvc:mapping path="/**" /> 所有的url包扩子url 
<bean class="cat.interceptor.MyInterceptor"></bean>   
</mvc:interceptor>   

</mvc:interceptors> 

//例子,验证用户是否登录
        public class MySessionInterceptor implements HandlerInterceptor {
                    public void afterCompletion(HttpServletRequest arg0,
                            HttpServletResponse arg1, Object arg2, Exception arg3)
                            throws Exception {    }


                    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
                            Object handler, ModelAndView arg3) throws Exception {}


                    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                            Object obj) throws Exception {
                        String url=request.getRequestURI();
                        System.out.println(url);
                        if(url.contains("login")){  //如果用户发的是登录的请求,则直接放行
                            return true;
                        }
                        else{
                            UserInfo user=(UserInfo)request.getSession().getAttribute("user");
                            if(user!=null){
                                return true;
                            }
                            else{
                                request.setAttribute("msg", "请登录");
                                request.getRequestDispatcher("login.jsp").forward(request, response);
                                return false;
                            }
                        }
                    }

1)定义分组 (其实就是概念接口,空接口就足以,一个接口就是一个分组)

SpringMVC 提供全局分外处理器举办统一的可怜处理

SpringMVC 中的Interceptor
拦截器也是一对一关键和一对一有效的,它的重要职能是掣肘用户的呼吁并开展对应的拍卖。比如通过它来拓展权力验证,或者是来判定用户是否登陆,或者是像12306
这样子判断当前时间是否是购票时间。

3) State Transfer 状态转化

要导入包 spring mvc 4.1.4

hibernate-validator-4.3.1.Final.jar

@Valid  和  BindingResult 的地点不要写反

Spring 3.x 也卖力补助     JSR 303,使用的是  Hibernate Validator

1)REST的称呼”表现层状态转化”中,省略了主语。”表现层”其实指的是”资源”(Resources)的”表现层”。

汇总下面的解释,大家总计一下怎么着是RESTful架构:

URI只代表资源的实体,不意味它的花样。严酷地说,有些网址最终的”.html”后缀名是不必要的
因为那一个后缀名表示格式,属于 “表现层”
范畴,而URI应该只表示”资源”的位置。它的具体表现格局,应该在HTTP请求的头新闻中用Accept和Content-Type字段指定,这两个字段才是对”表现层”的叙述。

题材: 当一个pojo类被六个业务方法应用,但它的声明规则不一,怎么着处理?

(3)客户端通过两个HTTP动词,对劳动器端资源开展操作,实现”表现层状态转化”。

(1)每一个URI代表一种资源;

@RequestMapping(value="/addUser" ,method=RequestMethod.POST)
public String addUser( @ModelAttribute("user") UserInfo user){
                      ....
                    } 

附 3.1 用的是

4) 在实体类上,添加校验

拔取 @ResponseBody 的办法赶回json 格式的数目

2) Representation 表现层

分组校验

REST这么些词,是罗伊 ThomasFielding在他2000年的学士杂谈中提议的,HTTP协议(1.0版和1.1版)的根本设计者、Apache服务器软件的撰稿人之一、Apache基金会的第一任主持人。长时间以来,软件研商首要关注软件设计的归类、设计艺术的衍生和变化,很少客观地评估不同的规划拔取对系统行为的震慑。而相反地,网络探讨紧要关心系统里头通信行为的底细、如何立异特定通信机制的显示,平时忽略了一个真相,这就是改变应用程序的相互风格比改变互动协议,对总体展现有更大的震慑。我这篇小说的创作目标,就是想在符合架构原理的前提下,了解和评估以网络为根基的施用软件的架构设计,得到一个功力强、性能好、适宜通信的架构

email.not.empty=邮箱无法为空

<context-param>    
<param-name>contextConfigLocation</param-name>    
<param-value>classpath:springmvc-servlet.xml</param-value>    
</context-param>
<listener>    
         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
//请求发起页面  ajax_test.jsp
$(function(){
$("#btn1").click(function(){
$.ajax({
        url:"testAjax",
        type:"post",
        data:{userName:'admin',password:'123'},
        async:false,
        cache:false,
        dataType:"json",
        success:function(data){
        //alert(data);
        alert(data.id);
        alert(data.note);
                            }
                        });
                    });
                });

@RequestMapping("/testAjax")
public void testAjax(HttpServletRequest request,HttpServletResponse response) throws IOException{
                String userName=request.getParameter("userName");
                String password=request.getParameter("password");
                System.out.println(userName+":"+password);

                response.setContentType("text/html;charset=utf-8");
            //response.getWriter().print("这是普通数据");

                String jsonStr="{\"note\":\"这是备注\",\"id\":\"90\"}";
                response.getWriter().print(jsonStr);
            }
@RequestMapping(value="/addUserWithImg",method=RequestMethod.POST)
public String addUserWithImg(UserInfo user,MultipartFile upfile /*注意这个名字要和表单元素同名*/ ,HttpServletRequest request ) 
                             throws IllegalStateException, IOException{
       System.out.println(upfile);
       System.out.println("contentType:"+upfile.getContentType()); //image/pjepg
       System.out.println("name:"+upfile.getName()); //photo
       System.out.println("getOriginalFilename:"+upfile.getOriginalFilename()); //zhangsan.jpg
       System.out.println("getSize:"+upfile.getSize());

       new UserDao().addUser(user);

       String path=request.getServletContext().getRealPath("/upload_files");
       File targetFile=new File(path, upfile.getOriginalFilename());

       upfile.transferTo(targetFile);

       return "success";
}

六、Spring MVC 关于json数据处理

@RequestBody 用来拍卖application/json 类型的央浼内容

http://localhost:8080/myweb/user/5 

3)在业务方法上点名验证的时候使用哪个分组

 <%@ taglib uri="http://www.springframework.org/tags/form" prefix="x" %>
         <x:form method="post" action="${pageContext.request.contextPath }/addUser">
           账号:<x:input path="userName" /> <x:errors path="userName" /><br>
            密码:<x:input path="password" /> <x:errors path="password" /> <br>
           备注:<x:input path="note" /><x:errors path="note" /> <br>
           <input type=submit value="提交" />
    </x:form>

age.not.inrange=年龄要在方便的限量内

 2) 在配备文件中进入配置

3) 无法直接访问 user_add_validate.jsp 要这样:

<x:form method="post" action="${pageContext.request.contextPath }/addUser" modelAttribute="user"  >
//上面也可以写成 commandName="user"
//在添加用户这个请求提交上来的时候
@RequestMapping(value="/addUser" ,method=RequestMethod.POST)
public String addUser(Model model, @Valid UserInfo user,BindingResult bResult){
                        if(bResult.hasErrors()){
                            List<ObjectError> errorList=    bResult.getAllErrors();
                            for(ObjectError e:errorList){
                                System.out.println(e.getDefaultMessage());
                            }

                            model.addAttribute("errorList",errorList); //把错误信息传到前台
                            return "user_add";
                        }

                        else{
                            return "success";
                        }
                    } 

 == 控制层

例子:

public class MyException extends Exception{
                        private String msg;
                        public MyException(String msg){
                            super(msg);
                            this.msg=msg;
                        }

                        public void writeLog(){
                            System.out.println("---异常信息"+this.msg+"已经记录-");
                        }

                    }

附加:

2) 配置文件

<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">     
<property name="exceptionMappings">     
    <props>     
    <prop key="cat.beans.MyException">error_process_1</prop>   //可以看到,可以为每种异常指定一个result视图
    <prop key="java.lang.Exception">error_process_2</prop>     
    <prop key="java.lang.Throwable">error_process_3</prop>     
    </props>     
</property>     
</bean>  
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
                 <property name="defaultEncoding" value="UTF-8" />  //这里面的这些属性可以不用,一个都不写也不会出错
                 <property name="maxUploadSize" value="5400000" />
                 <property name="uploadTempDir" value="uploadTempDir" />
</bean>
//例一 从服务端查询出一个userInfo对象返回
             //服务端
                @RequestMapping("/testAjax2") @ResponseBody  //这里用 @ResponseBody 注解声明返回json数据
                public UserInfo testAjax2(UserInfo u) {
                    UserInfo user=new UserDao().getLoginUser(u.getUserName(), u.getPassword());
                    return user;
                }
             //客户端
                 $.ajax({
                    url:"testAjax2",
                    type:"post",
                    data:{userName:'aaa',password:'aaa'},  //在服务端,用的是pojo类型的对象接收的参数
                    async:false,
                    cache:false,
                    dataType:"json",
                       success:function(data){
                        alert(data.id);
                        alert(data.note);
                    }
                });

//例二 从服务端查询一组对象返回
                @RequestMapping("/testAjax3") @ResponseBody
                public List<UserInfo> testAjax2() {
                    List<UserInfo> userList=new UserDao().getAllUser();
                    return userList;
                }

              $("#btn3").click(function(){
                        $.ajax({
                            url:"testAjax3",
                            type:"post",

                            async:false,
                            cache:false,
                            dataType:"json",
                            success:function(userList){ //从服务端返回的是一组对象
                                $.each(userList,function(key,user){
                                    $("#div1").append(user.id +"-"+user.userName+"-"+user.password+"<br />");
                                });
                            }
                        });
                    });

措施二: 继承抽象类HandlerInterceptor艾达pter  (Spring 提供的类,它实现了
HandlerInterceptor)

@RequestMapping(value="/addUser",method=RequestMethod.GET)
public String addUser(@ModelAttribute("user") UserInfo user){   //@ModelAttribute("user") 必加
                return "user_add_validate";
}

== 页面

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 mobile.365-838.com 版权所有