文档库 最新最全的文档下载
当前位置:文档库 › servlet

servlet

tomcat部署servlet目录结构
webapps---->project---->WEB-INF---->classes
|
->lib
|->web.xml(servlet的部署描述文件)
package com.bluedot;
import ......
public class AA extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException ,IOException{
PrintWriter pw = response.getWriter();
pw.println("

Hello

");
pw.flush();
pw.close();

}

}

编写web.xml文件



AA
com.bluedot.AA


AA
/Hello


1.servlet的生命周期
init service destroy

boolean flag = true;
while(flag){
//监听端口
Socket s = serverScoket.accept();
String str = br.readLine();
//做http数据包的解析获得到里面的内容
String method = "get";
String name = "/Hello"


//1.用户提交的表单数据.2.浏览器的附加信息
HttpServletRequest request = new HttpServletRequest();
//1.封装了给客户端相应的流对象.
HttpServletResponse response = new HttpServletResponse();


//AA a = new AA();



Object(Servlet/HttpServlet) obj = Class.forName("com.bluedot.AA").newInstance();

TT t = new TT(method,obj);
Thread thread = new Thread(t);
thread.start();

}

public class TT implements Runnable{
private String method;
private HttpServlet obj;
private HttpServletRequest request;
private HttpServletResponse response;
public TT(String method,HttpServelt obj,HttpServletRequest request,HttpServeltResponse){
this.method = method;
this.obj = obj;
this.request = request;
this.response = response;
}
public void run(){
//if("get".equlas(method)){
//obj.doGet(request,response);

//}else{
// obj.doPost(request,response);
//}

servelt.service(request,response);

}
}


public class BB{
static{
.......
}
}

servelt生命周期复杂版:
servlet的生命周期是又容器管理的。他经历3个阶段:1 初始化(init) 2服务(service)3销毁(destroy)
当有客户端第一次访问这个servlet时容器会创建这个servelt对象并且调用一次init方法,并且在新的线程中
调用service方法处理用户的请求。然后容器会缓存这个servlet对象。在缓存的时间没有到达时,如果在有客户端访问
这个servlet容器不会在创建这个servlet对象而是在新的线程中调用service方法。如果超过了缓存的时间,容器会销毁
这个servlet对象并且调用一次destroy方法。如果这时在有客户端请求这个资源重复上述动作。

Servlet的作用
1.获取用户提交的表单数据
2.获取到客户端浏览器的附加信息
3.处理数据(放入到数据库。。。。做数据的传递)?????
4.给客户端一个响


5.给客户端的响应中添加附加信息。




获取表单当中的数据方法:
String str = request.getParameter("key");
String[] arrr = request.getParameterValues("key");
request.setCharacterEncoding("utf-8");设置请求中的字符编码
String str = new String(color.getBytes(),"utf-8");设置编码的另一种方式
request.setCharacterEncoding("utf-8");通过request对象对请求中的表单数据设置字符编码
在相应中设置编码:
response.setContentType("text/html;charset=utf-8");告知浏览器用UTF-8的编码方式查看相应结果

解决tomcat针对get请求含有中文时出现乱码现象。在tomcat的conf目录下的server.xml Connector的节点中添加URIEncoding="utf-8"


在servlet中获取浏览器的附加信息
String value = request.getHeader("key");
Enumeration enum = request.getHeaderNames();

作业一:
编写一个servlet获取客户端浏览器的型号,如果是IE 显示“你好微软” 如果是 火狐 显示“你好火狐”除此以外其他的浏览器则显示
“我不认识你”

作业二:
编写一个servlet获取客户端浏览器所支持的语言。如果是中文显示“你好,聪明的中国人”,如果是英文 显示“你好,美国佬”如果是
日文显示“XXXXXXX”

作业三:
编写一个servlet做服务端的计数。要求线程安全的。

客户端浏览器的请求方式:
1.字符请求
2.字节请求




??????????????

