web-day02
作者:互联网
Servlet-day02
一、工程目录和部署目录
工程目录:写代码的位置
src
web:
部署目录:启动服务器访问当前项目的位置
day12Morning_war_exploded
项目名
--WEB-INF
-- classes 存储的是java编译后的代码
-- web.xml
--静态资源
.html文件
如果工程目录新增的静态资源 一直无法同步到部署目录
1.重启服务器
2.关闭服务器 build --> build artifacts ---> 项目 ---> rebuild
二、ServletConfig的使用
1.主要的方法
方法名 | 作用 |
---|---|
getServletName() | 获取<servlet-name>HelloServlet</servlet-name>定义的Servlet名称 |
getServletContext() | 获取ServletContext对象 |
getInitParameter() | 获取配置Servlet时设置的『初始化参数』,根据名字获取值 |
getInitParameterNames() | 获取所有初始化参数名组成的Enumeration对象 |
2.设置servlet初始化值的方式
①在web.xml中设置初始化值
<!--在servlet中配置其初始值-->
<servlet>
<servlet-name>SS</servlet-name>
<servlet-class>com.atguigu.servlet.SecondServlet</servlet-class>
<init-param>
<param-name>uname</param-name>
<param-value>张三</param-value>
</init-param>
</servlet>
②获得初始化参数
public void init(ServletConfig servletConfig) throws ServletException {
//获取指定的
servletConfig.getInitParameter("uname");//张三
//获取所有的初始化参数的名字
Enumeration<String> names = servletConfig.getInitParameterNames();
}
三、Servlet体系结构
GenericServlet implements Servlet, ServletConfig, Serializable
HttpServlet extends GenericServlet
创建Servlet时 继承 HttpServlet 需要处理什么业务 重写什么方法
doGet()
doPost()
注意:以后使用HttpServlet即可
四、ServletContext的概念
1.定义
服务器为其部署的每一个应用(项目)都创建了一个ServletContext对象。ServletContext属于整个项目的,该项目中的所有Servlet都可以共享同一个ServletContext对象
2.创建ServletContext对象的方式
//方式一
ServletContext s1 = getServletContext();
//方式二
ServletContext s2 = getServletConfig().getServletContext();
//方式三
ServletContext s3 = requset.getServletContext();
3. ServletContext获取全局的初始化参数
①在web.xml中设置全局初始化值
<!-- 配置全局初始化参数-->
<context-param>
<param-name>admin</param-name>
<param-value>123456</param-value>
</context-param>
②在java代码中获得指定的值或者添加值
//1.获取ServletContext对象
ServletContext s1 = getServletContext();
//2.获取值
s1.getInitParameter("admin");//123456
//3.全局域对象 容器 可以向容器中插入值 在当前项目的任意位置都可以获取
s1.setAttribute("uname","安其拉");
s1.getAttribute("uname");//安其拉
4.获取请求资源所处的真实路径(在部署目录中)
//1.获得ServletContext对象
ServletContext s1 = getServletContext();
//2,使用getRealPath() 参数传入 工程目录中的资源地址 返回的是 部署目录中的资源地址
String realPath = s1.getRealPath("/img/g1.jpg");
System.out.println("realPath = " + realPath);
五、配置Sevlet匹配路径
idea自动创建Servlet
右键 --->new ---> create new Servlet
1.一个Servlet可以设置多个匹配路径
映射路径的作用
Servlet的映射路径是提供一个让别人能够访问该Servlet的路径,例如Servlet的映射路径是"/hello",那么在浏览器上访问该Servlet的路径是http://localhost:8080/项目部署名/hello
<servlet-mapping>
<servlet-name>SecondServlet</servlet-name>
<url-pattern>/second</url-pattern>
<url-pattern>/s</url-pattern>
</servlet-mapping>
2.完全匹配路径
完全匹配 必须在地址栏写完整路径
<url-pattern>/second</url-pattern>
<url-pattern>/first</url-pattern>
<url-pattern>/first/f</url-pattern>
3.模糊匹配路径
http://localhost:8080/day12Servlet_war_exploded/third
http://localhost:8080/day12Servlet_war_exploded/third/abc/cba
<url-pattern>/third/*</url-pattern>
4.后缀名匹配路径
http://localhost:8080/day12Servlet_war_exploded/a.do
http://localhost:8080/day12Servlet_war_exploded/a/abc.do
http://localhost:8080/day12Servlet_war_exploded/abc/cc.action
<url-pattern>*.do</url-pattern>
<url-pattern>*.action</url-pattern>
六、路径
1.url 同一资源定位符
协议 主机名 端口号 应用名/项目名 资源名
http://localhost:8080/day12Servlet_war_exploded/success.html
既可以访问本项目资源 也可以访问其他项目资源
客户端访问服务器的资源,或者一台服务器中要访问另外一台服务器的资源都是通过url访问
2.uri 同一资源标识符
/应用名/资源名
使用uri访问本项目资源
在同一个项目的某个资源中访问该项目中的另一个资源
3.相对路径
相对自身资源 以自身资源为基础查找其他的资源
注意: 相对路径 不是以/开头
4.绝对路径
从服务器的根目录开始查找(推荐写法)
/应用名(项目名)/资源名
```http
成功界面
```
/:服务器的根目录
localhost:8080
注意: 永远以 "/" 开头
/:代表访问服务器的根目录
/应用名(项目名)/资源名
5.获取应用名、项目名
String path = request.getContextPath(); 获取 /应用名
七.请求
请求时会携带大量的数据 服务器会将 请求行 请求头 请求体封装为一个请求对象。
1.获取请求行
//获取请求方式
String method = request.getMethod();
//获取uri /day12Request/first
String requestURI = request.getRequestURI();
//获取协议 HTTP/1.1
String protocol = request.getProtocol();
2.获取请求头
//获取请求头信息
String agent = request.getHeader("User-Agent");
String referer = request.getHeader("Referer");
//获取所有请求头key
Enumeration<String> headerNames = request.getHeaderNames();
3.获取请求体(参数)
一个name 对应一个值
String uname = request.getParameter("uname");
一个name 对应多个值
String[] hobbies = request.getParameterValues("hobby");
获取所有的name
Enumeration
获取所有的name和value 放到map内
Map<String, String[]> map = request.getParameterMap();
4.post 请求乱码
request.setCharacterEncoding("utf-8");
5.将表单数据封装为对象 使用Beanutils
1.在 web-inf 下 新建 lib 文件夹
线下_JavaWeb【V4.0】\01_resources\03_BeanUtils
2.将beanutils的jar包拷贝进去
3.右键 add as library
4.实体类的属性名 要与 表单的 name 名相同
5.//0.获取所有的请求参数
Map<String, String[]> map = req.getParameterMap();
//1.创建User对象
User user = new User();
//2.使用BeanUtils 完成数据填充
BeanUtils.populate(user, map);
标签:web,String,day02,request,获取,ServletContext,Servlet,资源 来源: https://www.cnblogs.com/gezigkd/p/16221965.html