博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SERVLET JSP篇-03 Servlet特性
阅读量:1887 次
发布时间:2019-04-26

本文共 3894 字,大约阅读时间需要 12 分钟。

1,servlet如何输出中文?
(1)为什么会有乱码
out.println输出中文时,默认会使用"iso-8859-1"
去编码。
(2)如何解决
response.setContentType(
"text/html;charset=utf-8");
2,常见的错误及处理方式
(1)404
1)错误原因:
a,应用没有部署。
b,请求地址写错。
按照http://ip:port/appname/url-pattern
c,<servlet-name>不一致。
(2)500
1)错误原因
a,程序运行时出错。
b,<servlet-class>写错。
(3)405
1)错误原因
服务器找不到处理方法。
3,表单包含了中文参数值,如何处理?
(1)为什么会有乱码?
当表单提交时,浏览器会检查请求参数值,如果
是中文,会按照打开该表单所在的页面时的字符集来
编码(比如,按照"utf-8"来编码)。
服务器默认情况下,会使用"iso-8859-1"来解码。
(2)如何解决?
step1,保证浏览器使用指定的字符集来打开
页面。
<meta http-equiv="content-type" 
content="text/html;charset=utf-8">
step2,服务器端使用对应的字符集去解码。
方式一:
request.setCharacterEncoding("utf-8");
注意:只针对post请求有效。
方式二:
new String(
str.getBytes("iso-8859-1"),"utf-8");
4,如何获得请求参数值?
(1)String request.getParameter(String paramName);
注意:
a,paramName必须与实际传递的参数名一致,否则
会获得null。
b,有可能获得空字符串。
(2)String[] request.getParameterValues(String paramName);
对于多选框和单选框,如果不选择任何选项,
会获得null值。
5,servlet如何使用jdbc来访问数据库
step1,将jdbc驱动拷贝到WEB-INF\lib下。
注:
服务器一般都提供了自己的类加载器(比如tomcat
就提供了自己的类加载器),这些类加载器会从
WEB-INF\lib下查找字节码文件。
step2,在servlet类里面,使用jdbc 提供的
方法来访问数据库,要注意异常的处理。
6,mysql数据库的简单使用
(1)登录mysql
mysql -uroot;  root用户登录mysql数据库管理系统
(2)查看当前有哪些数据库
show databases;
(3)创建一个新的数据库(同时设置字符集为utf-8)
create database jsd1407
default character set utf8;
(4)使用指定的数据库
use jsd1407;
(5)查看当前数据库有哪些表
show tables;
(6)建表
create table emp(
id int primary key auto_increment,
name varchar(50),
salary double,
age int
);
insert into emp(name,salary,age) 
values('Sally',20000,32);
auto_increment: 自增长列,当插入记录时,
数据库自动为该列赋一个自动增长的值。

7,重定向

(1)什么是重定向?

服务器通知浏览器向一个新的地址发送请求。

一般服务器可以发送一个302状态码和一个Location

消息头(值是一个地址,一般称之为重定向地址),

浏览器收到之后,会立即向重定向地址发请求。

(2)如何重定向?

response.sendRedirect(String url);

(3)重定向之前,服务器会先清空response对象上

缓存的数据。

(4)特点

a,重定向之后,浏览器地址栏的地址会变。

b,重定向地址是任意的。

8,servlet容器如何处理请求资源路径

比如,在浏览器地址栏输入

http://ip:port/web03_2/abc.html

浏览器会将"/web03_2/abc.html"作为请求资源

路径发送给servlet容器(tomcat)。

step1,依据应用名找到应用所在的文件夹。

step2,容器会先假设访问的是一个servlet,

会从web.xml文件当中查找对应的servlet来处理。

(1)精确匹配

<url-pattern>/abc.html</url-pattern>

(2)通配符匹配

使用"*"来匹配零个或者多个字符。

比如:

