Servlet配置以及其他知识点笔记文档格式.docx
- 文档编号:16895762
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:18
- 大小:88.64KB
Servlet配置以及其他知识点笔记文档格式.docx
《Servlet配置以及其他知识点笔记文档格式.docx》由会员分享,可在线阅读,更多相关《Servlet配置以及其他知识点笔记文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
◆使用*进行映射
DTD*0到多个Xpath//*表示所有元素
在servlet中*匹配的任意个字符
Mapping2<
/*<
发现一个问题:
如果用户输入的路径是http:
//localhost:
8080/day05/map2Mapping1Mapping2
原则”如果多个servlet都匹配用户的请求资源,那么tomcat服务器会找最像的那个进行响应!
”
◆*.do映射
*.do<
如果要映射为*.do那么就不要以/开头,而且*.do的优先级最低。
思考:
如果以后上网的时候看到用户的请求资源是.html结尾,那么是否就是静态页面?
因为servlet可以映射为任何的路径,那么因此你看到的访问路径有可能是假的。
◆默认映射
对于用户而言很有可能访问一些网站中不存在的资源,那么如果直接使用服务器中默认的servlet进行处理,那么错误对于用户是不友好的,所有任何一个开发好的网站,应该都具备处理用户错误请求的默认的servlet。
MyDefault<
/<
◆自启动servlet
一个网站在别人访问之前应该提前将网站的数据建立好。
AutoStart<
cn.sve.servlets.AutoStart<
load-on-startup>
1<
/load-on-startup>
load-on-startup的值必须是一个正整数,值越小那么越先启动。
通常在实际的开发中我们将数据库的创建、表的创建以及数据的添加写在一个自启动的servlet中,进而提高用户的体验。
Servlet线程安全性
问题:
使用以下的代码演示servlet的线程安全问题?
publicclassMultiThreadQuestionextendsHttpServlet{
publicintcount=0;
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//1.验证服务器是以线程的方式处理用户请求的
try{
this.count++;
Thread.sleep(5*1000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
response.getOutputStream().write(("
线程名:
"
+Thread.currentThread().getName()+"
count="
+this.count).getBytes());
}
}
同时访问以上的代码发现三次同时出现3,这就是线程的并发访问的问题。
解决方案就是:
同步
给访问共享资源的代码加锁。
synchronized(this){
try{
this.count++;
Thread.sleep(5*1000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
response.getOutputStream().write(("
总结:
1.如果直接使用同步关键字,那么会导致servlet的运行效率严重的降低。
2.尽量避免使用servlet的成员变量。
3.如果避免不了那么我们就需要使用线程安全的成员变量。
ArrayListVectorHashSet
如果需要不是线程安全的集合可以使用Collections进行线程安全的转换
4.ServletContext、HttpSession需要使用的时候一定要使用同步。
5.在servlet中最好使用局部变量。
ServletConfig接口
ServletConfig是一个由Tomcat服务器在初始化Servlet的时候创建并传递进来的一个对象。
该对象主要描述的时候一个servlet的配置信息。
如:
以上配置就是一个servlet的配置信息,如果开发者需要获取其中的数据,那么tomcat已经创建好的ServletConfig接口对象来方面开发者获取信息。
举例1:
获取指定servlet的配置的名字。
publicclassDemo1extendsHttpServlet{
privateServletConfigconfig=null;
//获取servlet的配置名
Stringname=this.config.getServletName();
response.getOutputStream().write(name.getBytes());
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
doGet(request,response);
//重写init方法
@Override
publicvoidinit(ServletConfigconfig)throwsServletException{
super.init(config);
this.config=config;
举例2:
获取servlet的配置参数。
在实际的编程过程中需要将所有可变的数据封装到配置文件中去,这样便于软件的后期的维护。
Android。
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
//获取配置参数
Stringip=this.config.getInitParameter("
ip"
);
Stringdbtype=this.config.getInitParameter("
dbtype"
response.getOutputStream().write("
br/>
.getBytes());
response.getOutputStream().write((ip+"
"
+dbtype).getBytes());
//使用循环获取所有的配置参数
Enumeration<
String>
names=this.config.getInitParameterNames();
while(names.hasMoreElements()){
Stringini_name=names.nextElement();
Stringini_value=this.config.getInitParameter(ini_name);
response.getOutputStream().write((ini_name+"
="
+ini_value+"
).getBytes());
发现tomcat创建并传递过来的servletconfig对象接收比较繁琐。
//获取servletconfig对象
ServletConfigconfig=this.getServletConfig();
System.out.println(this.config==config);
为了方便开发者获取servletconfig对象,那么HttpServlet直接提供了getServletConfig(),
两种方式获取的对象是同一个对象。
ServletContext接口
ServletContext接口对象主要实现的是servlet之间的通信。
该对象可以和web服务器进行通信。
转发请求。
ServletContext接口是对网站的抽象描述。
一个ServletContext代表一个web应用(网站)。
该对象是由Tomcat创建出来连同ServletConfig对象一并通过初始化方法传递过来的。
◆实现servlet的通信
1.放数据
//获取ServletContext对象
ServletContextcontext1=this.getServletConfig().getServletContext();
ServletContextcontext2=this.getServletContext();
System.out.println(context1==context2);
//true
//主要作用之一是实现servler之间的数据通信
context1.setAttribute("
news_title"
"
北京的灰霾天气"
2.取数据
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
Stringname=(String)this.getServletContext().getAttribute("
◆实现服务器通信
//和tomcat进行通信获取MIME类型
ServletContextcontext=this.getServletContext();
Stringtype=context.getMimeType("
/zs.doc"
System.out.println(type);
◆获取网站资源(重点)
//获取网站对象
ServletContextcontext=this.getServletContext();
//获取网站中的静态资源
InputStreamin=context.getResourceAsStream("
/123.bmp"
//获取输出流
FileOutputStreamout=newFileOutputStream(newFile("
d:
));
//边读边写
byte[]bs=newbyte[1024];
intlen=0;
while((len=in.read(bs))!
=-1){
out.write(bs,0,len);
out.flush();
//释放资源
in.close();
out.close();
◆请求转发
//转发
System.out.println("
不好意思没钱!
找老汤去...."
context.getRequestDispatcher("
/lt"
).forward(request,response);
请求转发:
请求转发是服务器自己做的事情,那么在客户端是展现不出来的,因此浏览器的地址栏是不发生变化的。
多学一招:
如何修改servlet的名字和网站的名字?
Servlet的名字:
不要只是修改servlet的名字还需要修改web.xml中配置的名字。
网站的名字:
直接改掉名字之后需要右键属性MyEclispeWeb继续修改。
◆封装请求参数
一般的注册页面中用户的请求数据比较多,如果servlet直接获取了这些数据,但是servlet本身不能处理这些数据需要传递给底层的业务层代码进行处理。
如果一个一个传递那么太繁琐。
因此获取到用户的请求参数后需要适当进行数据的封转以便传递给下一层处理数据。
JavaBeanBeanUtils
//获取所有请求的参数的Map对象
Map<
String,Object>
map=request.getParameterMap();
//获取set集合
Set<
Map.Entry<
String,Object>
>
set=map.entrySet();
//获取迭代器对象
Iterator<
it=set.iterator();
//创建一个javabean对象
Useruser=newUser();
//循环
while(it.hasNext()){
Map.Entry<
entry=it.next();
Stringname=entry.getKey();
Objectvalue=entry.getValue();
BeanUtils.setProperty(user,name,value);
}catch(Exceptione){
System.out.println("
封装失败!
//输出user对象的数据
System.out.println(user);
◆乱码处理
1.GET请求
GET请求使用直接通过地址栏回车或超链接的单击以及form表单中method的get数据提交过来的请求,该请求和传递用户参数的方式是?
name=jack&
age=36因此可见get方式的请求参数有限(小于1K)。
而且传递的数据直接在地址栏可见。
XX的搜索关键字。
1.1编写一个提交get数据的一个注册表单
formaction="
/day07/regist"
method="
get"
tablealign="
center"
border="
1"
tr>
td>
用户:
/td>
inputtype="
text"
name="
uname"
/>
/tr>
地址:
address"
tralign="
tdcolspan="
2"
submit"
value="
注册"
reset"
重置"
/table>
/form>
1.2编写一个RegistServlet处理用户的Get请求数据
//处理响应数据的格式和编码
response.setCharacterEncoding("
utf-8"
response.setContentType("
text/html;
charset=utf-8"
//获取字符输出流对象
PrintWriterout=response.getWriter();
//获取请求参数
Stringname=request.getParameter("
Stringaddress=request.getParameter("
//输出数据
out.println("
name="
+name);
address="
+address);
运行结果发现输入中文提交后显示结果为乱码:
1.3分析乱码的原因
1.4使用代码解决乱码问题
//获取ISO8859-1的原始数据
byte[]bs
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Servlet 配置 以及 其他 知识点 笔记
![提示](https://static.bdocx.com/images/bang_tan.gif)