servlet程序开发

1 Servlet介绍

服务端小程序,是使用Java语言编写的服务器端程序,可以向JSP一样,生成动态的WEB页面,Servlet主要运行在服务器端,并且服务器调用执行,是一种按照Servlet标准开发的类

  • 请求过程图

image

  • 要想在程序中实现Servlet必须继承HttpServlet这个抽象类

2 第一个servlet

一个类要想做为Servlet必须要经过编译和配置


public class Demo01 extends HttpServlet {
    // 重写父类的方法
	public void doGet(HttpServletRequest req,HttpServletResponse response){
		response.setCharacterEncoding("gbk");
		PrintWriter printWriter = null;
		try {
			printWriter = response.getWriter();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		printWriter.write("我是一个servlet程序");
	}
	
	
}

配置文件,需要在web.xml中配置servlet的映射路径

<servlet>
  	<servlet-name>demo2</servlet-name>// servlet名称
  	<servlet-class>com.zhao.Demo01</servlet-class>// 编译后的类名
  </servlet>
  <servlet-mapping>
  	<servlet-name>demo2</servlet-name>
  	<url-pattern>/demo02</url-pattern>// 映射路径
  </servlet-mapping>

3 Servlet和表单

  • 提交路径的问题
  • post get处理方式不同
public class Demo01 extends HttpServlet {

	public void doGet(HttpServletRequest req,HttpServletResponse response){
		response.setCharacterEncoding("gbk");
		PrintWriter printWriter = null;
		try {
			printWriter = response.getWriter();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		printWriter.write("姓名是:");
		String username = req.getParameter("userName");
		printWriter.write(username);
	}
}

web.xml配置映射路径

<servlet>
  	<servlet-name>demo2</servlet-name>
  	<servlet-class>com.zhao.Demo01</servlet-class>
  </servlet>
  	
  <servlet-mapping>
  	<servlet-name>demo2</servlet-name>
  	<url-pattern>/1demo02</url-pattern>
  </servlet-mapping>
  
 JSP
 
 <form action="1demo02" method="post">
    	<input type="text" name="userName" value=""/>
    	<input type="submit" name="" value="提交"/>
    </form>
  

4 Servlet生命周期

Servlet的生命周期就是程序的存在周期,Servlet手容器管理,所以容器决定其生命周期

image



public class Demo01 extends HttpServlet {
	public void init(){
		System.out.println("初始化。。。。。。");
	}	
	public void doGet(HttpServletRequest req,HttpServletResponse response){
		response.setCharacterEncoding("gbk");
		PrintWriter printWriter = null;
		try {
			printWriter = response.getWriter();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		printWriter.write("姓名是:");
		String username = req.getParameter("userName");
		printWriter.write(username);
	}
	
	public void doPost(HttpServletRequest req,HttpServletResponse resp){
		resp.setCharacterEncoding("gbk");
		this.doGet(req, resp);
	}
	
	public void destory(){
		System.out.println("销毁。。。。。");
	}
	
}

5 取得初始化配置信息

  • init() 这个方法里面可以传入一个ServletConfig对象,此对象可以接受初始化参数
  • 所有的初始化参数都是在web.xml里面配置
  • 如果同时存在init(),和init(ServletConfig config) 只有第二个才会被调用
public void init(ServletConfig config){
		System.out.println("获取config信息");  
		String string = config.getInitParameter("ref");
		System.out.println(string);
	}
 <servlet>
  	<servlet-name>demo2</servlet-name>
  	<servlet-class>com.zhao.Demo01</servlet-class>
  	<init-param>
  		<param-name>ref</param-name>
  		<param-value>zhaodi</param-value>
  	</init-param>
  </servlet>

6 取得其余的内置对象Session,application

  • servelt本身只提供request,response对象,如果想获取Session对象只可以通过request对象获取,request.getSession();

session的实现原理

服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务

HttpSession session = req.getSession();// 这个时候已经把sessionID存入客户端Cookie里面了
  • 获取application对象
ServletContext application = this.getServletContext();

7 servlet跳转

服务端和客户端跳转的区别

  • 服务端:地址栏不发生改变,可以传递request范围的属性,属于无条件跳转,只要之心感到了就立马跳转
  • 客户端:地址栏发生改变,无法传递request范围属性,实在所有的操作都执行完毕之后才进行跳转的,语法为response.sendRedirect()
response.sendRedirect("index.jsp");// 客户端跳转

req.getRequestDispatcher("index.jsp").forward(req, response);// 服务端跳转

8 MVC设计模式应用

什么事MVC设计模式

应用

一个小小的程序员
原文地址:https://www.cnblogs.com/zhaod/p/8667147.html