GVKun编程网logo

JSP中response.setContentType和response.setCharacterEncoding区别分析(response的setcontenttype)

3

对于JSP中response.setContentType和response.setCharacterEncoding区别分析感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍response的s

对于JSP中response.setContentType和response.setCharacterEncoding区别分析感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍response的setcontenttype,并为您提供关于.NET Core 中 WebOperationContext.Current.OutgoingResponse.ContentType 的替代方法是什么、ASP.NET Core中如果Response.HasStarted已经为true,就不能更改Response.Cookies和Response.Headers等属性的值了、asp.net – context.Response.Charset = Encoding.UTF8.ToString();、asp.net – Response.WriteFile和Response.Redirect的有用信息。

本文目录一览:

JSP中response.setContentType和response.setCharacterEncoding区别分析(response的setcontenttype)

JSP中response.setContentType和response.setCharacterEncoding区别分析(response的setcontenttype)

本文实例讲述了JSP中response.setContentType和response.setCharacterEncoding区别。分享给大家供大家参考,具体如下:

response.setContentType

设置发送到客户端的响应的内容类型,可以包括字符编码说明.

也就是说在服务器端坐了这个设置,那么他将在浏览器端起到作用,在你打开浏览器时决定编码方式

如果该方法在response.getWriter()被调用之前调用,那么响应的字符编码将仅从给出的内容类型中设置。该方法如果在response.getWriter()被调用之后或者在被提交之后调用,将不会设置响应的字符编码,在使用http协议的情况中,该方法设置 Content-type实体报头 

response.setCharacterEncoding设置响应的编码

如果服务器端使用response.setContentType设置了编码格式,
那么应该使用 response.setCharacterEncoding指定的编码格式,这样就会把之前的设置屏蔽掉

一般建议设置response.setCharacterEncoding

response.setContentType 经常会遇到失效的情况(设置了 但是经常不起作用)

希望本文所述对大家JSP程序设计有所帮助。

您可能感兴趣的文章:
  • tomcat6下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法
  • JSP隐含对象response实现文件下载
  • JSP response对象实现文件下载的两种方式
  • JSP隐含对象response实现文件下载的两种方法
  • Jsp中response对象的所有属性详细介绍
  • jsp response.sendRedirect不跳转的原因分析及解决
  • JSP内置对象:Request和Response的简单介绍及使用
  • JSP的response对象的实例详解

.NET Core 中 WebOperationContext.Current.OutgoingResponse.ContentType 的替代方法是什么

.NET Core 中 WebOperationContext.Current.OutgoingResponse.ContentType 的替代方法是什么

如何解决.NET Core 中 WebOperationContext.Current.OutgoingResponse.ContentType 的替代方法是什么?

.NET Core 中以下代码片段的替代方法是什么?

WebOperationContext webContext = WebOperationContext.Current;
webContext.OutgoingResponse.ContentType = "text/html";

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

ASP.NET Core中如果Response.HasStarted已经为true,就不能更改Response.Cookies和Response.Headers等属性的值了

ASP.NET Core中如果Response.HasStarted已经为true,就不能更改Response.Cookies和Response.Headers等属性的值了

最近我在ASP.NET Core中做了一个中间件CustomizedMiddleware,要说该中间件的功能也很简单,其实就是往HttpResponse中添加一个Cookie而已,但是我将添加Cookie的代码放在了next.Invoke(context)的后面,如下所示:

using Microsoft.AspNetCore.Http;
using System.Threading.Tasks;

namespace Assembly.Middlewares
{
    public class CustomizedMiddleware
    {
        private readonly RequestDelegate next;

        public CustomizedMiddleware(RequestDelegate next)
        {
            this.next = next;
        }

        public async Task Invoke(Microsoft.AspNetCore.Http.HttpContext context)
        {
            //Do something...
            await next.Invoke(context);
            //Do something...

            context.Response.Cookies.Append("DemoCookie", "DemoValue");//在next.Invoke(context)后添加Cookie到Response
        }
    }
}

结果代码执行到 context.Response.Cookies.Append("DemoCookie", "DemoValue")时,老是抛出异常。

后来查了查资料,原来HttpResponse中有个很重要的属性HasStarted,HttpResponse.HasStarted属性会返回一个bool类型的值,表示当前Http请求的响应(HttpResponse)是否已经把Http头(Header)的内容发送给客户端浏览器了,如果HttpResponse.HasStarted返回true,我们就不能在HttpResponse上更改任何与Http头(Header)相关的内容了,例如Cookies、Headers、StatusCode等都无法做更改了,否则会抛出异常。此外,当HttpResponse.HasStarted返回true时,如果我们调用HttpResponse.Redirect方法进行跳转,这时HttpResponse.Redirect方法也会抛出异常报错:"System.InvalidOperationException: StatusCode cannot be set because the response has already started.",而且HttpResponse.Redirect不会产生任何效果,客户端浏览器页面也不会进行跳转。

 

结果我发现当上面的代码执行到context.Response.Cookies.Append("DemoCookie", "DemoValue")时,context.Response.HasStarted已经为true了,所以抛出了异常。

因此我将CustomizedMiddleware中间件的代码改为了如下:

using Microsoft.AspNetCore.Http;
using System.Threading.Tasks;

