Servlet基础

来源:互联网 发布:四年级奥数最优化问题 编辑:程序博客网 时间:2024/06/01 07:47
http://www.runoob.com/servlet/servlet-form-data.html

1.Cookie发送机制
如果浏览器被配置为存储 Cookies,它将会保留此信息直到到期日期。如果用户的浏览器指向任何匹配该 Cookie 的路径和域的页面,它会重新发送 Cookie 到服务器。

2.删除cookie
- 读取一个现有的 cookie,并把它存储在 Cookie 对象中。
- 使用 setMaxAge() 方法设置 cookie 的年龄为零,来删除现有的 cookie。
- 把这个 cookie 添加到响应头。

Cookie cookie = new Cookie("key","value");
cookie.setMaxAge(60*60*24);
response.addCookie(cookie);


Cookie[] cookies = null;
// 获取与该域相关的 Cookies 的数组
cookies = request.getCookies();
for (int i = 0; i < cookies.length; i++)
{
    cookie = cookies[i];
    String name = cookie.getName();
    String value = cookie.getValue();
}

3.session会话维持三种方式
a. cookie
b. 隐藏的表单内容
<input type="hidden" name="sessionid" value="12345">
注意: 点击常规的超文本链接(<A HREF...>)不会导致表单提交,因此隐藏的表单字段也不支持常规的 session 会话跟踪。
c.URL重写

4. session 会话超时
web.xml中设置session超时,单位分钟
 <session-config>
   
<session-timeout>15</session-timeout>
  </session-config>
5.Servlet 文件上传
     表单 method 属性应该设置为 POST 方法,不能使用 GET 方法。
     表单 enctype 属性应该设置为 multipart/form-data.
     表单 action 属性应该设置为在后端服务器上处理文件上传的 Servlet 文件。下面的实例使用了 UploadServlet Servlet 来上传文件。
     上传单个文件,您应该使用单个带有属性 type="file" 的 <input .../> 标签。为了允许多个文件上传,请包含多个 name 属性值不同的 input 标签。输入标签具有不同的名称属性的值。浏览器会为每个 input 标签关联一个浏览按钮。
<web-app>
....
<context-param> 
   
<description>Location to store uploaded file</description> 
   
<param-name>file-upload</param-name> 
   
<param-value>
         c:\apache-tomcat-5.5.29\webapps\data\
     
</param-value> 
</context-param>
....
</web-app>

注:文件夹要提前创建成功
     依赖包: commons-fileupload.x.x.jar和 commons-io-x.x.jar

6.上传文件
上传单个文件
<input type="file" name="file" size="50" />
上传多个文件
<input type="file" name="multipleFileUpload"  multiple/>

7.servlet操作

// 获取文件将被存储的位置
filePath = getServletContext().getInitParameter("file-upload");
DiskFileItemFactory factory = new DiskFileItemFactory();
// 文件大小的最大值将被存储在内存中
factory.setSizeThreshold( maxMemSize);
// Location to save data that is larger than maxMemSize.
factory.setRepository( new File("D:\\Tomcat\\apache-tomcat-6.0.37\\webapps\\FirstProj\\temp\\" ));
// 创建一个新的文件上传处理程序
ServletFileUpload upload = new ServletFileUpload(factory);
// 允许上传的文件大小的最大值
upload. setSizeMax(maxFileSize);
@SuppressWarnings("rawtypes" )
List fileItems = upload.parseRequest(request);
// 处理上传的文件项
@SuppressWarnings("rawtypes" )
Iterator i = fileItems.iterator();
while (i.hasNext())
{
    FileItem fi = (FileItem) i.next();
    if (!fi.isFormField())
    {
        String fileName = fi.getName();
        // 写入文件
        if (fileName.lastIndexOf("\\" ) >= 0)
        {
            file = new File(filePath + fileName.substring(fileName.lastIndexOf( "\\")));
        }
        else
        {
            file = new File(filePath + fileName.substring(fileName.lastIndexOf( "\\") + 1));
        }
        fi.write( file);
    }
}

8.操作数据库

// JDBC 驱动器名称和数据库的 URL
final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
final String DB_URL = "jdbc:mysql://localhost/testdb";

// 数据库的凭据
final String USER = "root";
final String PASS = "Test1234_";

Connection conn = null;
Statement stmt = null;
// 注册 JDBC 驱动器
Class.forName(JDBC_DRIVER);

// 打开一个连接
conn = DriverManager.getConnection(DB_URL, USER, PASS);

// 执行 SQL 查询
stmt = conn.createStatement();
String sql;
sql = "SELECT * FROM Employees";
ResultSet rs = stmt.executeQuery(sql);

// 从结果集中提取数据
while (rs.next())
{
    // 根据列名称检索
    int id = rs.getInt("id");
    int age = rs.getInt("age");
    String first = rs.getString("first");
    String last = rs.getString("last");
    //TODO
}

// 清理环境
rs.close();
stmt.close();
conn.close();

注:依赖包JDBC

9.中文显示乱码

// 设置响应内容类型,增加charset=UTF-8,使浏览器正常显示中文
response.setContentType("text/html;charset=UTF-8" );

10.设置浏览器自动刷新

// 设置刷新自动加载时间为 5 秒
response.setIntHeader( "Refresh" , 5);

11.日期Date和Format Date

Date dNow = new Date();
SimpleDateFormat ft = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
ft.format(dNow);

12.网页重定向
(1) 使用 response 对象的 sendRedirect() 方法

public void HttpServletResponse.sendRedirect(String location)throws IOException

(2) 把 setStatus() 和 setHeader() 方法一起使用

....String site = "http://www.newpage.com" ;
response.setStatus(response.SC_MOVED_TEMPORARILY);
response.setHeader("Location", site);
....

13.Listener,filter,servlet的加载顺序
     加载顺序是:context-param -> listener -> filter -> servlet

14.将请求转发给过滤器链上下一个对象

// 把请求传回到过滤器链
chain.doFilter(request, response);

15.发送邮件
     依赖jar包: JavaMail API 和 Java Activation Framework)JAF
     http://www.oracle.com/technetwork/java/index-138643.html
     http://www.oracle.com/technetwork/java/javase/jaf-136260.html
     
     注:测试未成功,需要debug

16.servlet国际化

- 国际化(i18n):这意味着一个网站提供了不同版本的翻译成访问者的语言或国籍的内容。
- 本地化(l10n):这意味着向网站添加资源,以使其适应特定的地理或文化区域,例如网站翻译成印地文(Hindi)。
- 区域设置(locale):这是一个特殊的文化或地理区域。它通常指语言符号后跟一个下划线和一个国家符号。例如 "en_US" 表示针对 US 的英语区域设置。

java.util.Locale request.getLocale()

17.servlet生命周期
架构图:下图显示了一个典型的 Servlet 生命周期方案。
- 第一个到达服务器的 HTTP 请求被委派到 Servlet 容器。
- Servlet 容器在调用 service() 方法之前加载 Servlet。
- 然后 Servlet 容器处理由多个线程产生的多个请求,每个线程执行一个单一的 Servlet 实例的 service() 方法。






0 0