JavaEE:Servlet用法

一、将Servlet的jar包导入web工程中:

Servlet的jar包所在目录:apache-tomcat-x/lib/servlet-api.jar
将jar包放入此目录:工程/WebContent/WEB-INF/lib

二、配置Servlet类到web站点下:

映射的虚拟目录:
/ :缺省,找不到时运行
/* :匹配任意名称
*.do :匹配任意扩展名为.do名称

<servlet>
    <!-- 别名UserServlet -->
    <servlet-name>UserServlet</servlet-name>
    <!-- 类名 -->
    <servlet-class>com.yyh.hkw.servlet.UserServlet</servlet-class>
    <!-- 秒数,启动服务器时自动装载 -->
    <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
    <!-- 别名UserServlet -->
    <servlet-name>UserServlet</servlet-name>
    <!-- 映射的虚拟目录,"/"代表根目录 -->
    <url-pattern>/*</url-pattern>
</servlet-mapping>

三、Servlet类:

实现Servlet的子类:GenericServlet类,HttpServlet类

方法:
init()  第一次运行时调用的方法,用于初始化
service(ServletRequest req,ServletResponse res)  用户请求时调用
getServletConfig()  返回ServletConfig类对象
getServletInfo()
destroy()  对象结束时运行

四、HttpServlet类(一般继承此类):
doGet方式请求时触发:

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    super.doGet(req, resp);
}

doPost方式请求时触发:

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    super.doPost(req, resp);
}


五、Servlet多线程问题:

方法一:
将代码写入synchronized()方法中

方法二:
写的类实现SingleThreadModel类,创建不同的Servlet对象

 

六、ServletConfig类:

1.方法:

ServletConfig config = getServletConfig();
// 获得全部配置param-name的名称
config.getInitParameterNames();
// 得到名称对应的值
String paramValue = config.getInitParameter("param-name名称");
// 得到servlet-name名称
String name = config.getServletName();
// 得到ServletContext对象
ServletContext context = config.getServletContext();

2.获取web.xml中init-param的值:

(1)在servlet节点中加入init-param节点:

<servlet>
    <init-param>
        <!-- key名 -->
        <param-name>key1</param-name>
        <!-- 值 -->
        <param-value>value1</param-value>
    </init-param>
</servlet>

(2)在HttpServlet继承类中获取init-param的值:

ServletConfig config = getServletConfig();
// 得到名称对应的值
String value1 = config.getInitParameter("key1");

七、ServletContext类 :

说明:
称为域,多个线程(Servlet)可以共用一个ServletContext对象,实现多个Servlet程序之间的通讯。

1.利用ServletContext传递参数与获取:

ServletContext context = getServletContext();
//将key=value保存在ServletContext域中
context.setAttribute("key1", "value1");
//别的Servlet或jsp中可直接获取key对应的值
String value1 = context.getAttribute("key1").toString();

2.利用ServletContext读取web.xml的全局参数:

(1)在web.xml中增加参数:

<context-param>
    <!-- key名称 -->
    <param-name>key1</param-name>
    <!-- 值 -->
    <param-value>value1</param-value>
</context-param>

(2)在Servlet中获取context-param中的参数:

ServletContext context = getServletContext();
context.getInitParameterNames(); //获得param-name参数列表
String value1 = getInitParameter("key1"); //得到key1参数的值

3.利用ServletContext得到文件路径:

//1.获取ServletContext
ServletContext context = getServletContext();
Properties p = new Properties();
//2.获取文件路径
String filePath = context.getRealPath("/WEB-INF/config/a.properties");
//2.获取文件输入流
//InputStream in = context.getResourceAsStream("/WEB-INF/config/a.properties");
//2.获取文件输入流
InputStream in = this.getClass().getClassLoader().getResourceAsStream("../../WEB-INF/config/a.properties");
//3.装载文件
p.load(new FileInputStream(filePath));
//3.装载文件
//p.load(in);
//4.读取文件值
String value1 = p.getProperty("key1"); // 得到值

八、HttpServletRequest类 :

1.获取头信息:

//获取头字段集合
Enumeration<String> headers = req.getHeaderNames();
while (headers.hasMoreElements()) {
    //获取头字段key
    String key = (String) headers.nextElement();
    //获取头字段value
    String value = req.getHeader(key);
}

2.获取传过来的参数:

//1.获取指定参数值
String username = req.getParameter("username");
		
//1.获取参数集合
Map<String, String[]> keyMap = req.getParameterMap();
Iterator<String> iter = keyMap.keySet().iterator();
while (iter.hasNext()) {
    //获取参数名
    String key = iter.next();
    //获取参数值
    String value = keyMap.get(key)[0];
}

3.处理参数乱码:

(1)GET请求乱码处理:

//处理参数乱码
String result = new String(req.getParameter("name").getBytes("ISO-8859-1"), "UTF-8");

(2)POST请求乱码处理:

//设置POST请求体编码格式
req.setCharacterEncoding("UTF-8");

九、HttpServletResponse类 :

1.方法:

//输出字符流(这个输出流不用关,服务器会自动关)
PrintWriter writer = resp.getWriter();
//输出字节流(这个输出流不用关,服务器会自动关)
OutputStream out = resp.getOutputStream();
//设置状态码
resp.setStatus(200);
//设置返回头
resp.setHeader("key1", "value1");
//设置内容类型
resp.setContentType("text/html; charset=UTF-8");
//设置内容长度
resp.setContentLength(100);

2.处理返回乱码问题:

//设置返回内容编码格式
resp.setCharacterEncoding("UTF-8");
//设置返回内容编码格式
resp.setHeader("ContentType", "text/html; charset=UTF-8");
//设置返回内容编码格式
resp.setContentType("text/html; charset=UTF-8");

3.跳转页面:

/为正斜杠:
表示url地址,访问web地址时用正,例如:http://localhost:8080、/user.html
\为反斜杠:
表示真实本地路径,例如:c:\windows;
在java流中要用“\\”,第一个为转义符,第二个为真正的反斜杠,例如:new FileOutputStream("c:\\")。

(1)转发跳转(带参数):

//转发跳转,user.html位于WebContent目录下
req.getRequestDispatcher("/user.html").forward(req, resp);

(2)重定向跳转(不带参数):

//获取web根目录
String rootPath = req.getContextPath();
//重定向跳转,user.html位于WebContent目录下
resp.sendRedirect(rootPath + "/user.html");

4.设置缓存时间:

// 设置缓存时间,缓存期间不访问服务器,只读取本地缓存内容
resp.setDateHeader("expires", System.currentTimeMillis() + 1000 * 60 * 60);

十、在web.xml中设置session超时时间:

<session-config>
    <!-- session超时时间为2分钟 -->
    <session-timeout>2</session-timeout>
</session-config>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值