namespace Assembly.Middlewares
{
    public class CustomizedMiddleware
    {
        private readonly RequestDelegate next;

        public CustomizedMiddleware(RequestDelegate next)
        {
            this.next = next;
        }

        public async Task Invoke(Microsoft.AspNetCore.Http.HttpContext context)
        {
            if (!context.Response.HasStarted)//先判断context.Response.HasStarted
            {
                context.Response.Cookies.Append("DemoCookie", "DemoValue");//在next.Invoke(context)前添加Cookie到Response
            }

            //Do something...
            await next.Invoke(context);
            //Do something...
        }
    }
}

这次我把context.Response.Cookies.Append("DemoCookie", "DemoValue")放到了next.Invoke(context)的前面,并做了context.Response.HasStarted的判断,只有当context.Response.HasStarted为false时才添加Cookie,这次就没有抛出异常了,而且context.Response.Cookies.Append("DemoCookie", "DemoValue")也成功添加了Cookie到HttpResponse中。

 

所以这里总结下在ASP.NET Core的中间件中,尽量在next.Invoke(context)调用前做Response.Cookies和Response.Headers等属性的修改,修改前还要判断Response.HasStarted的值,如果是true,就不能做任何修改了。

 

asp.net – context.Response.Charset = Encoding.UTF8.ToString();

asp.net – context.Response.Charset = Encoding.UTF8.ToString();

我在我的代码中使用了这个来设置Charset,但IE不喜欢它.有什么理由吗?

context.Response.Charset = Encoding.UTF8.ToString();

我最终必须将它设置为context.Response.ContentType =“application / json; charset = utf-8”或context.Response.Charset =“utf-8”;代替.不知道那是什么Encoding.UTF8.ToString();如果IE无法接受它将被用于

解决方法

Context.Response.Charset = Encoding.UTF8.WebName;

获取为Internet Assigned Numbers Authority(IANA)注册的当前编码名称.

asp.net – Response.WriteFile和Response.Redirect

asp.net – Response.WriteFile和Response.Redirect

我正在发布一个页面URL
例如mysite.com/disclaimer/someinfo
此页面显示协议,如果用户单击“同意”按钮,则PDF文件将作为附件进行流式处理.

这样做的目的是用户可以共享此URL,但链接后的任何其他人也必须在下载文件之前阅读协议.实际文件没有URL,但保存在服务器的其他位置,因此下载文件的唯一方法是单击“[Agree]”按钮.

然而 – 我发现很难的是,点击按钮并开始下载后,我希望页面“消失”.带按钮的页面保留在屏幕上.理想情况下,他们会被重定向回他们来自的页面.我渴望不需要javascript或cookies.引用者存储在初始页面加载到表单上的隐藏字段中.

我尝试了不同的方法,尝试在标题中写入307重定向,文件向用户发出警告,表明他们的帖子数据被重定向.我下面的代码仅适用于支持元刷新的浏览器(例如Firefox; IE7不支持Chrome / Safari)

我可以看到为什么这不起作用的逻辑.浏览器有一个响应,就是预期的文件.将文件发送给他们然后将浏览器重定向到另一个页面的正确方法是什么.感觉来自用户p.o.v.一旦他们点击按钮,这个“接受”页面就会消失.

我有:

protected void Page_Load(object sender,EventArgs e)
    {
        if (Request.UrlReferrer != null & Request.UrlReferrer.ToString() != "")
        {
            Uri referrer = Request.UrlReferrer;
            if (!IsPostBack)
            { hfReferrer.Value = Request.UrlReferrer.ToString(); }
        }
    }

    protected void buttonAccept_Click(object sender,EventArgs e)
    {
        //stream file
        Node nodeCurrent = Node.GetCurrent();
        string fileName = nodeCurrent.GetProperty("documentFile").Value.ToString();
        System.IO.FileInfo file = new System.IO.FileInfo(fileName); 
        if (file.Exists) //set appropriate headers  
        {
            Response.Clear();

            if (hfReferrer.Value !="")
            {response.addheader("Refresh",string.Format("3; URL={0}",hfReferrer.Value));}

            response.addheader("Content-disposition","attachment; filename=" + file.Name);
            response.addheader("Content-Length",file.Length.ToString());
            Response.ContentType = "application/pdf";

            // write file to browser
            Response.WriteFile(file.FullName);
            Response.End();
        }

我不想使用javascript / pop-ups等.
目前用户只需点击一个链接转到另一个页面,但这感觉不太对劲.

理想情况下,我想遵循一个很好的标准.但我不知道在哪里看.

解决方法

我建议尝试稍微不同的行为.在buttonAccept_Click事件处理程序上,将用户重定向到感谢页面.在这个感谢页面的Page_Load中有下载文件的代码. 这很容易实现,并为用户提供更好的体验.

今天关于JSP中response.setContentType和response.setCharacterEncoding区别分析response的setcontenttype的讲解已经结束,谢谢您的阅读,如果想了解更多关于.NET Core 中 WebOperationContext.Current.OutgoingResponse.ContentType 的替代方法是什么、ASP.NET Core中如果Response.HasStarted已经为true,就不能更改Response.Cookies和Response.Headers等属性的值了、asp.net – context.Response.Charset = Encoding.UTF8.ToString();、asp.net – Response.WriteFile和Response.Redirect的相关知识,请在本站搜索。

本文标签: