servlet是用java编写的服务器端程序,其主要功能在于交互式的浏览和修改数据,生成动态的web内容。狭义的servlet是指java语言实现了一个接口,广义的servlet是指任何实现了这和个接口的类。
servlet是javaweb的核心程序,是java web的三大组件之一(servlet,filter,listener)
在http请求过程中会把请求参数放入请求行或请求体中,这个参数需要服务器接收解析并处理,servlet就是用来处理这个的过程。
servlet的作用:用来处理客户端发送过来的请求,并对该请求响应
获取接收客户端发送过来的请求
处理请求
将处理结果通过响应发送到客户端
示例:编写一个简单的servlet
1.新建一个java web项目,注意选择第二个,选择第一个的要自己手动导servlet包。并部署到服务器。
2.为了区分其他项目,我们更改访问主页地址:localhost:8080/hello
3.新建一个类继承servlet并重写基类的方法
4.配置web.xml文件信息:
同意的class-name是为了通过url(hi)找到所对应的类HelloServlet。
运行结果就是,页面无显示,控制台输出123:
当然我们也可以通过注解的方式创建servlet,这种方式则不需要手动配置web.xml。:
关于HttpServletRequest简介:
在ServletAPI中定义了一个HttpServletRequest接口,它继承ServletRequest,专门用于封装http请求,所以HttpServletRequest请求包含接收请求行,请求头和请求体的方法
示例:
示例:
需注意URL:
在ServletAPI中定义了一个HttpServltReponse接口,它继承ServletReponse,专门用于响应http,所以HttpServletReponse请求包含响应行,响应头和响应体的方法
发送响应行:
示例:
servletConfig对象:
servletConfig对象是指它所对应哪个的servlet配置信息,每一个servlet对应一个servletConfig。servletConfig在多个对象之间是不共享的
servletContext对象:
使用servletContext对象获取配置文件信息:
我们获取properties的相关信息,一般存放无上下级关系的配置信息,如数据库的url name password等。存在上下级关系映射的存放在xml文件中servlet servlet-mapping
当然,properties配置文件一般都存放在web目录下。
关于请求和转发示例:
在servlet中如果当前的web资源不想处理请求,可以通过forward方法将当前的请求传递给其他的web资源,这种方式称为转发
当servlet不处理该请求,返回状态码301/302 在响应头中附加了url地址,浏览器获取到该状态码后,重新发起请求,地址为响应头中附加的url 这种方式为重定向。
登陆成功后的跳转:
如果跳转到我们自定义的页面,则:
因为重定向中响应头返回的地址是home.html ,所以浏览器解析的时候,就直接去访问local:8080/home.html 并没有加上项目名称,所以404.
网页自动刷新后跳转:
设置响应头即可
servlet线程安全问题示例:
代码如下,两个浏览器同时访问这个servlet得出 I 的值
很明显结果是错误的。servlet存在资源共享时(局部变量则不存在,servlet是可以多线程的)就会出现这种问题:
解决方案如下:
当然这也是不好的,一个线程必须等待另一个线程完成后才能执行,当并发数量很大时,造成的结果就像是排队打饭。你没搞完,我就得在旁边站着看。所以尽量减少共享资源
本文暂时没有评论,来添加一个吧(●'◡'●)