javaweb-servlet/jsp全解

版权声明:fromZjy QQ1045152332 https://blog.csdn.net/qq_36762677/article/details/84198090
什么是sevlet?
servlet是和平台无关的服务器端组件,它运行在 servlet容器
servlet容器负责sevlet和客户端通信以及调用servlet内的方法
收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页
sevlet和客户通信才用"请求/相应"模式
sevlet生命周期

第一次请求sevlet时,创建sevlet实例,调用servlet 构造方法(单实例的)
[只被调用一次]Servlet 通过调用 init () 方法进行初始化。
Servlet 调用 service() 方法来处理客户端的请求。—>访问时不同线程多次调用service()
[只被调用一次]Servlet 通过调用 destroy() 方法终止(结束)。
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

额外1

servlet配置在web.xml中,下面这个标签可以指定servlet被创建的时机,若为负数,
则在第一次请求时创建,若为0或正数,则在当前web应用被servlet容器加载时创建实例,越小越先加载。

<load-on-statup>0</load-on-startup>

额外2

同一个servlet可以映射到多个url上

ServletConfig对象
public void init(ServletConfig servletConfig) throws Exception{
	this.servletConfig = servletConfig;
}

ServletConfig:封装了servlet配置信息,并可以获得servletContext对象
web应用的初始化参数在web.xml中的配置

<context-param>
	<param-param>driver</param-param>
	<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>

servlet的初始化参数在web.xml中的配置

<servlet>
	<init-param>user</init-param>
	<init-value>root</init-value>
<\servlet>
//获取servlet的初始化参数
String name = servletConfig.getInitParameter("user");
//获取sevlet名字
servletConfig.getServletName();
//获取上下文,代表当前web应用的对象
ServletContext servletContext = servletConfig.getServletContext();
String driver = servletContext getInitParameter("driver:);
//servletContext还有其他功能
HttpRequest与HttpResponse

HttpServletRequest

	protected void doGet(HttpServletRequest request, HttpServletResponse response){
		System.out.println("请求方法:"+request.getMethod());
		System.out.println("URI:"+request.getRequestURI());
		System.out.println("URL:"+request.getRequestURL());
		String username=request.getParameter("username");
		//获取所有请求头信息
		Enumeration<String> headerNames = request.getHeaderNames();
		while (headerNames.hasMoreElements()) {
			String key = (String) headerNames.nextElement();
			String value = request.getHeader(key);
			System.out.println(key+"  "+value);
		}
	}

HttpServletResponse常见设置

//父接口ServletResponse 设置响应信息
response.setContentType("application/msword");
//给浏览器返回
PrintWriter out = response.getWriter();
out.println("hello");
//=================HttpServletResponse======================
//控制浏览器编码格式
response.setHeader("content-type", "text/html;charset=UTF-8")

//设置数据编码格式
response.setCharacterEncoding("UTF-8");
//重定向
response.sendRedirect();

文件上传和下载
https://www.cnblogs.com/xdp-gacl/p/4200090.html

HttpServlet与GenericServlet区别

1.GenericServlet

1). 是一个 Serlvet. 是 Servlet 接口和 ServletConfig 接口的实现类. 但是一个抽象类. 其中的 service 方法为抽象方法
2). 如果新建的 Servlet 程序直接继承 GenericSerlvet 会使开发更简洁.
3). 具体实现:
①. 在 GenericServlet 中声明了一个 SerlvetConfig 类型的成员变量, 在 init(ServletConfig) 方法中对其进行了初始化
②. 利用 servletConfig 成员变量的方法实现了 ServletConfig 接口的方法
③. 还定义了一个 init() 方法, 在 init(SerlvetConfig) 方法中对其进行调用, 子类可以直接覆盖 init() 在其中实现对 Servlet 的初始化.
④. 不建议直接覆盖 init(ServletConfig), 因为如果忘记编写 super.init(config); 而还是用了 SerlvetConfig 接口的方法,则会出现空指针异常.
⑤. 新建的 init(){} 并非 Serlvet 的生命周期方法. 而 init(ServletConfig) 是生命周期相关的方法.

2.HttpServlet

1). 是一个 Servlet, 继承自 GenericServlet. 针对于 HTTP 协议所定制.
2). 在 service() 方法中直接把 ServletReuqest 和 ServletResponse 转为 HttpServletRequest 和 HttpServletResponse.并调用了重载的在 service() 根据请求方式request.getMethod()有创建了
doXxx() 方法(xxx 为具体的请求方式, 比如 doGet, doPost)
3). 实际开发中, 直接继承 HttpServlet, 并根据请求方式复写 doXxx() 方法即可.
4). 好处: 直接由针对性的覆盖 doXxx() 方法; 直接使用 HttpServletRequest 和 HttpServletResponse, 不再需要强转.

JSP-java server page

简化servlet编写,将java与html混合,采用java动态显示内容,本质上是servlet
JSP: http://www.runoob.com/jsp/jsp-tutorial.html

域对象的属性操作

<%
	//跳转之后就不存在
	pageContext.setAttribute();//作用范围:当前页面(PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问)
	request.setAttribute();//作用范围:同一个请求
	//跳转之后仍然存在
	session.setAttribute();//作用范围:一次回话(浏览器打开到关闭)
	application.setAttribute();//作用范围:web应用,在其他servlet也能获取到(	ServletContext)
%>

JSP中getParameter与getAttribute有何区别?

——说实话,这个问题当初我也困惑很久,我也知道怎么用,可是到底有什么区别,我也不是很清楚,后来找了很多资料才明白。昨天又有一位朋友问我这个问题,想我当初同样也困惑过,于是我就把这个问题贴出来,让同样困惑的朋友解惑。
——getParameter得到的都是String类型的。或者是http://a.jsp?id=123中的123,或者是某个表单提交过去的数据。
——getAttribute则可以是对象。
——getParameter()是获取POST/GET传递的参数值;
——getAttribute()是获取对象容器中的数据值;
——getParameter:用于客户端重定向时,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据用。
——getAttribute:用于服务器端重定向时,即在sevlet中使用了forward函数,或struts中使用了mapping.findForward。getAttribute只能收到程序用setAttribute传过来的值。
——getParameter()是获取POST/GET传递的参数值;
——getAttribute()是获取SESSION的值;

请求的转发和重定向

1.转发

RequestDispatcher接口
用forward实现请求转发

String path = "/otherServlet";
RequestDispatcher requestDispatcher = request.getRequestDispatcher(path);
requestDispatcher.forward(request,response);

2.重定向

用sendRedirect方法实现请求重定向

String location = "/xx.jsp";
response.sendRedirect(request.getContextPath()+location);

区别☆

  • redirect请求重定向:客户端行为,本质上为2次请求,地址栏改变,前一次请求对象消失。
    举例:你去银行办事(forward.jsp),结果告诉你少带了东西,你得先去公安局办(index.html)临时身份证,这时你就会走出银行,自己前往公安局,地址栏变为index.html.
  • forward请求转发:服务器行为,1次请求,地址栏不变,request域不丢失。
    举例:你把钱包落在出租车上,你去警察局(forward.jsp)报案,警察局说钱包落在某某公司的出租车上(index.html),这时你不用亲自去找某某公司的出租车,警察局让出租车自己给你送来,你只要在警察局等就行。所以地址栏不变,依然为forward.jsp
  • 只能转发给当前web应用,可以重定向到任何资源,"/"转发时表示当前web应用,重定向时表示当前web站点(http:1.2.3.4:8080/)

猜你喜欢

转载自blog.csdn.net/qq_36762677/article/details/84198090