您的位置:首页 > 编程语言 > Java开发

Java知识整理(十七)之Servlet

2015-09-19 10:27 274 查看
两层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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet w3c web