<url-pattern>/*</url-pattern>

(3)后缀匹配

使用"*."开头,后接多个字符。

比如:

<url-pattern>*.do</url-pattern>

以上配置为匹配所有以".do"结尾的请求。

step3,如果以上均不匹配,会查找文件。找到了就

返回,找不到,会返回404。

9,让一个servlet处理多种请求

step1,使用后缀匹配

<url-pattern>*.do</url-pattern>

step2,分析请求资源路径,依据分析结果,调用

不同的分支来处理。

//获得请求资源路径

String request.getRequestURI();

10.

mysql数据库提供的jdbc驱动,

有一些不能够正确进行编码和解码。

jdbc驱动在插入数据时,需要编码(

unicode --> 某种本地字符集,比如gbk,utf-8),

反过来,查询数据时,需要解码(

gbk,utf-8 --->unicode)。

有些mysql的jdbc驱动默认情况下,会使用

"iso-8859-1"来编码和解码,所以,通常

jdbc:mysql://localhost:3306/jsd1407?

useUnicode=true&characterEncoding=utf8;

这两个选项参数的作用是告诉jdbc驱动使用

"utf-8"来编码和解码。

11,servlet的生命周期

(1)什么是servlet的生命周期?

servlet容器如何创建servlet对象,如何对其

进行初始化,调用其方法来处理请求,以及如何

销毁servlet对象的整个过程。

(2)生命周期的四个阶段

1)实例化

a,什么是实例化?

容器创建servlet对象。

b,什么时候实例化?

情况1:容器收到请求之后,才会创建。

注:容器在默认情况下,对于某个servlet,

只会创建一个实例。

情况2: 容器启动之后,立即创建。

<load-on-startup>大于等于0的整数</load-on-startup>

值越小,容器越先创建。

2)初始化

a,什么初始化

容器在创建好servlet对象之后,会立即调用

该对象的init方法。

b,如何实现自己的初始化处理逻辑

b1,GenericServlet提供了init方法的基本实现:

将容器传递过来的ServletConfig对象保存下

来,并且提供了一个getServletConfig方法来

获得该对象。

b2,只要override init()方法即可。

c, 访问servlet的初始化参数

step1,配置初始化参数

<init-param>

  <param-name>company</param-name>

  <param-value>北京达内科技</param-value>

  </init-param>

  step2,

  String ServletConfig.getInitParameter(

  "company");

  d,init方法只会执行一次。

3)就绪

a,什么是就绪

容器收到请求之后,会调用servlet对象的

service方法。

b,HttpServlet的service方法实现过程:

依据请求方式调用相应的doxxx方法(比如,

请求方式为get,则调用doGet方法,

这些doxxx方法并没有完整实现,需要开发

人员去override)。

注:

选择1(建议):override doGet/doPost

选择2: override service

4)销毁

a,什么是销毁

容器将servlet对象从容器当中删除掉。

容器在删除servlet对象之前,会先调用该

对象的destroy方法。

b,destroy方法用于释放资源,该方法只会

执行一次。

(3)生命周期相关的几个类与接口

a,Servlet接口

init(ServletConfig config);

service(ServletRequest req,

ServletResponse res);

destroy();

b,GenericServlet抽象类

实现了Servlet接口中的部分方法(init,destroy)

c,HttpServlet抽象类

继承了GenericeServlet,实现了service方法。

12.config与context
当需要给servlet预置参数时使用这样的对象,若参数只给一个servlet使用,用config;若参数给多个servlet共用,用context。

转载地址:http://jgwdf.baihongyu.com/

你可能感兴趣的文章
缺货涨价很久的MCU的国产和国外厂家汇总!(80家)
查看>>
华为重磅反击,鸿蒙来了!
查看>>
常用电子接口大全,遇到不认识的,就翻出来对照辨认!
查看>>
芯片IC附近为啥要放0.1uF的电容?
查看>>
电赛 | 19年全国一等奖,北航学子回忆录。
查看>>
电赛 | 19年全国一等奖,北航学子回忆录(上)
查看>>
电赛 | 19年全国一等奖,北航学子回忆录(下)
查看>>
突破!台积电1nm芯片,有了新进展。
查看>>
一文读懂全系列树莓派!
查看>>
自制一个害羞的口罩,见人就闭嘴,戴着可以喝奶茶
查看>>
聊聊我是如何编程入门的
查看>>
J-Link该如何升级固件?
查看>>
485通信自动收发电路,历史上最详细的解释
查看>>
一位头发发白的神人教你怎么写程序,运维,买电脑,写文章,平面设计!
查看>>
「第三篇」全国电子设计竞赛,这些你必须知道的比赛细节,文末附上近十年电赛题目下载...
查看>>
5G小科普(漫画版,So easy!)
查看>>
「第四篇」电赛控制题可以准备一些什么?
查看>>
树莓派翻车了
查看>>
这位电子工程师,你不能错过。
查看>>
干货分享 JVM 之第 3 篇 —— Java 内存结构相关
查看>>