Java-拾贝2
发布日期:2021-07-01 05:45:18 浏览次数:2 分类:技术文章

本文共 16056 字,大约阅读时间需要 53 分钟。

一些好的论坛社区

    Stackoverflow:有成千上万个好问题和答案

    DZone:有相当多的开发者在这个网站上分享他们博客文章
    LeetCode:如果有Java方面的面试问题可在教程中找到答案
    Java SE技术文档:包含了在使用Java SE API时会用到的所有文档
    Github:免费的将你的项目托管,有着当今流行的Java库和框架的优秀资源
    Coursera:有关视频讲座的最好网站
    Java World:包含了大量的Java教程,涉及各种各样的话题
    IBM developerWorks:有很多由IBM公司的人写的非常不错的文章
    Wikipedia 维基百科:这个网站是查询或学习几乎所有概念的最好的资源之一
    Program Creek:可以找到其他任何网站都不曾涉及到的话题,而且几乎每篇文章都包含漂亮的插图或者示例代码

敏捷开发

http://hi.baidu.com/php021/item/1965c4cc2a7a6239449416b4
http://www.51testing.com/?uid-66775-action-viewspace-itemid-81574

JNI的一篇简洁却又太简洁的文章

http://blog.csdn.net/yangjiali014/article/details/1633017

由web程序出现乱码开始挖掘(Bom头、字符集与乱码)

http://www.cnblogs.com/chengmo/archive/2010/10/30/1864004.html

Charset]UTF-8, UTF-16, UTF-16LE, UTF-16BE的区别

http://hi.baidu.com/pengwenfu/blog/item/703b2b457ab4768eb3b7dc11.html

WEB项目WEB-INF目录作用

WEB-INF的存在以及其下的lib和classes目录的作用都是大师们规定的。

主要是系统运行的配置信息和环境,这是jsp环境的规定
    WEB-INF是用来存储服务端配置文件信息和在服务端运行的类文件的,它下面的东西不允许客户端直接访问的
其实web-inf的作用就是你不希望别人能访问到的东西放在这个目录(包括子目录下),就实现了代码的安全,不担心你辛苦的劳动就别别人EASY的COPY走了,同样的问题ASP中就没有能解决

Switch语法

switch ( 整型或字符型变量 )

{
     case 变量可能值1 : 
         分支一;
         break;
   case 变量可能值2 : 
         分支二;
         break;
   case 变量可能值3 : 
         分支三;
         break;
   ...
   default :
       最后分支;

日期语法

SimpleDateFormat Zydateformat = new SimpleDateFormat("yyyy/MM/dd");

Date Today = new Date();
 String sTodayStr = (String) Zydateformat.format(Today);

关键字

native是与C++联合开发的时候用的!java自己开发不用的! 

Keys: volatile

使用对象:字段
介绍:因为异步线程可以访问字段,所以有些优化操作是一定不能作用在字段上的。volatile有时
可以代替synchronized。
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

Keys:transient
  使用对象:字段
  介绍:字段不是对象持久状态的一部分,不应该把字段和对象一起串起。
当变量的值由自身的上一个决定时,如n=n+1、n++等,volatile关键字将失效,只有当变量的值和自身上一个值无关时对该变量的操作才是原子级别的,如n = m + 1,这个就是原级别的

多线程

对于处于sleep,join等操作的线程,如果被调用interrupt()后,会抛出InterruptedException,然后线程的中断标志位会由true重置为false,因为线程为了处理异常已经重新处于就绪状态。 

不要使用 Thread.stop() 方法
1).通过成员方法Thread.interrupt()来设置中断状态为true
2).通过成员方法Thread.isInterrupted()来获取中断状态
3).通过静态方法Thread.interrupted()来获取中断状态,并且清除中断状态(当然获取的是清除之前的值),也就是说连续两次调用此方法,第二次一定会返回false,当然也有例外,具体看文档。
简单总结:
1). 线程start()后马上调用interrupt(),在进入run()时中断标志已经被set on;
2). 在处理sleep()可能抛出的InterruptedException时,再次中断线程即可成功中断;
3). 注意interrupt()方法是set on 中断标志的,interrupted()方法是判断后并清除中断标志的。

