`
guiqing85
  • 浏览: 162916 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Servlet学习笔记(一)javaWeb应用基本

阅读更多
1 B/S concept
  B/S结构(Browser/Server结构)结构即浏览器和服务器结构。
  它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。

2 How to develop a WebApp.
1)WebApp的组成(符合JAVAEE规范).
2)例子.
firstWeb(webroot)
     /WEB-INF/web.xml
     /index.html
     /student.html
3) 部署到应用服务器.  
通过url访问:
http://localhost:8080/firstWeb/
or
http://127.0.0.1:8080/firstWeb/
思考:通过url访问index.html和直接用浏览器打开index.html文件效果一样么?
其过程有何差别?

3 HTTP introduction.
HTTP(Hyper Text Transfer Protocol)是超文本传输协议的缩写,
它用于传送WWW方式的数据。HTTP协议采用了请求/响应模型。

客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、
以及包含请求修饰符、客户信息和内容的类似于 MIME的消息结构。
request:
<!--start-->
GET /firstWeb/ HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
If-Modified-Since: Fri, 11 May 2007 03:46:02 GMT
If-None-Match: W/"216-1178855162000"
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: 127.0.0.1
Connection: Keep-Alive
<!--end-->


服务器以一个状态行作为响应,相应的内容包括消息协议的版本,
成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
response:
<!--start-->
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
ETag: W/"216-1178955948000"
Last-Modified: Sat, 12 May 2007 07:45:48 GMT
Content-Type: text/html
Content-Length: 216
Date: Sat, 12 May 2007 07:45:56 GMT

<html>
<head>
<title>Welcome to SD0702 HomePage</title>
</head>
<body>
<center>
  <h1>
  <font color="blue">
  Welcome to SD0702...
    </font>
  </h1>
  </center>
</body>
</html>
<!--end-->
1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求
(具体代码含义参看http代码对照表)

4 Servlet introduction.
1) 什么是Servlet
Servlet是用Java编写的Server端程序,它与协议和平台无关。是服务器端的组件。
只能在容器内运行,有自己的生命周期(当然可以给servlet一个main方法,
然后在客户端运行。这是servlet失去了它原有的意义,退化成了一个普通的Java类)。
a) 高效
CGI:进程(开销大,共享资源不方便)
Servlet:线程(开销小,共享资源方便)
b) 方便
Servlet提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、
读取和设置HTTP头、处理Cookie、跟踪会话状态等。
c) 功能强大
  在Servlet中,许多使用传统CGI程序很难完成的任务都可以轻松地完成。
  例如,Servlet能够直接和Web服务器交互,而普通的CGI程序不能。
  Servlet还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。

d) 可移植性好
  Servlet用Java编写
Servlet: java class, 接收HttpRequest, 生成HttpResponse(生成动态页面)

2) 如何开发Servlet
a) Servlet class有特定的继承关系
interface: Servlet javax.servlet.*)
class: GenericServlet (javax.servlet.*)
class: HttpServlet (javax.servlet.http.*)
GenericServlet implements Servlet
HttpServlet extends GenericServlet

Http  POST,GET,...
HttpServlet doPost(),doGet(),...
GenericServlet service()

b) 实现特定的生命周期方法
init(), init(ServletConfig config)
service(HttpServletRequest request, HttpServletResponse response)
destroy()

c) 例子:
需要导入的包
import javax.servlet.*;
import javax.servlet.http.*;
public class ConcreteServlet extends HttpServlet{
init(){}
service(HttpServletRequest request, HttpServletResponse response){}
destroy(){}
}

HelloServlet.java
功能:
标题:Welcome to SD0702 HomePage
内容:居中显示 Hello our friends,today is (current date),
               Welcome to visit our HomePage.
firstWeb
     /WEB-INF/web.xml
     /WEB-INF/classes/HelloServlet.class
    
http://localhost:8080/firstWeb/hello


d)如何部署一个包含了Servlet的Web应用
I   建立特定的目录结构(Done)
II  编写Servlet源文件(Done)
III 编译Sevlet,并将class文件放到/WEB-INF/classes位置(Done)
IV  修改web.xml,增加Servlet的描述信息(remained step)
  <servlet>
    <servlet-name>helloServlet</servlet-name>     --->Servlet name
    <servlet-class>HelloServlet</servlet-class> --->Servlet class的位置
  </servlet>
  <servlet-mapping>
    <servlet-name>helloServlet</servlet-name>     -->Servlet name(has been defined)
    <url-pattern>/hello</url-pattern>             -->Access the servlet thru  url pattern        
  </servlet-mapping>
  --->Servlet的映射名,Browser通过此名字来访问Servlet
V  将整个应用目录复制到%TOMCAT_HOME%/webapps/下,Tomcat自动激活应用。

3) 使用Servlet接收用户输入信息
a)通过表单(form)提交数据
<form action="login" method="POST" enctype="multipart/form-data">
action: 表单提交给服务器的哪个资源处理
method: 提交方式 "POST","GET"等
GET---->通过URL提交表单信息,由于受到URL长度的限制,只能传递大约1024字节。
<!--get方法提交表单-->
GET /guessWeb/guess?answer=abc&times=&luckNo= HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://localhost:8090/guessWeb/
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: 127.0.0.1
Connection: Keep-Alive
<!--end-->

POST--->通过Http Body提交表单信息,传输的数据量大,可以达到2M。
<!--post方法提交表单-->
POST /guessWeb/guess HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://127.0.0.1:8090/guessWeb/index.html
Content-Type: application/x-www-form-urlencoded
Content-Length: 25

answer=abc&times=&luckNo=
<!--end-->

enctype: multipart/form-data 通常可用于上传文件

例:
//表单通过GET方法(默认)提交给login映射的资源处理
//login为在web.xml中配置的url-pattern或者是jsp文件等
<form action="login">
student name:<input type="text" name="name"/>
<br>
student age:<input type="text" name="age"/>
<br>
student nick:<input type="text" name="nick"/>
<br>
             <input type="text" name="nick"/>
<br>
<inut type="submit" value="submit"/>
</form>

b)如何在服务器端获得表单提供的数据

I request对象
HttpServletRequest对象由Web Container封装用户Http请求数据报而成,
可通过它获得所有跟用户请求数据报相关的信息。
getProtocol():String
getMethod():String
getRemoteHost():String
getRemotePort():int
getHeader():String

getParameter(String name):String
返回指定输入参数(名为name)的值
getParameterValues(String name):String[]
返回指定输入参数(名为name)的所有值
getParameterNames():Enumeration
返回请求对象中全部输入参数的名称
例:
String name=request.getParameter("name");
String age=request.getParameter("age");
String[] nicks=request.getParameter("nick");

II 解决Servlet中的中文乱码问题:
<1>静态中文信息乱码
response.setContentType("text/html; charset=gbk");
<2>中文输入乱码
a request.setCharacterEncoding("gbk");(解决post方法提交表单中文乱码问题)
b String name =new String(request.getParamete("name").getBytes("iso-8859-1"));
(b不推荐使用)
c 通过修改%TOMCAT%/conf/server.xml (解决get方法提交表单中文乱码问题)
加入 URIEncoding="gbk"
<3>静态html页面的中文化问题
<meta http-equiv="content-type" content="text/html; charset=gbk"> 

III 用户管理
功能:用户登录和用户注册
登录:username,password,role(select)
注册:姓名,密码,婚否(radio),电话(用户最多可以有填写3个电话号码,无需验证合法性)
loginWeb
      /WEB-INF/web.xml
      /WEB-INF/classes/com.LoginServlet.class
      /WEB-INF/classes/com.RegisterServlet.class
      /login.html
      /register.html
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics