servlet概念:
Servlet 是Java Server Applet的简称,称为小服务器程序,用Java编写的服务器端程序,主要功能交互式地浏览和修改 数据,生成动态Web内容。
Servlet的两种创建方式:
①继承HttpServlet类
@WebServlet(name = "RegistServlet")
public class RegistServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
②实现servlet接口
public class RegistServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
Servlet的两种配置方式:
①使用注解
@WebServlet(name = "RegistServlet",urlPatterns = "/路径") //‘/’不可缺少
// urlPatterns也可以换成value 但两者不能同时使用
public class RegistServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
②使用xml
<!--Servlet配置 -->
<servlet>
<!--名称 -->
<servlet-name>hello2</servlet-name>
<!--Servlet的全称类名 -->
<servlet-class>com.qf.web.servlet.HelloServlet</servlet-class>
<!--启动的优先级,数字越小越先起作用 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!--映射配置 -->
<servlet-mapping>
<!--名称 -->
<servlet-name>hello2</servlet-name>
<!--资源的匹配规则:精确匹配 -->
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
解决乱码问题
request请求乱码问题主要是由于数据库使用编码和Tomcat使用编码不一致。Tomcat使用的是ISO8859-1(欧洲一个编码,一个字节)
request.setCharacterEncoding("utf-8");
response发送到客户端乱码主要是由于浏览器编码问题和Tomcat编码不一样所导致
response.setContentType("text/html;charset=utf-8");
servlet线程安全问题
1、synchronized
将存在线程安全问题的代码放到同步代码块中
2、实现SingleThreadModel接口
servlet实现SingleThreadModel接口后,每个线程都会创建servlet实例,这样每个客户端请求就不存在共享资源的
问题,但是servlet响应客户端请求的效率太低,所以已经淘汰。
3、尽可能只使用局部变量