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的 ...
随机推荐
- http://www.cnblogs.com/xdp-gacl/p/3622275.html
http://www.cnblogs.com/xdp-gacl/p/3622275.html
- SQLite数据库如何存储和读取二进制数据
SQLite数据库如何存储和读取二进制数据 1. 存储二进制数据 SQLite提供的绑定二进制参数接口函数为: int sqlite3_bind_blob(sqlite3_stmt*, int, co ...
- bug,不该怕~敢敢test就是了
转载自:http://bbs.itcast.cn/thread-10103-1-1.html 当程序员的经历让我知道了一些关于软件编程的事情.下面的这些事情可能会让朋友们对软件开发感到惊讶: 一个程序 ...
- PHP操作SQLITE
一直以来.我们操作SQLITE,都是基于PHP默认的SQLITE操作模块. 今天介绍一个能够操作SQLITE2,和SQLITE3的PHP类,此为我封装的. <? php abstract cla ...
- 数字信号处理与音频处理(使用Audition)
前一阵子由于考博学习须要,看了<数字信号处理>,之前一直不清除这门课的理论在哪里应用比較广泛. 这次正巧用Audition处理了一段音频,猛然发现<数字信号处理>这门课还是很实 ...
- gitservergitlab之搭建和使用
gitserver比較有名的是gitosis和gitolite,这两个管理和使用起来略微有些复杂,没有web页面,而gitlab则是类似于github的一个工具,github无法免费建立私有仓库,而且 ...
- Linux 的启动流程-阮一峰
http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html
- MVC - HtmlHelper类
传统的Html元素不能和服务端数据进行绑定 HtmlHelper类提供了一系列的方法来生成Html元素 并可以实现与数据绑定在一起 然后生成Html Html.BeginForm(actionName ...
- .PIG File
.PIG File File extension: PIG File type: Texture File The PIG file type is primarily associated with ...
- select组件
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...