Vector与List的区别

vector是一段连续的内存区域,因此对它的随机访问效率很高;但是如果插入的新元素,不是在这块区域的尾部,效率就很低了。在任意位置插入新元素的移动复杂度是O(n)。类似地,删除任意位置的元素。

list表示非连续的内存区域,通过一对指针链接起来,分别指向其头尾。在list任意位置插入/删除只需要简单修改指针,所以效率很高。但是它对随机访问支持很不好,需要遍历中间的元素。搜索复杂度O(n)。

类         速度    多线程安全性  适用方面

Vector     慢        安全        提供了线程序同 步,在多线程是安全的.
ArrayList  快        不安全      多线程不安全
二者各有特点,要看你怎么取舍.
日常编码的时候,一般都是单线程程序,采用arraylist较好.
在涉及到网络编程.进程合作的时候,多线程共享变量的时候,采用vector好,举个例子,数据库缓冲池采用vector而不是arraylist.

HashMap遍历

String Split

.   \\.

           String s1 = "ddddd?ccccc";
           String[] s1Arry = s1.split("[?]");
           System.out.println(s1Arry[1]);
           String[] s1Arry2 = s1.split("\\?");
           System.out.println(s1Arry2[1]);

环境变量

JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径D:/java/jdk1.5.0_08

Path使得系统可以在任何路径下识别java命令,设为:%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin 

log4j

##Log4J的配置之简单使它遍及于越来越多的应用中了

##Log4J配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。择其一二使用就够用了。
##此文件(log4j.properties)
 log4j.rootLogger=DEBUG, CONSOLE,A1
log4j.addivity.org.apache=true
# 应用于控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
#应用于文件
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# Use this layout for LogFactor 5 analysis
# 应用于文件回滚
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#应用于socket
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
# Log Factor 5 Appender
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
# 发送日志给邮件
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=web@www.wuset.com
log4j.appender.MAIL.SMTPHost=www.wusetu.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=web@www.wusetu.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 用于数据库
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
#自定义Appender
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
http://www.360doc.com/content/07/0307/10/11192_387506.shtml
为什么同时使用commons-logging和Log4j?为什么不仅使用其中之一?
Commons-loggin的目的是为“所有的Java日志实现”提供一个统一的接口,它自身的日志功能平常弱(只有一个简单的SimpleLog?),所以一般不会单独使用它。
Log4j的功能非常全面强大,是目前的首选。我发现几乎所有的Java开源项目都会用到Log4j,但我同时发现,所有用到Log4j的项目一般也同时会用到commons-loggin。我想,大家都不希望自己的项目与Log4j绑定的太紧密吧。另外一个我能想到的“同时使用commons-logging和Log4j”的原因是,简化使用和配置。
       强调一点,“同时使用commons-logging和Log4j”,与“单独使用Log4j”相比,并不会带来更大的学习、配置和维护成本,反而更加简化了我们的工作。我想这也是为什么“所有用到Log4j的项目一般也同时会用到commons-loggin”的原因之一吧。
Commons-logging能帮我们做什么?
l         提供一个统一的日志接口,简单了操作,同时避免项目与某个日志实现系统紧密a耦合
l         很贴心的帮我们自动选择适当的日志实现系统(这一点非常好!)
l         它甚至不需要配置
为了简化配置commons-logging,一般不使用commons-logging的配置文件,也不设置与commons-logging相关的系统环境变量,而只需将Log4j的Jar包放置到classpash中就可以了。这样就很简单地完成了commons-logging与Log4j的融合。如果不想用Log4j了怎么办?只需将classpath中的Log4j的Jar包删除即可。
就这么简单!

Spring

