关于学习JavaWeb的整理

关于学习JavaWeb的整理

这段时间学习了JavaWeb的一些东西,现在整理下来方便以后复习或者供给大家学习参考,如果有不对的地方希望大家指正,我会虚心接受.

1. Tomcat

首先是安装配置Tomcat.

改变字符集,解决控制台乱码的问题,tomcat安装目录->conf->logging.properties

java.util.logging.ConsoleHandler.encoding = GBK

改端口,解决端口占用问题,tomcat安装目录->server.xml
<Connector URIEncoding="UTF-8" port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

port=“8080” //8080为你想要改成的端口

另外,在java使用tomcat的时候,外就不要手动开启tomcat了,这样也会占用端口.

我遇到过,当时不知道,显得我很傻.

2.Servlet

实际上就是一段java代码,接收客户请求,处理客户请求,反馈请求结果.
层级关系

TestServlet(自己写的) 继承 HttpServlet 继承 GenericServlet 实现 Servlet.

两大类

HttpServletRequest 请求类
HttpServletResponse 响应类

生命周期

1.实例化 2.初始化 3.请求处理 4.服务终止
在⼀个应⽤程序中,每种Servlet类型只能有⼀个实例。

请求方法

setCharacterEncoding(“utf-8”);设置字符集
String getParameter(String name) 根据表单组件名称获取提交数据,返回值是String
String[ ] getParameterValues(String name) 获取表单组件对应多个值时的请求数据
getRequestDispatcher(String path).forward(req,resp) 跳转页面,/文件名 表示同级某个文件
setAttribute(“key”,value) 存值
getAttribute(“key”);//取值后需要向下转型 取值

响应方法

void addCookie(Cookie var1); //给这个响应添加⼀个cookie
void sendRedirect(String var1) ; //发送⼀条响应码,将浏览器跳转到指定的位置,重定向
PrintWriter getWriter() //获得字符流,通过字符流的write(String s)⽅法可以将字符串设置到response缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览器端。
setContentType() 设置响应内容的类型
######转发与重定向
转发:请求不变,一次响应,服务器返回目标路径和内容,request中的数据会丢失
重定向:两次请求,两次响应,服务器第一次响应请求返回目标路径,第二次响应请求返回目标内容

会话session

一个session有多个request
session的数据可以多个页面共享,可以经过重定向

void setAttribute(String key,Object value) 以key/value的形式保存对象值,将数据存储在服务器端
Object getAttribute(String key) 通过key获取对象值
void invalidate() 设置session对象失效
String getId() 获取sessionid,当第⼀次登录成功后,session会产⽣⼀个唯⼀的id,浏览器之后访问时如果发现id值还是之前id,那么说明 当前访问的属于同⼀个会话
void setMaxInactiveInterval(int interval) 设定session的⾮活动时间
int getMaxInactiveInterval() 获 取session的有效⾮活动时间(以秒为单位),默认的有效时间:30分钟
void removeAttribute(String key) 从session中删除指定名称(key)所对应的对象

让session失效的⽅式
(1)invalidate() (2)removeAttribute("key") (3)直接关闭浏览器。
两种配置servlet的方式
在Xml文件中配置
 <servlet>
 <servlet-name>⾃定义名称</servlet-name>
 <servlet-class>处理请求的类的完整路径</servlet-class>
 </servlet>
 <servlet-mapping><!-- mapping 表示映射 -->
 <servlet-name>⾃定义名称</servlet-name>
 <url-pattern>请求名</url-pattern>
 </servlet-mapping>
通过注解配置
@WebServlet(name = "servletname",urlPatterns = "/user/test")

请求地址记得前面加一个/

3.JSP(Java Sever Page)

包括java和html代码,本质上还是servlet

编写方式

声明标签 <%!变量或者⽅法声明%>
表达式标签 <%= 表达式%> 在⻚⾯上显示的效果
程序代码标签 <%java代码%> ⻚⾯上动态展示内容
//html注释,网页查看元素上能看到
<%–注释–> //jsp注释,不能

内置对象

request,response,session,appliction(整个程序运行时间内),page(本页面),out(页面输出),page=this,pageContext,exception
pageContext 对象的作⽤是取得任何范围的参数
request对象的作⽤域为⼀次请求
session 对象是由服务器⾃动创建的与⽤户请求相关的对象。
application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应⽤中都有效。
①pageContext:只在一个页面中保存属性,跳转后无效;
②request:只在一次请求中保存属性,服务器跳转后依然有效;
③session:在一次会话范围中,无论如何跳转都有效,但新开浏览器则无效;
④application:在整个服务器上保存,所有用户都可以使用。

exception 对象的作⽤是显示异常信息,只有在包含 isErrorPage=“true” 的⻚⾯中才可以被使⽤,在⼀般的JSP⻚⾯中使⽤该对象将⽆法编译JSP⽂件。errorPage=“错误返回路径”

jsp指令

