一、Web页面
1. 通过request获取URL:
- request.getScheme(); // 获取协议: http
- request.getServerName(); //获取输入的IP, eg;输入的是localhost,则值就是:127.1.1.0
- request.getServerPort(); // 获取端口号
- request.getContextPath(); // 获取工程名路径
2. 使用反射机制,简化servlet.java
<div class="form">
<form action="userServlet" method="post">
<input type="hidden" name="action" value="regist"> --------------------->action参数的value="regist",表明是注册功能
<label>用户名称:</label>
<input class="itxt" type="text" placeholder="请输入用户名"
value="${requestScope.username}"
autocomplete="off" tabindex="1" name="username" id="username" />
<br />
- 通过反射机制,在获取xml中action对象后,调用响应的功能 ```java import java.lang.reflect.Method;
public class UserServletTest { public void login() { System.out.println(“这是login()方法调用了”); }
public void regist() {
System.out.println("这是regist()方法调用了");
}
public void updateUser() {
System.out.println("这是updateUser()方法调用了");
}
public void updateUserPassword() {
System.out.println("这是updateUserPassword()方法调用了");
}
public static void main(String[] args) {
String action = "regist";
try {
// 获取action业务鉴别字符串,获取相应的业务 方法反射对象
Method method = UserServletTest.class.getDeclaredMethod(action); // *********************
// System.out.println(method); // 调用目标业务 方法 method.invoke(new UserServletTest() ); } catch (Exception e) { e.printStackTrace(); } } }
<a name="fL596"></a>
### 3. 抽取BaseServlet.java
- 逻辑示意图:
![image.png](https://cdn.nlark.com/yuque/0/2021/png/22435741/1629969636027-01af779a-b546-4c4b-bdeb-23351b99a872.png#crop=0&crop=0&crop=1&crop=1&height=427&id=F3UKN&margin=%5Bobject%20Object%5D&name=image.png&originHeight=427&originWidth=746&originalType=binary&ratio=1&rotation=0&showTitle=false&size=78410&status=done&style=none&title=&width=746)
- java代码实现:
```java
public abstract class BaseServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String action = req.getParameter("action");
try {
// 获取action业务鉴别字符串,获取相应的业务 方法反射对象
Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class); // <form action="userServlet" method="post">
// System.out.println(method);
// 调用目标业务 方法
method.invoke(this, req, resp);
} catch (Exception e) {
e.printStackTrace();
}
}
}
二、数据的封装和抽取 BeanUtils 的使用
1. 概念及作用
- BeanUtils 工具类, 它可以一次性的把所有请求的参数注入到 JavaBean 中
- BeanUtils 工具类, 经常用于把 Map 中的值注入到 JavaBean 中, 或者是对象属性值的拷贝操作
2. BeanUtils是第三方包
- 1、 导入需要的 jar 包:
- commons-beanutils-1.8.0.jar - commons-logging-1.1.1.jar
- 2、 编写 WebUtils 工具类使用:
把所有数据都封装到User对象中
User user = new User();
BeanUtils.populate(user, request.getParameterMap());