朱杰兵blog

jonhney'blog
posts - 140, comments - 1, trackbacks - 0, articles - 0

Spring Web MVC 处理Http请求的大致过程: 一旦Http请求到来,DispatcherSevlet将负责将请求分发。DispatcherServlet可以认为是Spring提供的前端控制器,所有的请求都有经过它来统一分发。 在DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller。HandlerMapping是这样一种对象,它能够完成客户请求到Controller之间的映射。在Struts中,这种映射是通过struts-config.xml文件完成的。其中,Spring为Controller接口提供了若干实现,例如Spring默认使用的BeanNameUrlHandlerMapping。还有,SimpleUrlHandlerMapping,CommonsPathMapHandlerMapping。 Spring Controller将处理来自DispatcherServlet的请求。Spring的Controller类似于struts的Action,能够接受HttpServletRequest和HttpServletResponse。Spring为Controller接口提供了若干实现类,位于org.springframework.web.servlet.mvc包中。由于Controller需要为并发用户处理上述请求,因此实现Controller接口时,必须保证线程安全并且可重用。Controller将处理客户请求,这和Struts Action 扮演的角色是一致的。 一旦Controller处理完客户请求,则返回ModelAndView对象给DispatcherServlet前端控制器。ModelAndView中包含了模型(Model)和视图(View)。从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观角度考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型和视图。前端控制器返回的视图可以是视图的逻辑名,或者实现了View接口的对象。View对象能够渲染客户响应结果。其中,ModelAndView中的模型能够供渲染View时使用。借助于Map对象能够存储模型。 如果ModelAndView返回的视图只是逻辑名,则需要借助Spring提供的视图解析器(ViewResoler)在Web应用中查找View对象,从而将响应结果渲染给客户。 DispatcherServlet将View对象渲染出的结果返回个客户。

posted @ 2015-05-19 15:23 朱杰兵 阅读(314) | 评论 (0)编辑 收藏

方法/步骤

  1. 在系统变量里点击新建,变量名填写JAVA_HOME,变量值填写JDK的安装路径,在这里就填写“C:\Program Files\Java\jdk1.6.0_26”了。


  2. 在系统变量里点击新建变量名填写CLASSPATH,变量值填写“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar”。注意不要忘记前面的点和中间的分号。


  3. 在系统变量里找到Path变量,这是系统自带的,不用新建。双击Path,由于原来的变量值已经存在,故应在已有的变量后加上“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin”。注意前面的分号。


  4. 至此,应有的环境变量已经配置完毕。验证的方法:在运行框中输入cmd命令,回车后输入java,按回车出现以下画面


  5. 5

    输入javac,按回车出现以下画面,则表示设置成功。



posted @ 2015-05-12 10:52 朱杰兵 阅读(105) | 评论 (0)编辑 收藏

左外连接包含left join左表所有行,如果左表中某行在右表没有匹配,则结果中对应行右表的部分全部为空(NULL).

注:此时我们不能说结果的行数等于左表数据的行数。当然此处查询结果的行数等于左表数据的行数,因为左右两表此时为一对一关系。

**********************************************************************************
下面介绍一下当两表为多对多的时候我们该如何建表以及些SQL语句。

新建三表:

表A:  student 截图如下:

SQL多表连接查询

表B:  course 截图如下:

SQL多表连接查询

表C:  student_course 截图如下:

SQL多表连接查询

一个学生可以选择多门课程,一门课程可以被多个学生选择,因此学生表student和课程表course之间是多对多的关系。

当两表为多对多关系的时候,我们需要建立一个中间表student_course,中间表至少要有两表的主键,当然还可以有别的内容。

SQL 语句:select s.Name,C.Cname from student_course as sc left join student as s on s.Sno=sc.Sno left join course as c on c.Cno=sc.Cno

执行结果:

SQL多表连接查询

此条SQL执行的结果是学生选课的情况。

posted @ 2015-05-08 15:27 朱杰兵 阅读(106) | 评论 (0)编辑 收藏

boolean  1 字节
char 2 字节

整数类型 byte 1 字节
short 2 字节
int 4 字节
long 8 字节
浮点类型
float 4 字节
double 8 字节


java中,只要是字符,不管是数字还是英文还是汉字,都占两个字节,都是一个char。

java一个汉字占几个字节


在java中占两个字节,用char类型表示,因为是Unicode编码,
ps utf-8 的汉字占3个字节 gbk 是两个
看编码方式:utf-8码的中文都是3字节的,而 gbk/gbk18030 是2字节的。



posted @ 2015-05-05 16:35 朱杰兵 阅读(96) | 评论 (0)编辑 收藏

1.使用(String)转换,要注意类型不一致时会报类型转换异常CalssCastException,                  如果object是null的话,返回的也是null .    ((String)object == null)   ----->true
2.使用.toString(),要注意object为null的时候,会报空指针异常
3.String.valueOf(),源码是
public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); }
如果object为null的时候,返回"null"字符串,却避免了抛出空指针异常

posted @ 2015-04-28 16:19 朱杰兵 阅读(135) | 评论 (0)编辑 收藏

