资讯专栏INFORMATION COLUMN

Javaweb Q&A

hiyang / 2797人阅读

摘要:方法的参数不但可以使相对于上下文根的路径,而且可以是相对于当前的路径。如和都是合法的路径。

转发与重定向区别是什么

在调用方法上

转发 调用 HttpServletRequest 对象的方法
request.getRequestDispatcher("test.jsp").forward(req, resp);
重定向 调用 HttpServletResponse 对象的方法
response.sendRedirect("loginsuccess.jsp");

在URL显示上

转发:URL没有变化
重定向:URL会发生变化

在HTTP请求次数上

转发:请求1次
重定向:请求2次

在行为上

转发:服务器行为
重定向:客户端行为

在数据传递上

转发: 直接传递请求数据
重定向: 必须通过session/application全局中间数据缓存
JSP/Servlet 注意事项

JSP/Servlet 初始化时机

JSP :只有当客户端第一次请求JSP时,才需要将其转换、编译以及实例化
Servlet : 只有当服务器启动时(web.xml中配置load-on-startup=1,默认为0)或者第一次请求该servlet时,才会加载和实例化

Servlet四大对象

ServletConfigServletContextHttpServletRequestHttpServletResponse
ServletConfig:代表当前Servlet的配置信息(web.xml)
获取ServletConfig方法:
ServletConfig sc = this.getServletConfig();

ServletContext:代表当前Application
获取ServletContext方法:
ServletContext sc = this.getServletContext();

HttpServletRequest:代表请求信息
HttpServletResponse:代表响应信息

ServletContext生命周期与作用

Tomcat 启动时,为每个web项目创建对应的ServletContext对象
ServletContext对象何时销毁?第一种:把web应用移除;第二种:把Tomcat服务器停止
作用:是管理WEB资源,读取资源文件等 (请不要使用java文件方式去读取

获取RequestDispatcher对象的方法与区别

2种方法:
1、使用ServletRequest对象
request.getRequestDispatcher();
2、使用ServletContext对象
context.getRequestDispatcher();

区别:
ServletContext.getRequestDispatcher(String path)方法的参数必须以斜杠(/)开始,
被解释为相对于当前上下文根(context root)的路径。
例如:/myservlet是合法的路径,而../myservlet是不合法的路径。

ServletRequest.getRequestDispatcher(String path)方法的参数不但可以使相对于上下文根的路径,
而且可以是相对于当前Servlet的路径。如/myservlet和myservlet都是合法的路径。
如果路径以斜杠(/)开始,则被解释为相对于当前上下文根的路径;
如果没有以斜杠(/)开始,则被解释为相对于当前Servlet的路径。

JavaWEB四大域

1、context(代表整个应用都可以使用,servletContext)
2、request
3、session
4、page
如何读取web资源文件

Servlet方式

方式1:
InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/config/db.properties");
Properties props = new Properties();
props.load(in);

方式2:
String path= this.getServletContext().getRealPath("/WEB-INF/config/db.properties");
FileInputStream fis = new FileInputStream(path);
Properties props = new Properties();
props.load(fis);

非Servlet方式(类装载器 只能加载classses目录下)

方式1(类加载器 加载与读)
InputStream in = UserServlet.class.getClassLoader().getResourceAsStream("db.properties");
Properties props = new Properties();
props.load(in);

方式2 (类加载器 只加载 用传统的方式读)
String path = UserServlet.class.getClassLoader().getResource("db.properties").getPath();
FileInputStream fis = new FileInputStream(path);
Properties props = new Properties();
props.load(fis);

javaweb读取配置文件的4种方法

输出中文乱码问题(2种方法)

方法1:设置响应头

response.setHeader("Content-Type", "text/html;charset=utf-8");

方法2:设置响应体

response.setHeader("Content-Type", "text/html");
String str = "中国";
OutputStream os = response.getOutputStream();
os.write("".getBytes());
os.write(str.getBytes("utf-8"));

注意事项

字符流字节流的区别(字节流是字符流的基础)
字节流应用更广泛:二进制数据(视频、音频、图片、文本)
字符流应用更专注:文本(字符串)
获取字节流:
OutputStream os = response.getOutputStream();
获取字符流:
PrintWriter pw = response.getWriter();

设置服务器编码方式:
字节: str.getBtyes("UTF-8") //告诉服务器使用UTF-8编码字符
字符: response.setCharacterEncoding("utf-8"); //告诉服务器使用UTF-8编码字符

设置客户端编码方式:
response.setContentType("text/html;charset=utf-8");
下载文件问题

设置HTTP的头信息

response.setHeader("content-disposition", "attachment;filename=" + filename);

如果下载的是中文文件,上面这种写法会出行乱码并且下载不了,所以必须使用下面这种:
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(filename,"UTF-8"));
一、为什么要用URLEncoder

