疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java知识整理之Servlet


 

两层CS架构:客户端+DB 数据库作为Server移植性差,不适合大型引用
三层CS架构:客户端+应用服务器+DB 移植性好,适合大型引用,但是客户端需要单独安装
BS架构:Browser+WebServer+DB 数据库只负责数据管理,web服务器负责业务逻辑处理,浏览器负责提供操作页面
Servlet:server+let;服务器端的小程序,Sevlet是容器的一部分;sun公司制定的一种用来扩展Web服务器功能的组件规范
容器:符合一定规范,提供组件运行环境的一个程序
200表示请求成功202表示请求被接受但处理未完成400错误的请求
404错误:web服务器(容器)根据请求地址找不到对应资源
405错误:web服务器找不到servlet()方法处理请求(service方法名称写错等)
500错误:程序在运行过程出错
HTTP协议:w3c制定的一种应用层协议,一次请求一次连接
请求数据包:请求行,消息头,实体内容;响应数据包:状态行,消息头,实体内容
HttpServletRequest(客户端请求):读取和写入请求数据,取得和设置cookie,实现请求转发
HttpServletResponse:设置cookie,实现重定向
Servlet获取请求参数值(Name-Value(s))的方法:
String request.getParameter(String Name); String[] request.getParameterValues(String Name);(参数名相同多个参数值)
get请求:当需要向服务器请求指定的资源时使用的方法,不适用于提交请求(表单参数值在请求资源路径后面)
post请求:向服务器提交需要处理的数据,设置表单属性为post,可提交大量数据,不会将请求参数显示在浏览器地址栏(参数值在实体内容中);
解决post方式下乱码:(页面-->服务器)
1.表单所在页面按照指定字符集打开:<meta http-equiv = "content-type" content = "text/html;charset=utf-8">
2.服务器端指定编码解码:request.setCharacterEncoding("utf-8");
解决get方式下乱码:(服务器-->页面)
1.表单所在页面按照指定字符集打开:<meta http-equiv = "content-type" content = "text/html;charset=utf-8">
2.服务器端获取参数:String username = request.getParameter(Name);username = new String(username.getBytes("iso-8859-1"),"utf-8");iso-8859-1-->utf-8


解决输出内容(out.println();)乱码:response.setContentType("text/html;charset=uft-8");
编写Servlet的步骤:
1.创建web project
2.编写一个类,继承自HttpServlet
3.重写service()方法,编写输出内容
4.配置web.xml文件
5.部署该工程到tomcat中
6.启动tomcat
7.打开浏览器,输入 http://localhost:8080/应用名/地址
打开web项目下的WebRoot下的html文件:http://localhost:8080/应用名/demo.html 请求资源路径:应用名(appName)/demo.html
public class GetPost extends HttpServlet{
protected void service(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
//解决post乱码:
req.setCharacterEncoding("utf-8");
//解决输出内容乱码:
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
String text = req.getParameter("text");
out.println("<h1>"+text+","+select+"</h1>");
out.close();
}
}
或者:New-->Servlet-->doGet-->next-->URL:*.do-->Finish-->doGet改为service,删除不需要部分
重定向:服务器向浏览器发送302状态码,Location消息头(重定向地址);response.sendRedirect("list");list为应用名之后的路径
重定向的地址是任意的,重定向后浏览器地址栏的地址会发生改变
转发:Servlet/JSP-->Servlet/JSP(一次请求一次响应,每次的request都不同,所以request.setAttribute只有一次效果)
转发的实现:1.绑定数据到reques对象;2.获得转发器;3.转发
1.实现绑定:request.setAttribute(String name,Object obj);name:绑定名;obj:绑定值;
2.获得转发器:RequestDispatchar rd = request.getRequestDispatchar(String path); 3.实现转发:rd.forward(request,response);
读取绑定:Object request.getAttribute(String name);
转发后地址栏地址不发生改变,转发过程在服务器内部,path必须是引用内部的某个地址,forward后的其他语句会执行
转发共享数据,重定向不共享数据
编程时的异常处理:利用转发跳转到指定页面;
通配符匹配:使用"*"匹配0个或多个字符(前面要加斜杠);前面不能使用斜杠,*.do匹配所有以.do结尾的请求
获取请求资源路径:String uri = request.getRequestURI();String action = uri.substring(uri.lastIndexOf("/")+1,uri.lastIndexOf("."));
action-->service/service.impl-->dao/dao.impl-->jdbc-->entity
Servlet线程安全:
ServletContext(Servlet上下文,一个Servlet程序只有一个):相当于Servlet中静态变量,因为Servlet创建后,服务器关闭才销毁
ServletContext sct =session.getServletContext();sct.setAttribute("count",count);