引言: 最近在写servlet的时候有一点生疏, 特地写个笔记记录一下学习心得, 重点的地方特地加粗放大, 方便日后查阅
什么是Servlet:
Servlet是一个JavaEE的组件,也是JavaEE中的一个规范
该规范有以下约束.
1:约束服务器
2:约束web的项目结构
3:约束程序的执行
Servlet是JavaEE中的一个规范:
服务器其实是对Servlet的实现.
Servlet是一个JavaEE的组件:
Servlet是一个程序(类),只不过必须要遵循Servlet的规范.
重点: 要求类:必须实现javax.servlet.Servlet接口.
搭建标准的JavaWeb的项目结构:
1.创建一个Java项目:servlet;
2.在HelloServlet中创建一个文件夹webapp,表示Web项目的根;
3.在webapp中创建WEB-INF文件夹,
4.在WEB-IN中创建文件夹:lib,classes
5.在WEB-IN中去Tomcat根/conf拷贝web.xml文件,只需要保留根元素.
6.把当前项目的classpath路径改成webapp/WEB-IN下的classes中.
重点: Servlet属于JavaEE的范畴,只依赖JavaSE是不能开发的,得依赖JavaEE的jar.
Servlet的第一个程序编写步骤:
1):拷贝Tomcat根/lib/servlet-api.jar到项目的WEB-INF/lib目录中,并做build path.
2):编写Servlet程序,使之实现javax.servlet.Servlet接口,并覆盖接口中的方法.
public class HelloServlet implements javax.servlet.Servlet{...实现方法...}
3):发现方法中参数出现arg0,arg1的情况是因为没有关联Servlet的源代码.
是否关联源代码和程序最终的运行没有关系,只是在开发阶段参数美观,可阅读源代码.
Tomcat的源代码程序:apache-tomcat-7.0.57-src.zip
4):在service(ServletRequest req, ServletResponse res)方法,打印一句话.
引导:此时HelloServlet类,和Tomcat一点关系都没有:我们需要告诉Tomcat来帮我们管理HelloServlet类.(Tomcat是Servlet的容器,会负责Servlet对象的生命周期和方法调用).
所以,得以配置的形式,告诉Tomcat来帮我们管理自定义的Servlet类.
ServletRequest接口: 请求对象,封装了获取所有请求信息(请求行,请求头,请求实体)的方法.
HttpServletRequest接口:是ServletRequest的子接口,处理HTTP协议请求的方法.
常用方法:
1.String getMethod():返回请求方式:如GET/POST
2.String getRequestURI():返回请求行中的资源名字部分:如/test/index.html
3.StringBuffer getRequestURL():返回浏览器地址栏中所有的信息
4.String getContextPath():返回当前项目的上下文路径,该值以/开头(元素的path属性值.)
5.String getRemoteAddr():返回发出请求的客户机的IP地址
6.String getHeader(String name):返回指定名称的请求头的值。
获取请求参数的方法:(从页面获取提交参数)
1.String getParameter(String name):根据参数名获取单个参数值。
2.String[] getParameterValues(String name):根据参数名获取多个参数值。
3.Enumeration getParameterNames():返回包含所有参数名的Enumeration对象。
4.Map
String username = new String(data,”UTF-8”);
一个参数需要使用两行代码来转码,如果有N个参数,需要转N次,代码重复.
解决方案:
针对于POST请求方式:
request.setCharacterEncoding(“UTF-8”);
注意:1:只对POST有效,2:必须放在获取任意参数之前.
针对于GET请求方式:
修改Tocmcat中的server.xml配置文件中修改端口的元素,对GET方式的默认编码
建议:凡是涉及到参数提交都是用post
HttpServletResponse:
ServletResponse接口响应对象.封装了获取响应信息的方法.
HttpServletResponse接口:ServletResponse的子接口,可以处理HTTP响应的方法.
常用方法:
1:OutputStream getOutputStream():获取字节输出流对象
2:PrintWriter getWriter():获取字符输出流对象
注意:上述方法,不能共存,否则报错.
//设置输出的MIME类型(内容的类型):
response.setContentType(“text/html”);//不能写错
//设置输出数据的编码方式:
response.setCharacterEncoding(“UTF-8”);
可以将上述两行代码合并成一行代码:
5:response.setContentType(“text/html;charset=utf-8”);
注意:必须先设置MIME类型和编码,再获取输出流,否则没有效果.