一、入门
import javax.servlet.*; import javax.servlet.annotation.WebServlet; import java.io.IOException; /* 一、javaweb动态资源目录结构 * WEB-INF - classes:存放字节码文件 - lib:存放jar包 - web.xml:web项目核心配置文件 二、访问动态资源的步骤 1、资源地址:http://localhost:8080/A01javaweb_war_exploded/first * http://localhost:8080:找到服务器 * /A01javaweb_war_exploded(虚拟目录):找到项目 * /first(资源名称):找到资源 2、web.xml:映射关系 <servlet> <servlet-name>first</servlet-name> <servlet-class>FirstServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>first</servlet-name> <url-pattern>/first</url-pattern> </servlet-mapping> 3、Servlet:实现接口,由tomcat创建对象并调用service方法 * HttpServlet:对Servlet接口的进一步封装 */ @WebServlet("/first")//servlet3.0后可使用注解配置,不需要web.xml。使用方式:@WebServlet("/资源名称") public class FirstServlet implements Servlet { /* 1、默认第一次访问执行init方法 2、可由web.xml配置执行init方法的时机 <servlet> <load-on-startup>0或正数:tomcat启动时执行;负数:第一次访问时执行</load-on-startup> </servlet> */ @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("执行first init方法"); } @Override public ServletConfig getServletConfig() { return null; } /* 每次访问都执行service方法 */ @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("执行first方法(注解方式)"); } @Override public String getServletInfo() { return null; } /* 正常关闭tomcat执行destroy方法 */ @Override public void destroy() { System.out.println("执行first second方法"); } }
二、request和response
@WebServlet("/second") public class SecondServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) { /* 一、请求消息 1、请求行 POST /wuxi HTTP/1.1 2、请求头 User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息 Referer:告诉服务器,我(当前请求)从哪里来? 3、请求空行 4、请求体 封装POST请求消息的请求参数 二、request功能 1、获取请求消息数据 1、获取请求行数据: String getMethod():获取请求方式(GET) String getContextPath():获取虚拟目录(/A01javaweb_war_exploded) String getServletPath():获取servlet路径(/second) String getQueryString():获取get方式请求参数(name=mengmeiqi&age=18) String getRequestURI():获取请求URI(/A01javaweb_war_exploded/second) StringBuffer getRequestURL():获取请求URL(http://localhost:8080/A01javaweb_war_exploded/second) String getProtocol():获取协议及版本(HTTP/1.1) String getRemoteAddr():获取客户机的IP地址(0:0:0:0:0:0:0:1) 2、获取请求头数据 String getHeader(String):根据请求头key获取value Enumeration<String> getHeaderNames():获取请求头的所有key 使用方式: Enumeration<String> headerNames = req.getHeaderNames(); while (headerNames.hasMoreElements()) { String key = headerNames.nextElement(); String value = req.getHeader(key); System.out.println(key + ":" + value); } 3、获取请求体数据 BufferedReader getReader():获取字符输入流 使用方式: BufferedReader reader = req.getReader(); String line = null; while ((line = reader.readLine()) != null) { System.out.println(line); } ServletInputStream getInputStream():获取字节输入流 2、其他功能 1、获取请求参数通用方式 String getParameter(String):根据参数key获取value String[] getParameterValues(String):根据参数key获取数组value Enumeration<String> getParameterNames():获取参数的所有key Map<String, String[]> getParameterMap():获取参数的map结果集 void setCharacterEncoding("utf-8"):解决中文乱码问题 2、请求转发 RequestDispatcher getRequestDispatcher(String):获取请求分发器,参数为资源名称 void forward(ServletRequest, ServletResponse):将请求转发 3、共享数据 request域(请求转发中使用): void setAttribute(String, Object):以键值对方式存储数据 Object getAttribute(String):根据键获取所存储的数据 void removeAttribute(String):根据键删除所存储的数据 4、获取ServletContext ServletContext getServletContext() 三、BeanUtils工具类 javabean:类必须被public修饰,必须提供空参构造方法,成员变量必需被private修饰,提供公共的getter和setter方法 导包:commons-beanutils、commons-logging 方法: void setProperty(Object, String, Object):设置javabean的属性值 String getProperty(Object, String):获取javabean的属性值 void populate(Object, Map<String, ? extends Object>):将map结果集转换成javabean 使用方式: try { req.setCharacterEncoding("utf-8"); User loginuser = new User(); Map<String, String[]> parameterMap = req.getParameterMap(); BeanUtils.populate(loginuser, parameterMap); System.out.println(loginuser); } catch (Exception e) { e.printStackTrace(); } 四、响应消息 1、响应行 HTTP/1.1 200 OK 状态码: 1、1xx:服务器接收客户端消息,但没有接收完成,等待一段时间后,发送1xx状态码 2、2xx:成功。代表:200 3、3xx:重定向:代表:302(重定向)、304(访问缓存) 4、4xx:客户端错误。代表:404(请求路径没有对应的资源)、405(请求方式没有对应的doXxx方法) 5、5xx:服务器端错误。代表:500(服务器内部出现异常) 2、响应头 Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式 Content-disposition:服务器告诉客户端以什么格式打开响应体数据 in-line:默认值,在当前页面内打开 attachment;filename=xxx:以附件形式打开响应体。文件下载 3、响应空行 4、响应体:传输的数据 五、response功能 1、设置响应消息数据 void setStatus(int):设置响应状态码 void setHeader(String,String):设置响应头 void setContentType(String):告诉浏览器响应体的字符编码(在获取流之前使用) 原理: 响应对象.setCharacterEncoding("utf-8"); 响应对象.setHeader("content-type", "text/html;charset=utf-8"); PrintWriter getWriter():获取字符输出流 用法: 响应对象.getWriter().write("字符串"); ServletOutputStream getOutputStream():获取字节输出流 用法: 响应对象.getOutputStream().write("字符串".getBytes("utf-8")); 2、重定向 void sendRedirect(String):参数为虚拟目录+资源名称 原理: 响应对象.setStatus(302); 响应对象.setHeader("location", 虚拟目录+资源名称); 六、ServletContext对象 1、概念:代表整个web应用,可以和程序的容器(服务器)来通信 2、获取: 1、通过请求对象获取:请求对象.getServletContext(); 2、通过HttpServlet获取:this.getServletContext(); 3、功能: 1、获取MIME类型: MIME类型:在互联网通信过程中定义的一种文件数据类型(text/html、image/jpeg、application/json) 方法:String getMimeType(String) 2、共享数据:(所占内存在web应用生命周期内不会销毁,所以不推荐使用) void setAttribute(String,Object):存储数据 Object getAttribute(String):获取数据 void removeAttribute(String):删除数据 3、获取文件的真实(服务器)路径: 方法:String getRealPath(String):/路径为当前项目部署在服务器上的绝对路径 */ } }
三、jackson
1、导包
jackson-annotations、jackson-core、jackson-databind
2、代码
public class User { public static void main(String[] args) throws JsonProcessingException { /* 一、java转json 方法: 1、void writeValue(File, Object):将对象转成json,并写入到文件 2、void writeValue(Writer, Object):将对象转成json,并使之成为字符流 3、void writeValue(OutputStream, Object):将对象转成json,并使之成为字节流 4、String writeValueAsString(Object):将对象转成json字符串 注解: 1、@JsonIgnore:忽略该属性 2、@JsonFormat(pattern = "yyyy-MM-dd"):格式化该属性 二、json转java 方法: T readValue(String, Class<T>):将json转成对象 */ User user = new User(1, "mengmeiqi", "123456", new Date()); ObjectMapper mapper = new ObjectMapper(); String userjson = mapper.writeValueAsString(user); System.out.println(userjson); User userobj = mapper.readValue(userjson, User.class); System.out.println(userobj); } private Integer id; private String username; private String password; @JsonFormat(pattern = "yyyy-MM-dd") private Date birthday; public User() { } public User(Integer id, String username, String password, Date birthday) { this.id = id; this.username = username; this.password = password; this.birthday = birthday; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", birthday=" + birthday + '}'; } }