javaweb日记一
1.servlet技术
介绍:servlet是Javaweb三大组件之一,其他分别是filter过滤器,listener监听器;
作用:接收客户端请求并相应客户端数据
1.1使用方法:
1.src目录下编写一个实现servlet接口的类
public class Hello 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() {
}
}
2.在service方法下编写自己想要实现的功能
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello");
}
3.在webapp/WEB-INF/web.xml下配置访问地址
<servlet>
<!-- servlet类的别名,可以随便取名,但最好还是和类名一致-->
<servlet-name>Hello</servlet-name>
<!-- servlet 类的全名-->
<servlet-class>com.example.servlet.Hello</servlet-class>
</servlet>
<!--配置servlet类的访问地址-->
<servlet-mapping>
<!--这里面的servlet-map里的servlet-name要和servlet里的servlet-name一致-->
<servlet-name>Hello</servlet-name>
<!--斜杆表示的路径是http://ip:port/工程路径-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
1.2 servlet的生命周期
1.执行servlet构造器方法
2.执行init初始化方法
3.执行server方法
4.执行destory方法
servlet构造器和init方法只会在servlet类创建时执行一次,server方法每调用一次servlet类就会执行一次,destroy方法只有在web工程停止时调用一次
1.3请求分发处理
表单有get和post两种请求,需要用到分发处理方法
方式一:
在实现servlet类的类里的处理方法
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello");
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
String method = httpServletRequest.getMethod();
if ("post".equalsIgnoreCase(method)){
System.out.println("post");
dopost();
}else if("get".equalsIgnoreCase(method)){
System.out.println("get");
doget();
}
}
private void doget(){
System.out.println("1.---");
}
private void dopost(){
System.out.println("2.---");
}
2.实际生产中用servlet的方法(继承httpsevlet类来实现servlet程序)
使用方法:
1.编写一个类去继承httpservlet类
2.根据业务重写doget()或dopost()方法
3.到web.xml中配置servlet程序的访问地址
import java.io.IOException;
import java.net.SocketTimeoutException;
public class httpservlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("methed1");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("methed2");
}
}
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<!-- servlet类的别名-->
<servlet-name>Hello</servlet-name>
<!-- servlet 类的全名-->
<servlet-class>com.example.servlet.Hello</servlet-class>
</servlet>
<!--配置servlet类的访问地址-->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>httpservlettest</servlet-name>
<servlet-class>com.example.servlet.HttpServletTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>httpservlettest</servlet-name>
<url-pattern>/httpServT</url-pattern>
</servlet-mapping>
</web-app>
3.idea中使用servlet的步骤
在包下新建就行,如图
注``意不要勾选Create Java EE6+ annotated class 就行,这个用的时3.0的注释,学习时没用这个
3.servletConfig类的了解
## 1.servletConfig在Servlet类的init方法中作为参数出现,有以下几个常用方法:
//获取servlet的名
System.out.println("servlet 的名字:"+config.getServletName());
//获取servlet里的初始化参数的名
System.out.println("servlet的initParameter名:"+config.getInitParameterNames().nextElement());
//获取servlet初始化参数的值
System.out.println("servlet的initParameter值:"+config.getInitParameter("url"));
System.out.println(config.getServletContext().toString());
初始化参数的名和值在web.xml里
<servlet>
<servlet-name>httpservlettest</servlet-name>
<servlet-class>com.example.servlet.HttpServletTest</servlet-class>
<init-param>
<!--初始化的参数 -->
<param-name>url</param-name>
<param-value>jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8</param-value>
</init-param>
</servlet>
重写init方法时要记得在方法中添加super.init(config);
4.servletContext类
1.什么是ServletContext:一个接口,表示servlet上下文对象
2.一个web工程只有一个servletContext对象实例
3.是一个域对象
域对象:存:setAttribute; 取:getAttribute; 删:removeAttribute
4.作用:
获取xml中配置的上下文参数context-param;
ServletContext servletContext = getServletConfig().getServletContext();
String namespace = servletContext.getInitParameter("name");
System.out.println(namespace);
获取当前的工程路径;
System.out.println(servletContext.getContextPath());
获取工程部署后在服务器磁盘上的绝对路径
//斜杠表示映射到web目录下
System.out.println(servletContext.getRealPath("/"));
存储数据
ServletContext servletContext = getServletConfig().getServletContext();
servletContext.setAttribute("name","value");
Object name = servletContext.getAttribute("name");
System.out.println(name);