Servlet基础
一、Servlet是啥?
Servlet是用Servlet标准开发的java类,运行在服务器端; 它是控制层,处理来自jsp页面的请求,是前台和服务器中间的媒介。它依托于服务器,没有服务器便无法执行。
二、 实现一个Servlet的helloword
1.创建Servlet的java类
public class HelloWorld extends HttpServlet {
private String message;
@Override
public void init() throws ServletException {
message="hello word";
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out=resp.getWriter();
out.println("<h1>"+message+"</h1>");
}
private void destory(){
创建类的时候需要继承HttpServlet 或者实现Servelt接口。然后就是继承/实现 3个方法。init();service();
destory() 当然实际应用,只需要操作init()和service()
2.将该Servlet在web.xml中配置。目的是让jsp页面能找到Servlet, Servlet也能找到jsp
<!--核心Servlet -->
<servlet>
<servlet-name>HelloWord</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWord</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>test.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
Url-patten作用:让请求方能根据该Url找到servelt名,servlet作用:根据servelt名找到处理类
Url-pattern种类:
1 *.XXX 交给核心处理
2 / 默认Servlet 它会匹配所有的servlet,当然也可以自己写一个特定的配置文件,其他Servlet找不到的url,都通过该Servlet处理类处理。
3 /* 这种是错的。无法找到 .jsp的页面
三、Servlet运行过程
客户端发送请求给wib服务器后:
1.web服务器检查是否创建,装载了该请求 对应的Servlet,如果没有,就创建Servlet,如果有了,就执行4
2.装载创建Servlet的唯一的实例对象
3.创建一个HttpServletRequest对象和。。。Response对象,调用Service方法将对象传入,执行。
4执行完毕,调用destory方法卸载servelt,服务器关闭。
四。线程安全问题。
为啥会有这个考虑?因为Servlet对象的单例模式设计的,客户端访问的Servlet,只创建一个对象来处理。处理多个不同的请求。
不要在处理类中定义全局变量。可以在方法中定义变量。开发者已经将servlet方法都做成线程暗钻的了,在方法内使用变量是没问题的。