servlet

java servlet

1.可以通过访问Tomcat来找到文件资源
.html文件
2.可以通过访问Tomcat来找到操作资源
java类-----控制层Servlet

​ V:View 视图层 HTML+CSS+JS
​ C:Controller 控制层 HttpServlet
​ M:Model 模型层
​ 数据处理Service
​ 数据读写Dao
​ 数据存储domain
​ DB:DataBase 数据库MySQL
在这里插入图片描述

如何在Tomcat中自己编写一个Java类(控制层Servlet)

  1. 自己定义一个类 通常叫XXXController (Servlet Action)
  2. 继承Tomcat提供的一个规则HttpServlet
  3. 重写一个方法service 有参数 没有返回值 (doPost doGet)
  4. 方法内部有两个参数HttpServletRequest HttpServletResponse
  5. 抛出两个异常 ServletException IOException
  6. 方法是没有返回值 void类型
  7. 需要告知Tomcat有一个自己定义类需要帮忙管理 web文件夹 WEB-INF文件夹
    需要配置web.xml 请求名字----真实类全名 映射关系
   <servlet>
		<servlet-name>用来配对的名字</servlet-name>
		<servlet-class>真实类全名</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>用来配对的名字</servlet-name>
		<url-pattern>/请求名字</url-pattern>
    </servlet-mapping>
  1. 浏览器发送请求
     访问操作资源
     404 没有找到资源 检查xml文件 检查Controller类
     405 没有找到执行方法 检查Controller类中的方法重写

servlet中文问题

get请求的处理方式

发送请求的时候 请求名字 携带的参数信息都在协议头中
浏览器解析的时候
如果Tomcat是老版本 get请求需要如下处理

           String aname = request.getParameter("aname");
			byte[] value = aname.getBytes("ISO-8859-1");
			String newString = new String(value,"UTF-8");

如果Tomcat是新版本 可以不处理

post请求的处理方式

发送请求的时候 请求名字 协议头中
请求的参数信息是在协议体中(协议体只能传递字节)
浏览器解析的时候
控制层接受的时候已经组合成一个String字符串
发送请求的时候按照UTF-8形式 拆开字节
接受的时候request对象直接给我组合(按照平台默认的字符集)成一个String
在request组合之前告知 按照哪一种字符集进行组合

     request.setCharacterEncoding("UTF-8");

在这里插入图片描述

Servlet类的管理机制

1. Servlet类的对象是单例设计模式(对象是唯一的)

采用生命周期托管的方式实现的
 Tomcat底层有一个类似ServletController的类管理着我们的对象(servlet对象)

2. 单例对象的产生

立即加载(Tomcat启动的时候 底层集合内就存在对象啦)
 延迟加载(Tomcat启动的时候没有对象产生 什么时候发送请求需要用到这个对象 才会创建)
   Tomcat启动的时候 web.xml文件如果写错了 服务器启动会报错
   证明Tomcat在启动的时候 就读取了我的web.xml配置文件
   web.xml文件配置的目的 存储请求名字—真实资源类名的对应关系

3. Servlet对象的创建和销毁---->Servlet对象的生命周期问题

Tomcat为了更好的管理对象的产生和销毁
   提供了三个方法---->标识Servlet对象的生命周期
   init(); service(); destroy(); 重新部署项目

4. 默认效果是一个延迟加载的机制

是否可以改变成立即加载的方式呢?
  加载Servlet对象的时候是否能携带一些信息?
  web.xml文件(如果配置错误 启动Tomcat时候就产生问题)
  说明Tomcat启动的时候读取了我们的配置文件---->请求 真实类名
  启动时候可能会有很多的Servlet对象 如果是立即加载的话 内存压力很大

5. 如果想要改变对象的加载 从延迟的方式变成立即的方式(Tomcat启动的时候就创建对象)

在web.xml文件中添加一个配置就可以了

		<servlet>
			<servlet-name></servlet-name>
			<servlet-class></servlet-class>
			0开始的整数 整数越小加载越早
			<load-on-startup>整数0</load-on-startup> 
		</servlet>
		<servlet-mapping>
		</servlet-mapping>

6. 在Servlet对象创建时,可以通过配置携带一些信息,就可以让Servlet对象读取到

	<servlet>
			<servlet-name><>
			<servlet-class><>
			<init-param>
				<param-name>key1</param-name>
            	<param-value>value1</param-value>
			</init-param>
			<load-on-startup>整数0</load-on-startup>
		</servlet>
		<servlet-mapping>
		</servlet-mapping>

在Servlet对象的init方法中进行读取 通常利用带ServletConfig参数的方法

String value = config.getInitParameter("key");      //某一个key对应的value
Enumeration = config.getInitParameterNames();  //获取全部的key
String = config.getServletName();                        //获取当前Servlet类名
ServletContext application = config.getServletContext();//获取全局上下文对象

7. Servlet继承的关系???

自己写一个类—>继承抽象类HttpServlet
  HttpServlet—>继承抽象类GenricServlet
  GenricServlet–>实现了三个接口 Servlet ServletConfig Serializable
  Servlet接口含有5个方法
   init(ServletConfig config);
   service(ServletRequest,ServletResponse);
   destroy();
   ServletConfig = getServletConfig();
   String = getServletInfo();
  ServletConfig接口含有4个方法
   String value = config.getInitParameter(“key”);
   Enumeration = config.getInitParameterNames();
   String = config.getServletName();
   ServletContext application = config.getServletContext();
  GenricServlet抽象类体现出了缺省适配器模式
   将上述两个接口中的8个方法全部添加了实现
   只留下一个service抽象方法 需要用户自己填写逻辑
   还添加了两个独有的方法 init(){} 无参数 log(){}
  HttpServlet体现了对于协议的具体化
   将父类service方法实现了
   目的是将两个跨协议的参数强制转化成HTTP协议
  自己添加了一个protected修饰的service方法(参数HttpServletRequest)
   独有service方法的目的是通过请求发送的方式get/post
   找寻对应具体的执行方法doGet doPost

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值