serverlet 学习
- serverlet实现的是javax.servlet.servlet接口
- 配置web.xml
<servlet>
<servlet-name><servlet-name>//servlet名称
<servlet-class></servlet-class> //servlet处理类
</servlet>
<servlet-mapping>
<servlet-name></servlet-name>//servle名称
<url-pattern></url-pattern>//servlet访问路径
</servlet-mapping>
Servlet信息要添加到web.xml中才能被访问
Servlet的生命周期:
- 加载Servlet:由Servlet容器完成。
a. 首次发送请求时加载:(当访问对应的URL时,才加载相应的Servlet)
b. 自动加载Servlet:(服务器启动时,自动载入内存。)*
<load-on-startup>1</load-on-startup> <!-- 声明servlet自动加载 -->* - 初始化Servlet方法:init()方法。
- 处理请求的方法:service()方法:doGet,doPost
- 销毁Servlet:destory()方法;
Servlet之间的跳转:
- RequestDispatcher的forward跳转(可以跳到Servlet和JSP、文件)直接在后台跳转,浏览器不知道发送了跳转,所以前台的URL是不变的
request.getRequestDispatcher("/index.jsp".forward(request, response) //index.jsp为跳转的页面
- URL重定向:
I.服务器返回的状态码:
response.sendRedirect("/javawebCommon/index.jsp");///javawebCommon/index.jsp为跳转的页面,request不能传递信息到新的页面
中文乱码解决方案:
- Servlet输出响应:
response.setCharacterEncoding("utf-8");//要在获取response.getWriter();之前设置编码格式;
- 在前台获取到值时,转换为对应的编码格式
<%
String name = erquest.getParameter("username");
String name_zh = new String(name.getBytes("编码格式"))
%>
servlet线程不安全的问题:
我的理解:
1. 服务器开启,创建Servlet进程;
2. 如果有服务,分配一个线程,
3. 服务器关闭,关闭Servlet进程;
由于只有一个进程,所有的线程共享资源,所有如果,定义了全局的变量,就可以被每个线程修改
解决办法:
- 尽量将每个线程的私有属性定义为局部变量。
- 只读属性的最好定义为final类型;
本章小结:
1.JSP应用的前身组件Servlet;
2.在javaweb中,servlet负责接收用户请求HttpServletRequest,在doGet,doPost中处理,并将HttpServletResponse反馈给用户。
3.Servlet可以设置初始化参数。供Servlet内部使用。
4.一个Servlet类只会有一个实例,在它初始化时调用init()方法,销毁时调用destory()方法。
5.Servlet信息需要在web.xml中配置,一个Servlet可以设置多个URL访问,
6.Servlet不是线程安全的,谨慎使用类的变量