ajax 呼叫出现中文乱码的解法方法
在annotation-driven中加入以下部分:
        <mvc:annotation-driven >
        <mvc:message-converters>   
              <bean class="org.springframework.http.converter.StringHttpMessageConverter">   
                  <property name="supportedMediaTypes">   
                      <list>   
                          <value>text/plain;charset=UTF-8</value>   
                          <value>text/html;charset=UTF-8</value>   
                      </list>   
                  </property>   
              </bean>    
       </mvc:message-converters>
  </mvc:annotation-driven >
除非有某个bean 可能需要加载很大资源,而且很可能在整个应用程序生命周期中很可能使用不到,可以设置为延迟初始化。
web.xml 
1. 配置核心控制器
org.springframework.web.servlet.DispatcherServlet
<url-pattern>*.do</url-pattern>  过滤类型
 <load-on-startup>1</load-on-startup>是启动顺序,让这个Servlet随Servletp容器一起启动。
2.
在初始化DispatcherServlet的时候,SpringMVC默认会到/WEB-INF目录下寻找一个叫[servlet-name]-servlet.xml的配置文件,来初始化里面的bean对象,该文件中对应的bean对象会覆盖spring配置文件中声明的同名的bean对象。如上面的就会在/WEB-INF目录下寻找一个叫securityWeb-servlet.xml的文件;当然也可以在Servlet中声明配置文件的位置。如上面代码已经写出路径。
3.关于视图的返回,Controller只负责传回来一个值,然后到底返回的是什么视图,是由视图解析器控制的,在jsp中常用的视图解析器是InternalResourceViewResovler,它会要求一个前缀和一个后缀
4.
要使用注解的SpringMVC需要在SpringMVC的配置文件中进行声明,具体方式为先引入mvc命名空间,然后利用<mvc:annotation-driven />进行声明。
5.一个类使用了@Controller进行标记的都是Controller
有了Controller之后,那么到底是怎样请求一个Controller具体的方法的呢,那是通过@RequestMapping来标记的,@RequestMapping可以标记在类上面,也可以标记在方法上,当方法上和类上都标记了@RequestMapping的时候,那么对应的方法对应的Url就是类上的加方法上的,如下面的index方法,其对应的URL应为类上的/blog加上index方法上的/index,所以应为/blog/index
在RequestMapping中还可以指定一个属性method,其主要对应的值有RequestMethod.GET和RequestMethod.POST,利用该属性可以严格的控制某一方法只能被标记的请求路径对应的请求方法才能访问,如指定method的值为GET,则表示只有通过GET方式才能访问该方法,默认是都可以访问。
 
在SpringMVC中常用的注解还有@PathVariable,@RequestParam,@PathVariable标记在方法的参数上,利用它标记的参数可以利用请求路径传值,看下面一个例子
数可以利用请求路径传值,看下面一个例子
@RequestMapping(value="/comment/{blogId}", method=RequestMethod.POST)  
public void comment(Comment comment,@PathVariable int blogId, HttpSession session, HttpServletResponse response) throws IOException {  
      
}  
在该例子中,blogId是被@PathVariable标记为请求路径变量的,如果请求的是/blog/comment/1.do的时候就表示blogId的值为1. 同样@RequestParam也是用来给参数传值的,但是它是从头request的参数里面取值,相当于request.getParameter("参数名")方法。
在Controller的方法中,如果需要WEB元素HttpServletRequest,HttpServletResponse和HttpSession,只需要在给方法一个对应的参数,那么在访问的时候SpringMVC就会自动给其传值,但是需要注意的是在传入Session的时候如果是第一次访问系统的时候就调用session会报错,因为这个时候session还没有生成。
接下来讨论一下方法的返回值,主要有一下情况:
    -返回一个ModelAndView,其中Model是一个Map,里面存放的是一对对的键值对,其可以直接在页面上使用,View是一个字符串,表示的是某一个View的名称
    -返回一个View,也就是一个字符串,这个时候如果需要给页面传值,可以给方法一个Map参数,该Map就相当于一个Model,往该Model里面存入键值对就可以在页面上进行访问了
    -返回一个Model也就是一个Map,这个时候将解析默认的生成的view name。
    -什么也不返回,这个时候可以利用HttpServletResponse进行返回,也可以直接使用printStream进行返回