package cn.mysteel.wms.user.web;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

public class Test
{

    public static void main(String[] args)
    {
        List<String> list = new ArrayList<String>();
        list.add("朱杰兵");
        list.add("zhujiebing");
        list.add("zhujiebing");
        list.add("22222");
        list.add("22222");
        
        List<String> newList = new ArrayList<String>();
        
        //第一种方式用set去重
        /*Set<String> set = new HashSet<String>();
        
        for(String str : list)
        {
            if(set.add(str))
            {
                newList.add(str);
            }
        }
        
        */
        
        
        //第二种方式用linkedhashset去重
        newList = new ArrayList<String>(new LinkedHashSet<String>(list));
        
        for(String str2 : newList)
        {
            System.out.println(str2);
        }
    }
}

posted @ 2015-04-16 15:49 朱杰兵 阅读(129) | 评论 (0)编辑 收藏

List<UserOutPlanItem> itemList = info.getItemList();//需要去重汇总的list
        
        List<UserOutAuditDTO> summary = new ArrayList<UserOutAuditDTO>();;
       
         //汇总到的map value为总数量和总重量
        Map<String, String> map = new HashMap<String, String>();

        if (ObjectUtils.notEmpty(itemList))
        {
            for (UserOutPlanItem item : itemList)
            {
                //这六个字段相同则汇成一条,并且把重量和数量累加
                String key = item.getBreedName()+"_"+item.getSpecName()+"_"+
                        item.getMaterialName()+"_"+item.getFactoryName()+"_"+
                        item.getNumUtil()+"_"+item.getWeightUtil();

                String num_weight = map.get(key);
                //当键不存在的时候汇一条
                if (StringUtils.isNull(num_weight))
                {
                    map.put(key, item.getNum()+"_"+item.getWeight());
                }
                //当key已经存在了,则累加
                else
                {
                    String[] arr = num_weight.split("_");
                    String thisNum = MoneyCalculateUtils.add(arr[0], item.getNum(), 0);
                    String thisWeight = MoneyCalculateUtils.add(arr[1], item.getWeight(), 4);
                    map.put(key, thisNum + "_" + thisWeight);
                }
            }
        }

        //重新解析map,把数据封装到summary
        if (ObjectUtils.notEmpty(map))
        {
            Set<String> ketSet = map.keySet();
            for (String str : ketSet)
            {
                String arr[] = str.split("_");
                UserOutAuditDTO dto = new UserOutAuditDTO();
                dto.setBreedName(arr[0]);
                dto.setSpec(arr[1]);
                dto.setMaterial(arr[2]);
                dto.setFactory(arr[3]);
                dto.setNumUtil(arr[4]);
                dto.setWeightUtil(arr[5]);
                
                String num_weight = map.get(str);
                String arr2[] = num_weight.split("_");
                dto.setSumNum(arr2[0]);
                dto.setSumWeight(arr2[1]);
                summary.add(dto);
            }
        }

posted @ 2015-04-16 15:22 朱杰兵 阅读(3064) | 评论 (0)编辑 收藏

Servlet用来控制流程跳转

posted @ 2015-04-16 10:09 朱杰兵 阅读(128) | 评论 (0)编辑 收藏

1.匹配一位小数 <input type="text" onkeyup="value=value.replace(/[^\d\.]/g, '').replace(/(\.\d).*/g, '$1')" value=""/>
在第二个replace 用 \d{2}  小数点后两位

2.匹配整数
.replace(/[^\d\\]/g,'');


posted @ 2015-04-13 21:22 朱杰兵 阅读(696) | 评论 (0)编辑 收藏

1.SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
2.
采用https的服务器必 须从CA (Certificate Authority)申请一个用于证明服务器用途类型的证书。该证书只有用于对应的服务器的时候,客户端才信任此主机。所以所有的银行系统网站,关键部分 应用都是https 的。客户通过信任该证书,从而信任了该主机。其实这样做效率很低,但是银行更侧重安全。



1. 一般意义上的https,就是服务器有一个证书。
a) 主要目的是保证服务器就是他声称的服务器,这个跟第一点一样。
b)服务端客户端之间的所有通讯,都是加密的。
i. 具体讲,是客户端产生一个对称的密钥,通过服务器的证书来交换密钥,即一般意义上的握手过程。
ii. 接下来所有的信息往来就都是加密的。第三方即使截获,也没有任何意义,因为他没有密钥,当然篡改也就没有什么意义了。
2. 少许对客户端有要求的情况下,会要求客户端也必须有一个证书。
a) 这里客户端证书,其实就类似表示个人信息的时候,除了用户名/密码,还有一个CA 认证过的身份。因为个人证书一般来说是别人无法模拟的,所有这样能够更深的确认自己的身份。
b) 目前大多数个人银行的专业版是这种做法,具体证书可能是拿U盘(即U盾)作为一个备份的载体。

应用于安全敏感通讯  例如交易支付

posted @ 2015-03-26 08:53 朱杰兵 阅读(225) | 评论 (0)编辑 收藏

仅列出标题
共14页: First 上一页 6 7 8 9 10 11 12 13 14 下一页