Servlet

Servlet

1 Tomcat

  • 官网下载(http://tomcat.apache.org/)相应版本解压即可使用
1.1 Tomcat目录结构
文件夹说明备注
bin该目录下存放的是二进制可执行文件startup.bat启动Tomcat、shutdown.bat停止Tomcat
conf这是一个非常重要的目录,这个目录下有两个最为重要的文件server.xml和web.xmlserver.xml:配置整个服务器信息。例如修改端口号,编码格式等。
web.xml:项目部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。
libTomcat的类库,里面存放Tomcat运行所需要的jar文件。
logs存放日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,异常也会记录在日志文件中。
tempTomcat的临时文件,这个目录下的东西在停止Tomcat后删除。
webapps存放web项目的目录,其中每个文件夹都是一个项目;其中ROOT是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是ROOT项目。
work运行时生成的文件,最终运行的文件都在这里。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下。
1.2 修改端口号
  • Tomcat默认端口号为8080,可以通过conf/server.xml文件修改
    * 8080:监听用户业务处理的端口
    * 8005:监听关闭tomcat的端口
    * 8009:多个tomat之间同步数据的端口
1.3 设置用户权限
  • 可以在conf/tomcat-users.xml中设置

2 HTTP协议

  • 是一个基于请求与响应模式的,无状态的应用层协议,运行于TCP协议基础之上。
2.1 HTTP协议特点
  • 支持客户端(浏览器)/服务器模式
  • 简单快速:请求方法常用的有Get、Post等
  • 灵活:HTTP允许传输任意类型的数据,传输的数据类型由Content-Type标识
  • 无连接:每次TCP连接只处理一个或多个请求,服务器处理完客户的请求后,即断开连接
  • 无状态:HTTP协议对于事务处理没有记忆能力
2.2 HTTP请求报文

请求报文

2.3 HTTP响应报文

响应报文

3 Servlet

  • 服务器端程序,可交互式的处理客户端发送到服务端的请求,并完成响应操作
  • JavaWeb程序开发的基础,JavaEE规范的一个组成部分
  • 动态网页技术
3.1 作用
  • 接收客户端请求,完成操作
  • 动态生成网页
  • 将包含操作结果的动态网页响应给客户端
3.2 编写Servlet的两种方式
  • 实现Servlet接口,实现5个主要方法
    * init(ServletConfig config)
    * ServletConfig getServletConfig()
    * service(ServletRequest req,ServletResponse res)
    * String getServletInfo()
    * destroy()
  • 继承HttpServlet类,重写doGet()和doPost()方法
3.3 web.xml中配置Servlet
	<!--1、添加servlet节点-->
	<servlet>
	<servlet-name>MyServlet</servlet-name>
	<servlet-class>com.qf.servlet.MyServlet</servlet-class>
	</servlet>
	<!--2、添加servlet-mapping节点  -->
	<servlet-mapping>
	<servlet-name>MyServlet</servlet-name>
	<url-pattern>/myservlet</url-pattern>
	</servlet-mapping>
3.4 使用注解配置Servlet
	/**
	 * Servlet implementation class HelloServlet
	 * 演示Servlet注解式配置
	 */
	@WebServlet("/hello")
	public class HelloServlet extends HttpServlet {
		
		protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			
			response.getWriter().print("OK");
		}
		
		protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			doGet(request, response);
		}
	}
  • @WebServlet注解常用属性
    * name:Servlet的名字
    * value:配置url路径,可以配置多个
    * urlPatterns:和value一样,不能同时使用
    * loadOnStratup:Servlet创建的优先级
3.5 Request对象
  • 常用方法:
    * getParameter(String name):根据表单组建名称获取数据
    * setCharacterEncoding(String charset):指定每个请求的编码
3.6 Response对象
  • 常用方法:
    * setHeader(name,value):设置响应头信息
    * setContentType(String):设置响应文件类型、编码格式
    * setCharacterEncoding(String):设置响应内容的编码格式
    * getWriter():获取字符输出流