6.<mvc:annotation-driven /> ==> 启动注解驱动的Spring MVC功能,注册请求url和注解POJO类方法的映射-
  <context:component-scan base-package="com.mvc.rest" /> ==>  <!-- 启动包扫描功能,以便注册带有@Controller、@Service、@repository、@Component等注解的类成为spring的bean -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/view/" p:suffix=".jsp" />
    ==> <!-- 对模型视图名称的解析,在请求时模型视图名称添加前后缀 -->
7. Controller只负责传回来一个值,然后到底返回的是什么视图,是由视图解析器控制的,在jsp中常用的视图解析器是InternalResourceViewResovler,它会要求一个前缀和一个后缀
8. HandlerMapping
将web请求映射到正确的处理器上(handler), 通常是一个Controller
已经内置了很多处理器映射策略
在处理器映射中通过配置拦截器(包括处理器执行前、执行后、或者执行前后运行拦截器)将使其功能更强大。
BeanNameUrlHandlerMapping(默认的HandlerMapping)
把一个URL映射到一个和它名字相同的已注册的Bean.
/simple ==> /simple
可以给bean 多个名字(别名),通过空格分隔。
SimpleUrlHandlerMapping
最常用的,将请求的URLs影射到Handlers
由一系列分别代表URLs和bean的名字的name/value 对来定义影射。
ControllerClassNameHandlerMapping
支持惯例优先原则
在应用上下文找出所有不同的处理器 bean,去掉名称中的Controller,来定义它的处理器映射。
WelcomeCOntroller 映射到 /welcome* 的URL
9. Controller 接口
负责处理请求
内部参数继承
返回一个ModelAndView对象
所有的实现都线程安全
AbstractController
ThrowawayController
Command COntrollers
SerlvetWrappingController and ServletForwardingController --> 为structs 设计的
ParameterizableViewController
UrlFilenameViewController
10. ModelAndView 对象
封装了用来渲染页面的model和view
Model用 Map实现,view 用String或View对象表示
 11. Interceptors
在请求前后添加其他功能
preHandle and postHandele
回调方法: afterCompletetion
可以通过HandlerMapping 和一系列Controller 关联上
实现HandlerInterceptor 或WebRequestInterceptor
Spring 提供的几个实现:
OvenXxxInViewInteceptor 用于ORM 架构 JDO,JPA and hibernate
UserRoleAuthorizationInterceptor- 用于各种角色授权验证
12. ViewResolver
从一个逻辑视图名映射到一个视图对象
可以排序,所以能链在一起
对于JSP用户,通常实现 InternalResourceViewResolver
VelocityViewResolver--针对Velocity templates 设计的
FreeMarkerViewResolver -针对FreeMarker templates设计的
ResourceBundleViewResolver --映射关系在一个properties 文件,支持国际化
XmlViewResolver--映射关系在Xml 文件
13. View
支持的几种视图模板技术:
InternalResourceView(JSP)
JstlView (JSP+JSTL)
VelocityView(Velocity)
FreeMarkerView(FreeMarker)
TilesView(Tiles)
TilesJstlView(Tiles+JSTL)
还支持渲染下列视图
Excel files
PDF files
XSLT results
Jasper Reports
14.Spring MVC Form 处理
SimpleFormController 提供了表单处理通用工作流程
提供了用户自定义标签,用来展示和处理常用的表单
默认,GET用于Form显示, POST用于form处理
能处理完整的工作流
15.
<context:component-scan>
<context:component-scan base-package="com.foo" use-default-filters="false">
    <context:include-filter type="regex" expression="com.foo.bar.*Config"/>
    <context:include-filter type="regex" expression="com.foo.config.*"/>
