Java Servlet 回顾
一、转发请求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 回顾的更多相关文章
- Java Servlet 技术简介
Java Servlet 技术简介 Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么 ...
- 【Java】Java Servlet 技术简介
Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么,它们是如何工作的,如何使用它们来创 ...
- Java基础回顾
学习基础背景:Acmer.有C/C++基础 以[Java语言程序设计(基础篇)]第10版为参考(感谢YJJ的推荐),列出部分知识点,注意思考背后的原因和好处坏处. [14-16章——关于可视化编程的章 ...
- java servlet 几种页面跳转的方法及传值
java servlet 几种页面跳转的方法及传值 java web 页面之间传值有一下这几种方式1.form 表单传递参数2.url地址栏传递参数3.session4.cookie5.appli ...
- Java Servlet与Web容器之间的关系
自从计算机软件开发进入网络时代,就开始涉及到通讯问题.在客户/服务器(也叫C/S应用)时期,每个软件都有自己的客户端和服务器端软件.并且客户端和服务器端之间的通讯协议差别也很大.后来随着互联网的发展, ...
- java servlet调用带有多个返回结果集的存储过程
一.mysql存储过程 这里我先说下我这个功能实现的逻辑及途中遇到的一些问题.这个存储过程一共带两个输入参数,一共关联到两张表的查询,每个参数都对应查询表中的一个判断,所以一共返回了两个结果集(当然要 ...
- java servlet+mysql全过程(原创)
前段时间写过一篇 servlet+oracle的文章,但是那是因为公司有可能接那么一个项目,然后我当时也比较闲,所以随便学了下,那玩意是白去研究了,因为公司后面并没接到那项目. 这次学servlet用 ...
- java servlet+oracle 新手可看
最近公司领导告诉接下去接的一个产品,可能会涉及到oracle数据库,以前用得最多的是mssql,前些时间学了下mysql也算少许用过.oracle没接触过.应为我之前做过.net开发,所以数据访问接口 ...
- 四、Android学习第四天——JAVA基础回顾(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天——JAVA基础回顾 这才学习Android的 ...
随机推荐
- javascript的类和构造函数
在javascript中,类的实现是基于其原型继承机制的.如果两个实例都从同一个原型对象上继承了属性,我们就说它们是同一个类的实例.那么,如果两个对象继承自同一个原型,那基本上可以认为它们是由同一个构 ...
- 电脑无法识别U盘(usb类外接设备)的解决办法
首先分析USB无法识别的硬件原因: 1.BIOS禁用了USB设备.(进入BIOS,将"Enable USB Device"修改为"Enable") 2.USB接 ...
- 理解screenX clientX pageX概念
先了解screenX,clientX,pageX概念 screenX: 鼠标位置相对于用户屏幕水平偏移量,而screenY就是垂直方向的,此时的参照点也就是原点是屏幕的左上角. clientX: 跟s ...
- Oracle--SQL Developer创建连接及使用
安装好Oracle之后,有几种方式可以来管理Oracle中的数据库,首先就是登陆网页版的界面:https://localhost:1158/em,这种方式管理的东西太多,使用起来有点不方便,第二种方式 ...
- PHP 函数:intval()
intval 变量转成整数类型. 语法: int intval(mixed var, int [base]); 返回值: 整数 函数种类: PHP 系统功能 内容说明:本函数可将变量转成整数类型. ...
- careercup-递归和动态规划 9.3
9.3 在数组A[0...n-1]中,有所谓的魔术索引,满足条件A[i]=i.给定一个有序整数数组,元素值给不相同,编写一个方法,在数组A中找出一个魔术索引,若存在的话. 进阶: 如果数组元素有重复值 ...
- 一款很不错的FLASH时种插件
直接贴一段代码上来,大家看看效果: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...
- FileFilter, FilenameFilter用法和文件排序
FileFilter和FilenameFilter这两个类的用法都很简单,都只有一个方法 FileFilter /*** @param pathname The abstract pathname t ...
- Android(java)学习笔记165:Android的Junit调试
编写android应用的时候,往往我们需要编写一些业务逻辑实现类,但是我们可能不能明确这个业务逻辑是否可以成功实现,特别是逻辑代码体十分巨大的时候,我们不可能一行一行检查自己的代码,为了解决这样的问题 ...
- Android开发的第一天
不管做什么开发都是有开始的,对于开发的话开始要的准备的就是开发工具了 安装开发工具配置开发工具好了不多说了现在我来说怎么样安装和配置安卓的开发工具吧 第一首先就是要下载一个JDK (Java SE ...