首页 > 其他 > 详细

Servlet 相关

时间:2020-11-06 00:20:11      阅读:28      评论:0      收藏:0      [点我收藏+]

java语言编写动态资源的开发技术,普通的java类

转发与重定向的区别

  • 转发Forward在服务器端完成的;重定向redirection是在客户端完成的
  • 转发的是同一次请求;重定向是两次不同请求
  • 重定向不能保存数据在request域中,转发可以
  • 转发地址栏没有变化;重定向地址栏有变化
  • 转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成

加载资源文件路径

"."代表tomcat/bin目录,不能再web项目中使用

Servlet线程

  1. 单例多线程
    tomcat实例化一个servlet类,为每个用户开启一个线程处理请求
  2. 线程安全问题
    *多个用户访问Servlet的共享数据(成员变量),可能会产生线程安全问题
    解决:使用共享数据时加锁
  3. 实现单线程模式
<%@ page isThreadSafe=”false”%> 	默认值为true 

https://blog.csdn.net/john2522/article/details/7467983

Servlet开发步骤

  1. 编写Servlet类
    继承HttpServlet类,重写doGet() doPost()方法
  2. 编译servlet字节码
    存放在tomcat的一个web应用中的WEB-INF/classes目录下
  3. 配置一个servlet web.xml中
	<servlet>
		<!-- servlet的内部名称 ,可以自定义-->
		<servlet-name>HelloServlet</servlet-name>
		<!-- servlet类名: 包名+简单类名-->
		<servlet-class>gz.itcast.d_servlet.HelloServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<!-- servlet的内部名称,和上面的名称保持一致!!!-->
		<servlet-name>HelloServlet</servlet-name>
		<!-- servlet的访问名称: /名称 -->
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>
  1. 访问
    启动tomcat,访问http://localhost:8080/myweb/hello

servlet生命周期

  1. 加载Servlet
    当Tomcat第一次访问Servlet的时候,Tomcat会负责创建Servlet的实例【构造器】
  2. 初始化
    当Servlet被实例化后,Tomcat会调用【init()】方法初始化这个对象
  3. 处理服务
    当浏览器访问Servlet的时候,Servlet 会调用【service()】方法处理请求
  4. 销毁
    当Tomcat关闭时或者检测到Servlet要从Tomcat删除的时候会自动调用【destroy()】方法,让该实例释放掉所占的资源。一个Servlet如果长时间不被使用的话,也会被Tomcat自动销毁

简单总结
只要访问Servlet,service()就会被调用。
init()只有第一次访问Servlet的时候才会被调用。
destroy()只有在Tomcat关闭的时候才会被调用。

servlet的自动加载

默认是第一次访问时加载,改变servlet的加载时机可以提前到加载web应用时创建
配置servlet时添加<load-on-startup>1</load-on-startup>,tomcat启动时会加载此类,越小优先级越高

HttpServletRequest

请求行

request.getMethod();   请求方式
request.getRequetURI()   / request.getRequetURL()   请求资源
request.getProtocol()   请求http协议版本

请求头

request.getHeader("名称")  	根据请求头获取请求值
request.getHeaderNames()    	获取所有的请求头名称
**实体内容**
```java
request.getInputStream()   	获取实体内容数据

获取请求参数

request.getParamerter(参数名):	获取一个值的参数
request.getParamerterValue(参数名):获取多个值的同名参数,如select元素值
request.getParamerterNames():	获取所有参数名称列表

设置请求参数的编码格式

request.setCharacterEncoding("utf-8");	//只对POST方式提交的数据有效

HttpServletResponse

响应行

response.setStatus(404)  设置状态码

响应头

response.setHeader("name","value")  设置响应头

实体内容

response.getWriter().writer();   响应二进制数据
response.getOutputStream().writer()  响应字符数据

设置响应类型和内容编码 如果未指定字符集,则将使用ISO-8859-1
response.setContentType("text/html;charset=UTF-8")

以流的方式响应

response.setContentType("text/html; charset=UTF-8");
PrintWriter pw = response.getWriter();
pw.close();

重定向
response.sendRedirect("www.baidu.com");
转发
request.getRequestDispatcher("/student_list").forward(request, response);

ServletConfig对象

初始化参数配置

<servlet>
<servlet-name/>
<servlet-class/>
<init-param>
	<param-name>name</param-name>
	<param-value>xyg</param-value>
</init-param>
</servlet>

创建
tomcat启动web应用封装这些配置信息到servletconfig对象中,调用init()时传入servletconfig对象
获取
this.getServletConfig().getInitParameter("name");//获取配置信息

ServletContext对象

servlet的上下文对象,表示当前web应用环境,一个web应用中只有一个servletContext对象

获取
this.getServletConfig().getServletContext();//通过配置对象获取上下文对象
方法

servletContext.getContextPath();	//获取部署的项目名
servletContext.getInitParameter("name");	//获取web应用初始化参数(全局)
servletContext.getRequestDispatcher("/get").forward(request,response);	//转发

域对象

用于在不同动态资源直接共享数据
分类
| HttpServletRequest | 一次请求 |
| ---- | ---- | ---- |
| ServletContext | 全局 |
|HttpSession | 一次会话|
|PageContext | 当前页面|

Servlet 相关

原文:https://www.cnblogs.com/xiongyungang/p/13934572.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!