3.7 转发
  • 在服务器端,将请求发送给服务器上的其他资源,以共同完成一次请求的处理
	request.getRequestDispatcher("/目标URL-pattern").forward(request, response);
  • 是在服务器内部跳转,地址栏不发生改变,属于同一次请求,可以共享同一次request作用域中的数据
  • 存数据:request.setAttribute(String key,Object value);
  • 取数据:request.getAttribute(String);
  • 只能转发给同一个Web应用中的组件
3.8 重定向
  • 重定向只作用在客户端,客户端将请求发送给服务器后,服务器响应给客户端一个新的地址,客户端重新发送新请求
	response.sendRedirect("目标URI");
  • 是在客户端跳转,地址栏发生变化,属于多次请求
  • response没有作用域,两次request请求中的数据无法共享
  • 重定向可以指向任何资源
3.9 Servlet执行流程

执行流程

3.10 解决Servlet线程安全问题
  • 使用同步锁
  • 使用ThreadLocal管理
  • 尽量使用局部变量

4 Coocie

  • Cookie是在浏览器访问Web服务器的某个资源时,由Web服务器在HTTP响应头中附带传送给浏览器的一小段数据
  • 优点:
    * 可配置到期规则
    * 简单性:一种基于文本的轻量结构,包含简单的键值对
    * 数据持久性:Co okie默认在过期之前是可以一致存在客户端浏览器上的
  • 缺点:
    * 大小受到限制
    * 用户可配置为禁用Cookie
    * 潜在的安全风险:存在客户端,可能会被篡改
4.1 常用方法
  • 创建Cookie
	Cookie ck = new Cookie("code",code);
	//设置Cookie的路径
	ck.setPath("/webs");
	//设置超时时间:默认-1:内存存储;0:立马销毁;>0:有效期,单位为秒
	ck.setMaxAge(-1);
	//将Cookie响应给客户端
	response.addCookie(ck);
  • 获取Cookie
	//获取所有的Cookie
	Cookie[] cks = request.getCookies();
  • Cookie编码与解码
	//编码
	URLEncoder.encode("姓名","UTF-8");
	//解码
	URLDecoder.decode("姓名","UTF-8");

5 Session对象

  • 用于记录用户状态,在一段时间内,单个用户与Web服务器的一连串相关的交互过程
  • 服务器会为每一次会话分配一个Session对象
  • 同一个浏览器发起的多次请求,属于同一次会话
  • 首次使用到Session时,服务器会自动创建Session,并创建Cookie存储SessionId发送给客户端
5.1 Session作用域
  • 作用范围是一次会话有效,可以在一次会话的任意位置进行获取
  • 可以传递任何数据
5.2 常用方法
	//获取Session对象
	HttpSession session = request.getSession();
	//将数据存放到session作用域中,以键值对的形式存储
	session.setAttribute("key",value);
	//从session作用域中获取数据
	Object value = session.getAttribute("key");
	//从session作用域中移除数据
	session.remove("key");
	
	//设置session超时时间,单位为秒,默认为30分钟
	session.setMaxInactiveInterval(60);
	//手动销毁session
	session.invalidate();

6 ServletContext对象

  • 全局作用域,对应一个Tomcat中的Web应用
  • 当Web服务器启动时,会为每个Web应用创建一个ServletContext,服务器关闭时销毁
6.1 常用方法
	//获取ServletContext对象的三种方式
	//1.通过GenerricServlet对象获取
	ServletContext sc = this.getServletContext();
	//2.通过HttpServletRepuest对象获取
	ServletContext sc = request.getServletContext();
	//3.通过HttpSession对象获取
	ServletContext sc = session.getServletContext();
	
	//获取项目真实路径
	String realPath = sc.getRealPath("/");
	
	//获取项目上下文路径
	String contentPath = sc.getContentPath();
	
	//存储数据
	sc.setAttribute("key",value);
	//获取数据
	sc.getAttribute("key");
	//移除数据
	sc.remove("key");

7 Request、Session和ServletContext作用域的区别

  • Request:一次请求,请求响应之前有效
  • Session:一次会话,浏览器不关闭或不超时之前有效
  • ServletContext:服务器启动时开始,服务器关闭之前有效
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值