一、转发请求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. poj1873 The Fortified Forest 凸包+枚举 水题

    /* poj1873 The Fortified Forest 凸包+枚举 水题 用小树林的木头给小树林围一个围墙 每棵树都有价值 求消耗价值最低的做法,输出被砍伐的树的编号和剩余的木料 若砍伐价值相 ...

  2. [网络]让局域网的电脑通过路由的公网ip可以被访问到的设置

    http://公网IP:服务端口/访问路径(http://110.16.166.135:8081/pra/unionpay/v_asyn_notify.jspx这个地址就会通过公网ip来访问到你的ip ...

  3. JS获取浏览器可视区域尺寸

    本文所说的是浏览器窗口的可视区域大小,不是浏览器窗口大小,也非页面尺寸. 在没有声明DOCTYPE的IE中,浏览器显示窗口大小只能以下获取: document.body.offsetWidth doc ...

  4. ASP.NET- Repeater 嵌套

    我们有时候需要查找出父菜单下面全部的子菜单,然后根据子菜单的ID查找出该类别下面的全部新闻. 通常往往只知道父级菜单的ID,但不知道父级菜单下面有多少个子菜单,也不知道子菜单的ID 所以我们往往需要根 ...

  5. 【JAVA - SSM】之MyBatis动态SQL

    动态SQL就是在SQL语句中添加一些标签,以完成某些逻辑.通常用到的动态SQL标签有<if>.<choose>.<where>.<trim>.<s ...

  6. Ubuntu 12.04 安装搜狗输入法

    安装指南 Ubuntu / Ubuntu Kylin 14.04 LTS 版本 只需双击下载的 deb 软件包,即可直接安装搜狗输入法. Ubuntu 12.04 LTS 版本 由于 Ubuntu 1 ...

  7. SpringMVC + ehcache( ehcache-spring-annotations)基于注解的服务器端数据缓存

    背景 声明,如果你不关心java缓存解决方案的全貌,只是急着解决问题,请略过背景部分. 在互联网应用中,由于并发量比传统的企业级应用会高出很多,所以处理大并发的问题就显得尤为重要.在硬件资源一定的情况 ...

  8. 标准I/O库之标准I/O的效率

    程序清单5-1 用getc和putc将标准输入复制到标准输出 #include "apue.h" int main( void ) { int c; while(( c = get ...

  9. c指针与数组,传参问题,指针数组与数组指针的区别,二维数组动态内存分配

    一 数组的结构:顺序存储,看谭浩强中的图,牢记 1.数组名指代一种数据结构:数组 现在可以解释为什么第1个程序第6行的输出为10的问题,根据结论1,数组名str的内涵为一种数据结构,即一个长度为10的 ...

  10. linux安装java环境

    在linux下安装JDK如下: 第一步:查看Linux自带的JDK是否已安装 (1)查看已经安装的jdk: [root@web-server ~]# rpm -qa|grep jdk ← 查看jdk的 ...