客户端在进行网页请求的时候,网址中可能会包含非ASCII码形式的内容,比如中文。

而直接把中文放到网址中请求是不允许的,所以需要用URLEncoder编码地址,

将网址中的非ASCII码内容转换成可以传输的字符

不会被编码的内容

1.大写字母A-Z

2.小写字母a-z

3.数字 0-9

4.标点符 - _ . ! ~ * " (和 ,)

读取资源文件到内存(只能获取文件真实路径)

String filePath = this.getServletContext().getRealPath("/WEB-INF/upload/xxx.jpg");
InputStream is = new FileInputStream(filePath);

输出资源文件

OutputStream out = response.getOutputStream();
int len = 0;
byte[] buffer = new byte[1024];
while((len =is.read(buffer) ) > 0){
    out.write(buffer, 0 ,len);
}
JSP文件存放位置问题
如果需要先访问Servlet再跳转到Jsp的话,需要把JSP页面放在WEB-INF中

如果JSP可以直接访问,那直接放置在WEB-INF目录外层

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69734.html

相关文章

  • JavaWEB开发12——el&jstl

    摘要:列名字段名表单中的属性名要一至创建数据库及表开发应用搭建开发环境添加包创建实现类层业务层接口实现类数据访问层接口实现类添加工具类表示层要注意注册页面登录页面 一、JavaWeb开发模式 C/S:客户端 / 服务器 (胖客户端)B/S:浏览器 / 服务器 (瘦客户端) JavaBean: 就是一个普通类(实体bean),包含三样标准:一个无参构造、私有属性、公共的getter和se...

    Lionad-Morotar 评论0 收藏0
  • java&javaweb学习笔记(汇总)

    摘要:我的学习笔记汇总标签笔记分为两大部分和笔记内容主要是对一些基础特性和编程细节进行总结整理,适合了解基础语法,想进一步深入学习的人如果觉得不错,请给,这也是对我的鼓励,有什么意见欢迎留言反馈目录基础巩固笔记反射基础巩固笔记泛型基础巩 我的java&javaweb学习笔记(汇总) 标签: java [TOC] 笔记分为两大部分:javase和javaweb javase javawe...

    yagami 评论0 收藏0
  • JavaWEB开发06——XML&tomcat

    摘要:张三标签可以自定义。区非法字符严格地讲,在中仅有字符和是非法的。添加包依赖在查找指定节点的时候,根据语法规则来查找后续的代码与以前的解析代码一样。这在生活中是不可能出现的。元素的格式化情况。网页游戏,优点客户端只要有浏览器就可以了。 1.Xml概念 eXtendsible markup language 可扩展的标记语言 2.XML 有什么用? 1.可以用来保存数据 2.可以用来...

    zeyu 评论0 收藏0
  • JavaWEB开发06——XML&tomcat

    摘要:张三标签可以自定义。区非法字符严格地讲,在中仅有字符和是非法的。添加包依赖在查找指定节点的时候,根据语法规则来查找后续的代码与以前的解析代码一样。这在生活中是不可能出现的。元素的格式化情况。网页游戏,优点客户端只要有浏览器就可以了。 1.Xml概念 eXtendsible markup language 可扩展的标记语言 2.XML 有什么用? 1.可以用来保存数据 2.可以用来...

    Integ 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<