`
wddgfzs
  • 浏览: 2910 次
  • 性别: Icon_minigender_2
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

servlet学习笔记

阅读更多
开发工具:
Eclipse、MyEclipse、Oracle、Pl/SQL Developer、Dreamweaver、Editplus
相关组件:
Commons DBCP、Commons DbUtils、Commons Email、Commons FileUpload、Log4J、FCKEditor

Tcp/Ip四层结构
网络接口层 (Network Interface Layer)
网络层 (Network Layer)
传输层 (Transport Layer)
应用层 (Application Layer)

应用层常用协议:HTTP、Telnet、Ftp、SMTP、POP3

URL :http://www.sinosoft.com/CMS/index.jsp
http://代表超文本传输协议
www 代表world wild web服务
sinosoft.com 域名/Ip地址/web服务器名称
/CMS web服务器上子目录名称
/index.jsp jsp页面名称

https是http的安全版本

web服务器(Server端)
常用的文本服务器Apache、IIS、Tomcat
常用的应用服务器Tomcat、Resin、WebLogic Server、WebSphere、JBoss

浏览器(Client端)

CGI(Common Gateway Interface)
Servlet
Socket开发框架MINA和Cindy框架

ctrl+shift+f 格式化

第二章Servlet起源
实例1
新建一个java project
写两个文件WebServer.java
package com.wdd;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class WebServer {

public void serverStart(int port) {
try {
ServerSocket serversocket = new ServerSocket(port);
while (true) {
Socket socket = serversocket.accept();
new Processor(socket).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
int port = 80;
if (args.length == 1) {
port = Integer.parseInt(args[0]);
}
new WebServer().serverStart(port);
}
}
Processor.java
package com.wdd;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

public class Processor extends Thread {
private Socket socket;
private InputStream in;
private PrintStream out;
public final static String Web_Root="d:\\wdd\\WebServer\\htdocs";
public Processor(Socket socket) {
this.socket = socket;
try {
in = socket.getInputStream();
out = new PrintStream(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}

public void run() {
String fileName = parse(in);
sendFile(fileName);
}

public String parse(InputStream in) {
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String fileName = null;
try {
String httpMessage = br.readLine();
String[] content = httpMessage.split(" ");// 三个部分
// 协议的状态号、协议名称、协议版本号
if (content.length != 3) {
sendErrorMessage(400, "client query error");// 400请求错误
return null;
}
System.out.println("code:" + content[0]);
System.out.println("fileName:" + content[1]);
System.out.println("http version:" + content[2]);
fileName = content[1];
} catch (IOException e) {
e.printStackTrace();
}
return fileName;
}

public void sendErrorMessage(int errorCode, String errorMessage) {
out.println("HTTP/1.0 "+errorCode+" "+errorMessage);//200成功返回
out.println("content-type: text/html");
out.println();
out.println("<html>");
out.println("<title>Error Message");
out.println("</title>");
out.println("<body>");
out.println("<h1>ErrorCode: "+errorCode+","+errorMessage+"</h1>");
out.println("</body>");
out.println("</html>");
out.flush();
out.close();
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void sendFile(String fileName) {
File file = new File(Processor.Web_Root+fileName);
if(!file.exists()){
sendErrorMessage(404,"File Not Find");//404 请求内容不存在
return;
}
try {
InputStream in = new FileInputStream(file);
byte content[] = new byte[(int)file.length()];
in.read(content);
out.println("HTTP/1.0 200 queryFile");//200成功返回
out.println("content.length:"+content.length);
out.println();
out.write(content);
out.flush();
out.close();
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
监听80端口在客户端也就是浏览器输入http://localhost/ welcome.html
welcome.html 请求的文件名
控制台输出:
code:GET
fileName:/welcome.html
http version:HTTP/1.1

第三章:Servlet编程
java子平台:
Java SE标准版的Java平台 Standard Edition
Java EE J2EE企业级Enterprise Edition
Java ME是为机顶盒、移动电话和PDA之类嵌入式消费电子设备提供的Java语言平台Micro Edition
servlet是一个标准的服务器端运行的应用程序,它可以执行商务逻辑,处理http请求。
设计模式:模板设计模式

javax.servlet 定义通用的servlet接口和类
javax.servlet.http 定义servlet对于http接口和类

servlet是一个接口,GenericServlet实现了这个接口,然后httpServlet是继承GenericServlet。

编写servlet步骤
1. 新建web project
2. 建立servlet文件
3. 部署web应用程序
4. 运行输出
5. Servlet文件调试

实例3.1
HelloServlet.java

package com.chapter3.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");//返回内容类型
PrintWriter out = resp.getWriter();//得到out对象
out.println("<html>");
out.println("<head>");
out.println("<title>my first servlet.</title>");
out.println("<body>");
out.println(new Date());
out.println("Welcome");
out.println("</body>");
out.println("</head>");
out.println("</html>");
out.flush();
out.close();
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.chapter3.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>

设置MyEclipse
先看tomcat 在看jdk
自动配置servlet
加一个serialVersionUID

servlet生命周期
init()
service()
destroy()
实例3通过servlet获取初始化参数
具体步骤:
新建GetInitParameterServlet类
运行输出
web.xml
<servlet>
    <servlet-name>GetInit</servlet-name>
    <servlet-class>com.chapter3.servlet.GetInitParameterServlet</servlet-class>
    <init-param>
    <param-name>repeat</param-name>
    <param-value>10</param-value>
    </init-param>
  </servlet>

获取
int repeat = Integer.parseInt(this.getInitParameter("repeat"));

实例4通过servlet获取服务器的运行信息
具体步骤:
新建GetServerInfoServlet类
运行输出
方法
out.println("server name:"+request.getServerName()+"</br>");
out.println("server ip:"+request.getRemoteAddr()+"</br>");
out.println("server port:"+request.getServerPort()+"</br>");
out.println("server Protocol:"+request.getProtocol()+"</br>");
out.println("server ContextPath:"+request.getContextPath()+"</br>");
out.println("server Scheme:"+request.getScheme()+"</br>");
out.println("server Method:"+request.getMethod()+"</br>");
out.println("server RequestURI:"+request.getRequestURI()+"</br>");
out.println("server ServletPath:"+request.getServletPath()+"</br>");

server name:localhost
server ip:127.0.0.1
server port:8080
server Protocol:HTTP/1.1
server ContextPath:/ServletAndJsp
server Scheme:http
server Method:GET
server RequestURI:/ServletAndJsp/servlet/GetServerInfo
server ServletPath:/servlet/GetServerInfo

实例5通过servlet获取头信息
具体步骤:
新建GetHeaderInfoServlet类
运行输出

Enumeration e = request.getHeaderNames();
String name = null;
while(e.hasMoreElements()){
name = (String)e.nextElement();
out.println("name:"+name);
out.println("value:"+request.getHeader(name)+"</br>");

}
name:host value:localhost:8080
name:user-agent value:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.13) Gecko/20101130 Firefox/3.6.13
name:accept value:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
name:accept-language value:zh-cn,zh;q=0.5
name:accept-encoding value:gzip,deflate
name:accept-charset value:GB2312,utf-8;q=0.7,*;q=0.7
name:keep-alive value:115
name:connection value:keep-alive
name:cache-control value:max-age=0


分享到:
评论

相关推荐

    JSP Servlet 学习笔记 第2版 林信良 随书光盘 共三卷

    JSP Servlet 学习笔记 第2版 林信良 随书光盘 第3卷

    林学良Jsp&Servlet学习笔记

    **林学良Jsp&Servlet学习笔记**: 这份学习资料可能是对JSP和Servlet基础知识的系统性讲解,涵盖了上述概念和原理,适合初学者入门。通过阅读这份笔记,你可以了解JSP和Servlet的基本语法、生命周期、以及如何将它们...

    JSP_Servlet学习笔记(第2版).pdf

    《JSP & Servlet学习笔记(第2版)》是作者多年来教学实践经验的总结,汇集了学生在学习JSP&Servlet;或认证考试时遇到的概念、操作、应用等各种问题及解决方案。 《JSP & Servlet学习笔记(第2版)》针对Servlet 3.0的...

    Servlet学习笔记(java的Servlet)

    Servlet学习笔记(java的Servlet)。 jsp的学习基础。此笔记可让你5天内学会使用Servlet,可快速入门,也可当手册使用。 更多:http://download.csdn.net/user/daillo/all

    JSP&Servlet学习笔记.pdf

    由于这部分内容是电子书中的学习笔记,电子书的内容并未直接给出,因此只能根据电子书的标题“JSP&Servlet学习笔记”和描述来推测可能涉及的知识点,而没有具体的电子书内容可以分析。如需进一步学习,建议查阅相关...

    Servlet学习笔记

    ### Servlet学习笔记精炼知识点 #### 一、Servlet初始化与加载机制 1. **Servlet注册与实例化**:在Web应用中,一个Servlet的生命周期始于它的注册与实例化过程。通常,这一过程是在Web服务器启动时,根据`web.xml...

    吉林大学珠海学院JSP&Servlet学习笔记(第二版)课后答案

    吉林大学珠海学院JSP&Servlet学习笔记(第二版)课后答案 本资源为吉林大学珠海学院JSP&Servlet学习笔记(第二版)的课后答案,涵盖了JSP和Servlet相关的知识点。本笔记共分为九章,每章节都包含了相关的问题答案,...

    JSP&Servlet学习笔记(第2版)_打印版

    根据提供的文件信息,标题为“JSP&Servlet学习笔记(第2版)_打印版”,描述指出文档经过空白边裁剪处理以便于打印。虽然提供的部分内文无法直接转化为明确的知识点,但我们可以根据标题和描述推测该文档的主要内容,...

    jsp&servlet学习笔记(第2版)光盘

    jsp&servlet学习笔记(第2版)光盘,买书附赠光盘,完片版本。

    Java相关课程系列笔记之九Servlet学习笔记

    Java相关课程系列笔记之九Servlet学习笔记 Java相关课程系列笔记之十JSP学习笔记 Java相关课程系列笔记之十一Ajax学习笔记 Java相关课程系列笔记之十二jQuery学习笔记 Java相关课程系列笔记之十三Struts2学习笔记 ...

    [JSP&Servlet学习笔记(第2版)] 林信良

    [JSP&Servlet学习笔记(第2版)] 林信良

    [JSP&Servlet;学习笔记(第2版)]

    **JSP(Java Server Pages)与Servlet...这个**[JSP&Servlet学习笔记(第2版)]**会涵盖这些主题,并可能包括示例代码、最佳实践和常见问题解答,帮助读者全面掌握JSP和Servlet的使用技巧,进一步提升Java Web开发能力。

    Servlet学习笔记3

    ### Servlet学习笔记3:深入理解Servlet与Web应用资源管理 #### 标题解析与扩展知识点 **标题**:“Servlet学习笔记3”表明这是系列学习笔记的一部分,专注于Servlet技术的深入探讨。 **知识点**: 1. **Servlet...

    JSP_Servlet学习笔记(第2版)

    本书是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习JSP &Servlet;时遇到的概念、操作、应用或认证考试等问题及解决方案。  本书针对Servlet 3.0的新功能全面改版,无论是章节架构与范例程序代码,都...

    JSP & Servlet学习笔记

    本书是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习JSP & Servlet时遇到的概念、操作、应用或认证考试等问题及解决方案。, 本书针对Servlet 3.0的新功能全面改版,无论是章节架构与范例程序代码,都做...

Global site tag (gtag.js) - Google Analytics