给客户端响应的类型:
1.字符型响应:
PrintWriter out = response.getWriter();
out.pritnln("

......");
2.字节流的响应:
OutputStream os = response.getOutputStream();
os.write(.......);

给客户端的响应:
response.setContentType("text/html");
response.setContentType(MIME);

作业四:
编写一个servlet这个servlet响应给你客户端一个pdf格式的文件。

给客户端一个错误信息的相应:
response.sendError(404,"错误提示");

给客户端一个下载文件的响应
response.setContentType("bin");

在响应中添加附加信息。解决文件下载时文件名和类型的问题
response.addHeader("Content-disposition", "attchment;filename=\""+file.getName()+"\"");

作业五:
编写一个html页面
doc
jpg
pdf

页面跳转:
重定向
response.sendRedirect("url");
刷新跳转
response.addHeader("refresh", "5;url=https://www.wendangku.net/doc/9716504036.html,");

ServletContext(servlet上下文对象)
1.相对路径转换绝对路径
获得ServletContext对象
ServletContext sc = getServletContext();
如何将相对路径转换成绝对路径:
String realePath = sc.getRealPath("相对路径");

2.获取容器的附加信息
获得容器的的名字和版本号:
ServletContext sc = getServletContext();
String str = sc.getServerInfo();
获得servlet的版本号:

String majorVer = sc.getMajorVersion();
获得servelt的副版本号:
String minorVer = sc.getMinorVersion();

3.全局容器:
ServletContext sc = getServletContext();
sc.setAttribute("key",value)
Object obj = sc.getAttribute("key");

这个对象用于获取web.xml文件当中的配置信息


Key
Value


ServletConfig conf = getServletConfig();
String value = conf.getInitParameter(key);

让一个servlet自启动

0



ServletContext生命周期:
ServletContext的生命周期是最长的一个对象,容器启动时就会创建这个对象,容器关闭时会销毁这个对象。

作业1:
把昨天的作业改成相对路径去做。
作业2:
编写一个自启动的servlet,重新init方法。在该方法通过读properties文件获取配置信息。(配置信息内容:文件上传路径,数据库用户名,数据库密码)

Cookie和Session
HTTP协议的特点:无状态,单向性
如何获得到一个Cookie对象:
Key和Value只能是英文和数字
Cookie c = new Cookie("key","value");

当客户端请求服务端资源时,客户端会把服务端曾经写给他的所有的Cookies对象一并的拿过来。服务端如何获取客户端
提交过来的所以的Cookie对象呢?
Cookie[] cookies = request.getCookies();

服务端一共能给同一个客户端最多30个(20个)
Cookie对象的种类:
1.状态Cookie(客户端会把服务端写给我Cookie对象放到内存当中存放,如果关闭浏览器,那这个Cookie对象随之销毁。)
2.持久化Cookie(客户端会把这个Cookie对象保存到客户端磁盘的文件当中。);
如何创建一个持久化Cookie
Cookie c = new Cookie("key","value");
c.setMaxAge(秒);
c.setMaxAge(60*60*24*365);


Session的使用
会话

HttpSession session = request.getSession(不填|true|false);
session.setAttribute("key",Object value);
Object obj = session.getAttribute("key");

Session的结构
1.类似于map的数据结构
2.生命周期(可变的 是有程序员自己来控制)

Servlet优缺点:
1 优点:
就是java类。编写代码时容易
调试比较容易。debug

2 缺点:
给客户端的响应是html字符串的时候特别麻烦。需要在out.println("

......");

jsp:jsp = java代码+html
java Server pages

jsp与servlet的区别?
1.jsp和servlet是本质上相同的技术,只是表现形式上不一样。
servlet的位置:Project---->WEB-INF----->classes----->java的class文件
jsp的位置:webroot的根目录下---->jsp的原文件

容器的jsp引擎在什么时候把一个jsp原文件编译成一个servlet
1.JSP以源文件部署到容器中。(Servlet需要编译成class文件后,部署到容器中)
2.JSP部署到容器的根目录下,和静态资源位于相同的目录。(

WEB-INF/classes)
3.容器编译JSP的源文件到Servlet class类:有第一个请求访问JSP的时候,容器编译。如果部署到容器中的JSP源文件被修改了,容器会重新的编译JSP到Servlet
4.JSP---Servlet,类名:文件名_jsp.java
5.JSP中的HTML的代码后被JSP引擎放入到Servlet的out.write()函数中。


在JSP中的嵌入Java代码必须放在指定的标记中。
1.JSP的三种原始标签
2.JSP的指令标签
3.JSP的动作标签
4.在JSP2.0规范后,提出EL表达式
5.自定以的标签(JSTL标签库,struts标签库,分页标签库)

JSP中原始的三种标签
<%! %>------声明标签,声明变量和函数(声明的变量是成员变量,函数是和_jspService并列的函数体)
<% %>------脚本标签 编译在_jspService函数体的内部
<%=Java表达式 %>------赋值标签 out.println(add(3,4));


作业1:
编写一个jsp页面,当访问这个页面时以20%概率显示你中奖了。

作业2:
把改变背景颜色的作业,用jsp完成


jsp的指令标签
page include
指令标签的格式:
<%@ 标签名 属性=值 属性=值 。。。。。。。%>

import属性的写法有两种:
1: <%@ page import="java.util.*,com.bluedot.ConfigInfo,........"%>
2: <%@ page import="java.util.*"%>
<%@ page import="com.bluedot.ConfigInfo"%>


相关文档
相关文档 最新文档