一、转发请求RequestDispatcher

使用request域对象把数据带给转发资源,与重定向的区别:客户端只发出一次请求,服务器端调用多个资源,客户端浏览器地址栏没改变;转发是一次请求,使用的是同一个response和request;

?

ServletContext.getRequestDispatcher(String);
ServletContext.getNamedDispatcher(String);
ServletRequest.getRequestDispatcher(String);

有两种方式:

resp.setContentType("text/html;charset=UTF-8");
resp.addHeader("refresh", "3;url='/W/index.html'");
resp.getWriter().write("恭喜登录成功,如果没有中转,请点击超链接<a href='/W/index.html'>AAAA</a>");

上面的代码在接收到请求后会显示一个登录成功的跳转提示,3s后会自动跳转到index.html页面;

String message = "<meta http-equiv='refresh' content='3;url=/W/index.html'><a href='/W/index.html'>AAAA</a>";
this.getServletContext().setAttribute("message", message);
this.getServletContext().getRequestDispatcher("/message.jsp").forward(req, resp);// 将消息(message)带到message.jsp页面进行显示;

编写URL技巧: 先写'/', 给服务器用的就不用写web应用程序名称;给浏览器用的就加上web应用程序名称

'/'代表当前web应用,写资源路径的时候先写'/'代表当前web应用;

InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
String path = this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");// 得到资源绝对路径;

二、程序编码
程序response响应对象以什么码表输出,就一定要控制浏览器以什么码表打开;可以使用html中的meta技术模拟http响应头,来控制浏览器的行为;

out.write("<meta http-equiv='content-type' content='text/html;charset=UTF-8'>".getBytes());

也可以通过response响应对象来直接设置编码;

response.setCharacterEncoding("UTF-8");
// 设置response使用的码表,控制response以什么码表向浏览器写出数据;
response.setHeader("Content-type", "text/html;charset=UTF-8");
// 指定浏览器以什么码表打开数据;

更简洁的写法

response.setContentType("text/html;charset=UTF-8");

获取request请求参数,在知道请求参数的编码方式的前提下,可以对请求参数进行编码转换:

request.setCharacterEncoding("UTF-8"); // 只对Post方式有效
// get方式处理乱码
String value = request.getParameter("username");
String out = new String(value.getBytes("iso8859-1"), "UTF-8");
System.out.println(out);

解决中文乱码大概有以下几种方式: 
1、decode()方法

java.net.URLDecoder.decode(s)  

2、设置字符集的方式

request.setCharacterEncoding("utf-8");  

3、在页面上定义charset的字符集

<%@ page language="java" contentType="text/html; charset=utf-8"  pageEncoding="utf-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

4、在web.xml文件里定义编码,同时在CoreFilter类里定义编码为utf-8

<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.demo.filter.CoreFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

5、在form表单里定义编码

accept-charset="utf-8" onsubmit="document.charset='utf-8';"  

6、更改ContentTypes的值 
  改变eclipse里ContentTypes的值为utf-8 
7、改变tomcat字符集 
  通过改变server.xml文件里的字符集来接收中文

<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"
    URIEncoding="UTF-8"/>

三、设置session

Response.setDateHeader("expires", System.currentTimeMillis() + 1000*3600);// 设置session有效时间10分钟;
Response.getWriter().write(data);
Response.setHeader("refresh", "3"); 

四、压缩文件,告诉浏览器返回的是压缩文件

        ByteArrayOutputStream bout = new ByteArrayOutputStream();
GZIPOutputStream gout;
try {
gout = new GZIPOutputStream(bout);
gout.write("dd".getBytes());
gout.close();
} catch (IOException e) {
}
byte[] gzip = bout.toByteArray();
response.setHeader("Content-Encoding", "gzip");
response.setHeader("Length", gzip.length + "");
response.getOutputStream().write(gzip);

五、重定向

response.setStatus(302);//重定向
response.setHeader("Location", "/first/MyJsp.jsp");
// response.sendRedirect("/first/MyJsp.jsp");
* 浏览器会向服务器发送两次请求,浏览器地址栏会发生变化,用户登录的时候/显示购物车时通常会用到重定向

ServletConfig

ServletConfig为具体的某一个servlet的配置信息;
实际开发中,有一些东西不适合在servlet程序中写死,这类数据可以通过配置方式配给servlet,例如:servlet采用哪个码表,接连哪个数据库,加载哪个配置文件;

String value = this.getServletConfig().getInitParameter("name");
<servlet>
  <init-param>
    <param-name>name</param-name>
    <param-value>XXXXX</param-value>
  </init-param>
</servlet>

ServletContext

ServletContext:这是一个容器,容器的作用范围为整个应用程序;
一个web应用中的的所有servlet共享同一个ServletContext对象

String value = this.getServletContext().getInitParameter("datacontext");
<context-param>
  <param-name>datacontext</param-name>
  <param-value>xxdata</param-value>
</context-param>

如果读取资源文件的对象不是servlet的话,就只能通过类装载器读取文件,但资源文件不宜太大,类装载器只加载一次;

class userinfo {
  static {
    InputStream in = userinfo.class.getClassLoader().getResourceAsStream("db.properties");
    String path = userinfo.class.getClassLoader().getResource("db.properties").getPath();
    // 通过类装载的方式得到文件的位置,再通过传统方式去读取资源文件。
  }
}

Servlet配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list> <servlet>
<servlet-name>FIle</servlet-name>
<servlet-class>com.test.FileServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>FIle</servlet-name>
<url-pattern>/file</url-pattern>
</servlet-mapping> </web-app>

Cookie & Session

request.getCookies();//获取所有cookie;
response.addCookie(cookie);//添加cookie // Session是通过cookie的方式传给浏览器;
HttpSession hs = request.getSession();
// 浏览器禁用了cookie的处理方法
String url1 = response.encodeURL("/CooSee/servlet/SeesionDemo1");
String url2 = response.encodeURL("/CooSee/servlet/SeesionDemo2");
out.print("<a href='" + url1 + "'>购买</a></br>");
out.print("<a href='" + url2 + "'>结账</a></br>"); request.getSession(false); // false,只获取,但不创建session;

Md5

MessageDigest md = MessageDigest.getInstance("md5");
byte[] md5 = md.digest(String.getBytes());
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(md5);

Java Servlet 回顾的更多相关文章

  1. Java Servlet 技术简介

    Java Servlet 技术简介 Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么 ...

  2. 【Java】Java Servlet 技术简介

    Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么,它们是如何工作的,如何使用它们来创 ...

  3. Java基础回顾

    学习基础背景:Acmer.有C/C++基础 以[Java语言程序设计(基础篇)]第10版为参考(感谢YJJ的推荐),列出部分知识点,注意思考背后的原因和好处坏处. [14-16章——关于可视化编程的章 ...

  4. java servlet 几种页面跳转的方法及传值

    java servlet 几种页面跳转的方法及传值   java web 页面之间传值有一下这几种方式1.form 表单传递参数2.url地址栏传递参数3.session4.cookie5.appli ...

  5. Java Servlet与Web容器之间的关系

    自从计算机软件开发进入网络时代,就开始涉及到通讯问题.在客户/服务器(也叫C/S应用)时期,每个软件都有自己的客户端和服务器端软件.并且客户端和服务器端之间的通讯协议差别也很大.后来随着互联网的发展, ...

  6. java servlet调用带有多个返回结果集的存储过程

    一.mysql存储过程 这里我先说下我这个功能实现的逻辑及途中遇到的一些问题.这个存储过程一共带两个输入参数,一共关联到两张表的查询,每个参数都对应查询表中的一个判断,所以一共返回了两个结果集(当然要 ...

  7. java servlet+mysql全过程(原创)

    前段时间写过一篇 servlet+oracle的文章,但是那是因为公司有可能接那么一个项目,然后我当时也比较闲,所以随便学了下,那玩意是白去研究了,因为公司后面并没接到那项目. 这次学servlet用 ...

  8. java servlet+oracle 新手可看

    最近公司领导告诉接下去接的一个产品,可能会涉及到oracle数据库,以前用得最多的是mssql,前些时间学了下mysql也算少许用过.oracle没接触过.应为我之前做过.net开发,所以数据访问接口 ...

  9. 四、Android学习第四天——JAVA基础回顾(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天——JAVA基础回顾 这才学习Android的 ...

随机推荐

  1. EGOImageView的使用方法及注意事项

    1.下载EGOImageView及其相关的类库 EGOImageLoading 将EGOCache.EGOImageButton.EGOImageView.EGOImageLoader全部添加到工程下 ...

  2. C#如何转换2位数字表示的年

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:C#如何转换2位数字表示的年.

  3. 通过Mouse Without Borders在多台机器上共享键盘鼠标

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:通过Mouse Without Borders在多台机器上共享键盘鼠标.

  4. Edit显示行号

    Edit显示代码行号 关键点 使用这个类然后关联Edit的变量为 LineNumberEdit类型的 实现过程 //////////////////////////////////////////// ...

  5. SOAP web service用AFNetWorking实现请求

    问: This is my current call to (asmx) SOAP web service: NSString *soapMessage = [NSString stringWithF ...

  6. 下载好一个android软件之后,怎样自动提示安装?

    最近在做毕设,里面牵涉到版本更新,当有新版本时可以下载新版本,下载完成之后提示安装.那么怎么实现下载完成之后提示安装呢? 直接上代码吧: File mFile = new File(Environme ...

  7. Java并发——使用Condition线程间通信

    线程间通信 线程之间除了同步互斥,还要考虑通信.在Java5之前我们的通信方式为:wait 和 notify.Condition的优势是支持多路等待,即可以定义多个Condition,每个condit ...

  8. 虚拟机及ubuntu环境搭建问题

    1.现象: VMware中ubuntu ping通 宿主机windows VMware中ubuntu ping通 百度 宿主机windows ping不通 VMware中ubuntu 解决办法: 确保 ...

  9. JavaScript日常会跳的坑系列(二)

    1.Number()将部分非数字类型转换为0 强制转换为数值类型函数: parseFloat.parseInt 优点:对非数值类型统一返回NaN 缺点:会将一部分符合数值类型的字符串也识别为数值 pa ...

  10. xml、xhtml、html、dhtml的区别

    1.XML 可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. 可扩展标记语言可以对文档和数据进行结构化处理,从而能够在部门.客户和供应商之间进行交换,实现动态内 ...