<%@指令名 属性明=“属性值”%>
page,include,taglib
Page指令为容器提供当前⻚⾯的使⽤说明⼀个JSP⻚⾯可以包含多个page指令
JSP可以通过include指令来包含其他⽂件。被包含的⽂件可以是JSP⽂件、HTML⽂件或⽂本⽂件。包含的⽂件就好像是该JSP⽂件的⼀部分,会被同时编译执⾏。
JSP API允许⽤户⾃定义标签,⼀个⾃定义标签库就是⾃定义标签的集合。 Taglib指令引⼊⼀个⾃定义标签集合的定义,包括库路径、⾃定义标签。

EL表达式

Expression Language
${};
相同变量名不同作用域时,先取用较小作用域的变量
获取指定作用域的变量时,可以使用 作用域名scope.键名 的方式获得

JSTL(Java server pages standarded tag library)
1.核⼼标签是最常⽤的 JSTL标签。引⽤核⼼标签库的语法如下:	
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:if></c:if>	
<c:foreach></c:foreach>    
item遍历目标,var每次遍历的数据,varstatus用于获得下标,sta.index物理下标,sta.count逻辑下标
2.fm格式化标签
	1、fmt:formatDate 作⽤:将⽇期类型格式化为指定模式的字符串
	2、fmt:parseDate 作⽤:⽤于将指定字符串转化为⽇期类型
	3、fmt:formatNumber 按照指定格式对数字进⾏格式化
注意,JSP虽然方便java和html一起编写,但是耦合较高,注意使用.

4.过滤器和监听器

过滤器

存在于客户端与服务器之间,用于过滤拦截request和response
执行filter的先后取决于xml文件配置的先后顺序.

使用场景:

防止用户未登录操作,设置编码方式,加密解密,非法文字筛选,下载资源限制

常用方法

init() //当服务器启动时,就启动初始化
doFilter(), //
destroy().
filterChain.doFilter(servletRequest,servletResponse); //调去下一个filter,servlet

监听器
监听某个域对象的状态变化的组件

监听创建于销毁 实现HttpSessionListener
监听存值的变化 实现HttpSessionAttributeListener

5.Ajax(Asynchronous Javascript And XML)

ajax并不是新技术,是一种前后端交互方式.

javaScript和XML的异步操作
特点:在前端不改变request

包含技术

CSS,HTML
DOM模型
XMLHttpRequest和服务器(核心)
Javascript

常用属性

onreadystatechange=function(); 处理服务器响应的函数
readyState 服务器状态状态响应信息
responseText 获得服务器返回的数据
status 获得服务器Http状态码

建议使用jQuery操作更简便

6.JSON(JavaScript Obejct Notation)

前后端交互最理想的一种数据格式
常用方法

JSONObject.fromObject(Object);
JSONObject.toBean(jsonobject,classname);
JSONArray.fromObject(objectArrayList);
JSONArray.toArray(jsonoArray,classname)

7.MVC(model,vision,controller)

后端开发的设计模式

Model

业务逻辑,数据操作

Vision

整理展示

Control

接收请求,业务逻辑委托model

8.文件上传

文件上传与下载
使用步骤
1.引入smartupload.jar包
2.前端准备
<form action="toUpload" method="post" enctype="multipart/form-data" >
书名:<input type="text" name="bookName"/><br>
图片:<input type="file" name="自定义名称"/><br>
<input type="submit" value="提交"/>
</form>
注意:

(1)form标签中要添加enctype属性
(2)提交方式必须是post

3.开始获取数据,保存文件

示例代码

public void upload(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
//上传文件
SmartUpload su=new SmartUpload();
//获得pageContext对象
JspFactory factory=JspFactory.getDefaultFactory();
PageContext pagecontext=
factory.
getPageContext(this, request,response,
null,false,1024,true);
su.initialize(pagecontext);
su.setCharset("utf-8");
//实现文件数据的上传
su.upload();
File file = su.getFiles().getFile(0);
//得到文件的基本信息
String filename=file.getFileName();
String type=file.getContentType();
System.out.println("type="+type);
String url="uploadfile/"+filename;
//将上传文件保存到指定目录
file.saveAs(url, SmartUpload.SAVE_VIRTUAL);
request.setAttribute("filename",filename);
String uname=su.getRequest().getParameter("uname");
System.out.println("uname="+uname);
request.getRequestDispatcher("success.jsp").forward(request,
response);
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
注意:

(1)此时如果表单中有其他数据时,不能通过request直接获取,需要通过SmartUpload对象获取
String name=su.getRequest().getParameter(“bookName”);
并且该代码要在SmartUpload操作完成后添加
(2)解决乱码:
new String(name.getBytes(“GBK”),“utf-8”)

文件下载

示例代码

String name=request.getParameter("filename");
String url="uploadfile/"+name;
//将响应的内容设置为通用的二进制流
response.setContentType("application/octet-stream");
//attachment 告诉浏览器以附件的方式下载文件(弹出下载框)
name=URLEncoder.encode(name,"utf-8");
response.addHeader("Content-Disposition","attachment;filename="+name);
request.getRequestDispatcher(url).forward(request, response);
//清空缓冲区:将服务端缓冲区的文件内容,立即权并不传送给客户端
response.flushBuffer();

写在最后

这算得上是我写的第一篇博文了,感觉也不是那么难.因为平时学习做了笔记,整理了一下就出来了,不过整理的过程让我回顾了一下,感觉加深了印象.挺好的,以后尽量坚持更新博文.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值