</context:component-scan>
<context:component-scan>提供兩個子標籤:<context:include-filter>和<context:exclude-filter>各代表引入和排除的過濾。而上例把use-default-filters屬性設為false,意即在base-package所有被宣告為@Component和@Configuration等target Class不予註冊為bean,由filter子標籤代勞。
<context:component-scan/> 扫描指定的包中的类上的注解,常用的注解有:
@Controller 声明Action组件
@Service    声明Service组件    @Service("myMovieLister") 
@Repository 声明Dao组件
@Component   泛指组件, 当不好归类时. 
@RequestMapping("/menu")  请求映射
@Resource  用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName") 
@Autowired 用于注入,(srping提供的) 默认按类型装配 
@Transactional( rollbackFor={Exception.class}) 事务管理
@ResponseBody
@Scope("prototype")   设定bean的作用域
16.
总结:不使用listener监听器来加载spring的配置,改用DispatcherServlet来加载spring的配置,不要双亲上下文,只使用一个DispatcherServlet,
17.
如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题。如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg的访问也就被拦截了。
18.在spring3.0.4以后版本提供了mvc:resources 
    <!-- 对静态资源文件的访问 -->    
    <mvc:resources mapping="/images/**" location="/images/" />  
/images/**映射到ResourceHttpRequestHandler进行处理,location指定静态资源的位置.可以是web application根目录下、jar包里面,这样可以把静态资源压缩到jar包中。cache-period 可以使得静态资源进行web cache 
19.请求如何映射到具体的Action中的方法
方案一:基于xml配置映射,可以利用SimpleUrlHandlerMapping、BeanNameUrlHandlerMapping进行Url映射和拦截请求。
方案二:基于注解映射,可以使用DefaultAnnotationHandlerMapping。
------------------------------------------------------------------------
log
<bean id="log4jInitialization"
 class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
   <property name="targetClass"
      value="org.springframework.util.Log4jConfigurer" />
   <property name="targetMethod" value="initLogging" />
   <property name="arguments">
      <list>
         <value>conf/log4j.xml</value>
      </list>
   </property>
</bean>
还有一种:
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/resources/log4j.properties</param-value>
</context-param>
<context-param>
    <param-name>log4jRefreshInterval</param-name>
    <param-value>1000</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
网络上说这个仅在不展开的时候有用。 实际上是可以通过 classpath 找到配置文件的, 针对此有写过一个blog.
---------------------------
RdbmsOperation
SqlOperation
execute 和executeByNamedParam 方法, 用于查询多行数据
findObject 及findObjectByNamedParam用于查询单行数据
配置文件一定要加
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
       ">
-----------------------------------------------------------------------
spring 配置的bean 看上去是for 整个tomcat 使用的
如有多个项目就要注意了
     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  
        <property name="dataSource">  
            <ref bean="dataSource" />  
        </property>  
    </bean> 
不知道是否是eclipse 缓存的原因
    
1. 获取response 的方法
问题: 这种response 的作用? 如果是下载文件的话, 这种用法有用吗?
@RequestMapping
public String myController(@PathVariable someId, ModelMap map, HttpServletResponse response) {
    // Do what you need to do on the response, like set a cookie
    return "myViewName";
}
    <listener>    
            <listener-class>    
                org.springframework.web.context.request.RequestContextListener    
            </listener-class>    
    </listener>    
    /** 获取HttpServletResponse */  
    public static HttpServletResponse getResponse() {  
        return ((ServletWebRequest) RequestContextHolder.getRequestAttributes()).getResponse();  
    }  
      
    /** 获取HttpServletRequest */  
    public static HttpServletRequest getRequest() {  
        return ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();    
    }  
-

转载地址:https://oscar.blog.csdn.net/article/details/78967409 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C-拾贝
下一篇:Java-拾贝1

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月19日 16时15分02秒