作者Attilax , EMAIL:1466519819@qq.com
归纳其原因:
httpwebrequest控件有一个透明过程,先向服务方查询url是否存在而不发送POST的内容,服务器如果证实url是可访问的,才发送POST,早期的Apache就认为这是一种错误,而IIS
却可以正确应答
备注
当该属性设置为 true 时,使用 POST 方法的客户端请求应该从服务器收到 100-Continue 响应,以指示客户端应该发送要发布的数据。此机制使客户端能够在服务器根据请求报
头打算拒绝请求时,避免在网络上发送大量的数据
例如,假定 System.Net.Sockets.ServicePointManager.Expect100Continue 属性为 false。当请求发送到服务器时,它包括数据。如果在读取了请求报头后,服务器要求身份验
证并且必须发送 401 响应,则客户端必须用正确的身份验证报头重新发送数据。
如果该属性为 true,请求报头将发送到服务器。如果服务器没有拒绝请求,它将发送 100-
Continue 响应,指示可以传输数据。如果像前一个示例那样,服务器要求身份验证,它将发送 401 响应,而客户端不一定未传输数据。
解决方法:
-------------
写.net程序时在始化代码中,或者配置文件app.config之类的文件中
加下这么一句就可以了
ServicePointManager.Expect100Continue = false;
参考:
-----------
C# 模拟post数据提交时 出现如下错误 System.Net.WebException 远程服务器返回错误 (417) Expectation Failed 的解决办法 - aparche - 博客园
Expect100Continue_土豆爸爸_新浪博客.htm
1编辑pom.xml
1.1加入第3方依赖包
<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.6.8.RELEASE</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> <dependency> <groupId>javassist</groupId> <artifactId>javassist</artifactId> <version>3.9.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.0.5</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2</version> </dependency>
1.2 加入struts2相关包
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.4</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.4</version> </dependency>
1.3加入hibernate相关包
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-ehcache</artifactId> <version>4.2.0.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> <version>4.2.0.Final</version> </dependency> <dependency> <groupId>org.hibernate.common</groupId> <artifactId>hibernate-commons-annotations</artifactId> <version>4.0.1.Final</version> </dependency>
1.4加入spring相关包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-asm</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>3.1.2.RELEASE</version> </dependency>
2.编辑web.xml
<filter> <filter-name>encodingFilter</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> <filter-name>hibernateOpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> </filter> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>hibernateOpenSessionInViewFilter</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener>(编码,struts2过滤器,spring监听器,防止内存泄露过滤器,OpenSessionInViewFilter)
3.编辑application.xml
<!-- 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 --> <context:component-scan base-package="com.jjee" /> <!-- DataSource 详细参数可以参考个人知识管理的C3P0的详细配置说明详解 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/jjee?characterEncoding=utf-8" /> <property name="user" value="root" /> <property name="password" value="" /> <property name="minPoolSize" value="10" /> <property name="initialPoolSize" value="10" /> <property name="maxPoolSize" value="100" /> <property name="maxIdleTime" value="1800" /> <property name="maxStatements" value="1000" /> <property name="idleConnectionTestPeriod" value="1800" /> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="annotatedClasses"> <list> <value>com.jjee.entity.User</value> </list> </property> <!-- 详解见pkm java->hibername->Hibernate properties详解 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> </props> </property> </bean> <!-- 事务管理器配置,单数据源事务 --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <tx:advice id="txAdvice"> <tx:attributes> <tx:method name="get*" read-only="true" /> <tx:method name="find*" read-only="true" /> <tx:method name="query*" read-only="true" /> <tx:method name="is*" read-only="true" /> <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" /> </tx:attributes> </tx:advice> <aop:config proxy-target-class="true"> <aop:advisor pointcut="execution(* com.jjee.service..*Service.*(..))" advice-ref="txAdvice"></aop:advisor> </aop:config>*component-scan包扫描 *dataSource数据源 *sessionFactory *transactionManager事务管理 *tx:advice aop方式配置事务处理
4.配置struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="basicstruts2" extends="struts-default"> <action name="index" class="com.jjee.web.Action_"> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> </action> </package> </struts>顺便配置要测试的action
5.测试
5.1.保存数据
分3层
一、搭建 Subversion 服务器
1、首先需要安装 subversion 这个软件:
sudo apt-get install subversion
注:使用apt-get安装软件,ubuntu默认将软件下载到 /etc/bash_completion.d/ 目录下,可使用 sudo apt-get source packagename 下载源码包,也是下载到 /etc/bash_completion.d/下。
2、在 /home/nicky 下建立一个 repo,名称为 svnproject:
svnadmin create /home/declan/svnproject
3、然后把 /fun/theme 目录下的内容导入到这个 repo 中,注意:导入的目录中文件名不能有中文,不然会出现错误,无法导入:
svn import -m "projectName" /fun/theme file:///home/declan/svnproject
4、最后给这个 repo 建立一个 svn 自带的 svnserve:
svnserve -d -r /home/declan/svnprojec
5、svn服务器默认使用3690端口号,svn要使用非默认端口,可以在svnserve后面加一个 --listen-port 21 来修改svn使用的端口号,
操作如下:在命令提示符下输入:
svnserve -d -r /home/declan/svnproject --listen-port 21
注:红色加粗部分为SVN根目录
同时,还可以为同一个svn服务器上不同的svn项目设定不同的端口号,比如在declan目录下还建有另一个项目,名为 svntest,那么可以启动
svnserve -d -r /home/declan/svntest --listen-port 3690
则svntest项目监听3690(svn默认)端口号,这样在使用 netstat -ntlp 进程查看时会查看到另个svnserver,而在客户端,默认连接为3690端口,也可以在地址后加 “:21”,即 冒号+端口号 来设定访问端口。
以上命令要到svn安装目录下 bin/下使用。
6、查看进程使用端口号及结束进程
使用命令 sudo netstat -ntlp,可以查看到目前系统网络服务器的运行情况,然后使用 sudo kill -9 pid,结束进程。
二、使用 Subversion
1、你可以使用下面的命令来获得一个 wc,如把它取名为 projecout。
svn checkout svn://127.0.0.1/ projecout
或者简写为:
svn co svn://127.0.0.1/ projecout
2、如果需要将修改从 wc 中发送到 repo。
先到 wc 所在目录,然后使用下面的命令将修改发送到 repo:
svn commit -m "note"
三、常用命令:
取出指定版本,如取出版本 2:
svn checkout --revision 2 svn://....
显示提交日志信息:
svn log
显示库中的最新信息:
svn log --revision HEAD
四、设定用户的验证和相应的权限。 现在我们先建立一个叫 project1 的 repo,然后转到 project1中:svnadmin create d:\svnprojects\project1
cd d:\svnprojects\project1
project1 目录下有一堆目录,进入 conf 并打开 svnserve.conf 这个文件,找到以下几行,并把前面的注解符号 ‘#’ 去掉,注意千万在每行的前面别留任何空格。
anon-access = read
auth-access = write
password-db = passwd
其中 anon-access 和 auth-access 分别为匿名和有权限用户的权限,默认给匿名用户只读的权限,这很好,我们不需要改它们。但如果想拒绝