JavaWeb笔记
一.Servlet相关注解
```text 1.注解名称 @WebServlet 2.该注解使用前提 Tomcat服务器需要支持servlet 3.0以上的规范才能使用该注解 3.@WebServlet使用 简化Servlet在web.xml中的配置 ServletDemo01 servlet01.ServletDemo01 ServletDemo01 /demo01 4.@WebServlet属性 name:指的是Servlet的名称,对应web.xml中 urlPatterns:指定Servlet映射,对应web.xml中 可以指定多个映射 value:value属性和urlPatterns属性含义相同,都是指定url映射,但是如果我们在注解中只指定一个属性值,可以省略value属性名
```java /** * @WebServlet中的属性 * name:指的是Servlet的名称,对应web.xml中 * urlPatterns:指定Servlet映射,对应web.xml中 * value:value属性和urlPatterns属性含义相同,都是指定url映射,但是如果我们在注解中只指定一个属性值,可以省略value属性名 */ //@WebServlet(name = "ServletDemo01",urlPatterns = {"/ServletDemo01","/demo01"}) 正常 //@WebServlet(urlPatterns = "/ServletDemo01") 简化 @WebServlet("/ServletDemo01") //利用value属性可以省略的特性,更为简化 public class ServletDemo01 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write("ServletDemo01"); } }
二.修改注解创建Servlet模板
通过修改模板来简化我们的操作,不需要每次新建Servlet文件时都对@WebServlet注解进行修改
三.在IDEA中模拟HTTP请求
可以避免IDEA开发工具和浏览器之间反复切换 新建一个http格式的文件,在里面书写GET/POST请求 ### 模拟浏览器向指定的服务器地址发出 GET请求 //@no-cookie-jar GET http://localhost:8080/day10_Response/ServletDemo01 ###
四.ServletConfig对象
1>在web.xml中添加配置信息
1.ServletConfig对象可以用来封装一些关于Servlet配置信息 2.两种方法 a.在web.xml中配置初始化参数 ServletConfigDemo01 servletconfig01.ServletConfigDemo01 charset UTF-8 ServletConfigDemo01 /config01 b.通过注解方式配置Servlet初始化参数 @WebServlet(value = "/config02",initParams = @WebInitParam(name="charset",value = "UTF-8")) 3.获取初始化参数 System.out.println(getServletConfig().getInitParameter("charset"));
2>在@WebServlet注解中添加配置信息
/* * initParams = @WebInitParam(name="charset",value = "UTF-8") * 相当于: * charset UTF-8 */ @WebServlet( value = "/ServletConfigDemo02" ,initParams = @WebInitParam(name="charest",value="GBK")) public class ServletConfigDemo02 extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //利用getServletConfig()方法获取ServletConfig对象,调用getInitParameter()方法来获取参数 System.out.println(getServletConfig().getInitParameter("charest")); } }
五.ServletContext对象
1.ServletContext代表当前web应用,每个web应用都只有唯一一个ServletContext对象
2.使用ServletContext来获取资源在硬盘上真实路径
/**
* 利用ServletContext的方法获取资源在硬盘上的真实路径
* public String getRealPath(String path):传入一个虚拟路径,返回一个资源真实路径
* InputStream getResourceAsStream(String path):传入一个虚拟路径,返回资源真实路径的输 入流
*/
注意:书写虚拟路径,以/开头,/代表当前应用
3.作为域对象使用
可以在ServletContext中存放一些key=value键值对,这些键值对可以被当前应用下的所有Servlet 共享
/**
* ServletContext对象中的方法:
* void setAttribute(String name, Object object):向ServletContext对象存入key=value键值对
* public Object getAttribute(String name):根据name(key)取出对应的value
*/
1>利用getRealPath()方法获取绝对路径,读取db.properties文件
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取db.properties在硬盘的绝对路径 String realPath = getServletContext().getRealPath("/WEB-INF/classes/db.properties"); //通过Properties类获取db.properties里面的键值对信息 Properties properties = new Properties(); //利用输入流读取到db.properties文件 FileInputStream fileInputStream = new FileInputStream(realPath); //将db.properties里的键值对写入到properties对象中 properties.load(fileInputStream); System.out.println(properties); }
2>getResourceAsStream()方法读取db.properties文件
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { InputStream resourceAsStream = getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"); Properties properties = new Properties(); properties.load(resourceAsStream); System.out.println(properties); }
3>利用setAttribute()方法向ServletContext对象存入key=value键值对
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext servletContext = getServletContext(); String[] users = {"Jack","John","GGbond"}; servletContext.setAttribute("username",users); //每个web应用都只有唯一一个ServletContext对象,所以上下两个对象实际上是同一个对象 String[] username =(String[]) getServletContext().getAttribute("username"); Arrays.stream(username).forEach(System.out::println); }
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。