1.http
a.定义:超文本传输协议
b.作用:web服务器与web浏览器之间通信
c.步骤:
①客户端与web服务器建立连接(IP地址与端口号)
②客户端发送http请求(请求资源路径)
③服务器接收客户端的http请求,生成http响应回发
④服务端关闭连接;客户端解析回发响应
2.Web容器:
a.常用:Tomcat、Weblogic、jboss
b.作用:用来管理Servlet
3.Servlet:
a.定义:在服务端运行的Java程序
b.作用:在服务端产生动态内容
c.使用:
①创建Servlet类,继承HttpServlet,重写doGet方法
public class MyFirstServlet extendsHttpServlet{
@Overrideprotected voiddoGet(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {
PrintWriter out=resp.getWriter();
out.write("");
out.write("
");out.write("");
out.write("
");out.write("
this is p
");out.write("");
out.write("");
}
}
②配置web.xml文件
myFirst
com.servlet.MyFirstServlet
③Servlet的映射
myFirst
/myfirst
4.Servlet的生命周期
a.创建与初始化 init()
①默认是在Servlet第一次访问时创建和初始化(单例模式)
②注:在标签中的最后加1以在服务器启动时创建和初始化,其中的1表示优先级,0为默认,数字越小优先级越大
b.服务 doGet()与doPost()
①doGet()对应表单method属性中的get;doPost()对应表单method属性中的post
②注:若重写了service()方法,则不调用doGet()或doPost()
c.销毁 destroy()
①在服务器停止时调用destroy()
d.初始化参数的设定
①设置servlet的初始化参数(在标签内书写)
test@qq.com
调用
String email = getServletConfig().getInitParameter("email");
②设置全局上下文的初始化参数(与标签平级)
name
zhangsan
调用
String name = getServletConfig(). getServletContext().getInitParameter("name");
5.响应
a.错误信息处理
①sendError()方法
response.sendError(500,"服务器内部出现异常");
②配置(在中书写)
404
/404Error.html
b.重定向(跳转)
response.sendRedirect("../MyHtml.html");
注:这里实际发送了两次请求
6.请求
a.根据name获取值
String userName = reques.getParameter("userName"); //获取单个元素的value值
String[] favs= reques.getParameterValues("fav"); //获取多个元素的value值(适用于复选框)
b.其他请求的方法
request.getMethod() //获取请求的方法
request.getRequestURI()//获取请求的方法URI
request.getRequestURL()//获取请求的URL
request.getServletPath()//获取servlet的映射路径
request.getContextPath()//获取servlet中Context的路径
request.getRemoteAddr()//获取请求的IP地址
c.通过url地址传参
登陆
d.解决get方式中乱码问题
userName = new String(userName.getBytes("ISO-8859-1"),"utf-8")
e.请求头信息:
Enumeration names =request.getHeadNames();while(names.hasMoreElements()){
String name=(String)names.nextElement();
String value=request.getHeader(name);
}
7.Enum(枚举)
a.作用:规定一定范围的数据取值范围
b.用法:
//申明
public enumWeeK{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}//使用
public static voidmain(String[] args){
test(Week.Sunday);
}public voidtest(Week w){
}
8.文件上传
a.注意:
①表单的提交方式只能是post
②表单必须设置为复合类型表单
③在表单标签中必须要有name属性(中)
b.用法:
public voiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {//处理文件上传操作//在硬盘中去创建一个FileItem工厂
DiskFileItemFactory factory = newDiskFileItemFactory();//文件上传处理类
ServletFileUpload fileUpload = newServletFileUpload(factory);//设置上传文件的大小,以字节为单位
fileUpload.setFileSizeMax(2*1024*1024);try{
List items =fileUpload.parseRequest(request);for(FileItem item : items){if(!item.isFormField()){
upload(item);
}else{//item.getString();
}
}
}catch(FileUploadException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}private voidupload(FileItem item){//将虚拟路径转换为物理路径//System.out.println(getServletContext().getRealPath("image"));
String path = getServletContext().getRealPath("img");
File file= new File(path+"/"+new Date().getTime()+item.getName());try{
item.write(file);
}catch(Exception e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}
9.文件下载
String fileName = request.getParameter("file");
response.setHeader("Content-Disposition", "attachment; filename=" +fileName );
String path= getServletContext().getRealPath("img");
File file= new File(path + "\\"+fileName);
FileInputStream inputStream= newFileInputStream(file);
ServletOutputStream out=response.getOutputStream();byte[] bytes = new byte[1024];int b = 0;while(( b = inputStream.read(bytes))!=-1){
out.write(bytes,0,b);
out.flush();
}
out.close();
10.转发
a.语法:
request.getRequestDispatcher("login.html").forward(request,response);
b.与重定向的区别
①转发:整个过程只发送了一次请求;重定向:发送了2次请求
②转发:地址栏不会发生变化;重定向:地址栏会发生变化
c.转发中的request属性
request.setAttribute("msg","hello"); //属性值为Object类型的
String msg= (String) request.getAttribute("msg");